@import "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap";.toast-container{top:calc(env(safe-area-inset-top,0px) + 12px);z-index:var(--z-toast);gap:var(--space-2);pointer-events:none;flex-direction:column;display:flex;position:fixed;left:50%;transform:translate(-50%)}.toast{align-items:center;gap:var(--space-2);padding:var(--space-3) var(--space-5);border-radius:var(--radius-full);background:var(--color-bg-elevated);box-shadow:var(--shadow-lg);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);pointer-events:auto;-webkit-backdrop-filter:var(--glass-blur);backdrop-filter:var(--glass-blur);border:.5px solid var(--color-border);white-space:nowrap;animation:.35s cubic-bezier(.34,1.56,.64,1) forwards toastIn;display:flex}.toast-icon{color:#fff;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:20px;height:20px;font-size:11px;font-weight:700;display:flex}.toast-success .toast-icon{background:#34c759}.toast-error .toast-icon{background:#ff3b30}.toast-warning .toast-icon{background:#ff9500}.toast-info .toast-icon{background:#007aff}@keyframes toastIn{0%{opacity:0;transform:translateY(-20px)scale(.9)}to{opacity:1;transform:translateY(0)scale(1)}}.week-view{-webkit-overflow-scrolling:touch;flex:1;width:100%;overflow:auto}.week-view-grid{min-width:min-content;min-height:100%;display:grid}.wv-corner{z-index:12;background:var(--glass-bg);-webkit-backdrop-filter:var(--glass-blur);border-right:.5px solid var(--color-separator);justify-content:center;align-items:flex-end;height:52px;padding-bottom:4px;display:flex;position:sticky;top:0}.corner-month{font-size:10px;font-weight:var(--font-weight-semibold);color:var(--color-text-secondary)}.wv-day-header{z-index:11;background:var(--glass-bg);height:52px;-webkit-backdrop-filter:var(--glass-blur);border-bottom:.5px solid var(--color-separator);border-right:.5px solid var(--color-separator);flex-direction:column;justify-content:center;align-items:center;gap:2px;display:flex;position:sticky;top:0}.wv-day-header:last-of-type{border-right:none}.day-label{font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);color:var(--color-text-secondary)}.day-date{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);border-radius:50%;justify-content:center;align-items:center;width:28px;height:28px;display:flex}.is-today .day-label{color:var(--color-accent)}.is-today-date{background:var(--color-accent);color:#fff!important}.wv-time-cell{border-right:.5px solid var(--color-separator);border-bottom:.5px solid var(--color-separator);box-sizing:border-box;flex-direction:column;justify-content:center;align-items:center;gap:0;width:100%;display:flex}.period-num{font-size:var(--font-size-sm);font-weight:var(--font-weight-bold);color:var(--color-text-primary);margin-bottom:2px;line-height:1}.period-time{color:var(--color-text-tertiary,#98989f);white-space:nowrap;flex-shrink:0;font-size:9px;line-height:1.1;display:block}.wv-empty-cell{border-right:.5px solid var(--color-separator);border-bottom:.5px solid var(--color-separator);cursor:pointer;transition:background var(--transition-fast);box-sizing:border-box}.wv-empty-cell:hover{background:var(--color-fill-hover)}.wv-course-slot{border-radius:var(--radius-sm);cursor:pointer;z-index:2;transition:transform var(--transition-fast), box-shadow var(--transition-fast);-webkit-tap-highlight-color:transparent;margin:1px 2px;position:relative;overflow:visible}.wv-course-slot:hover{z-index:3;transform:scale(1.02);box-shadow:0 4px 16px #00000026}.wv-course-slot:active{transform:scale(.98)}.wv-course-inner{inset-inline:0;top:var(--course-offset,0%);height:var(--course-height,100%);box-sizing:border-box;color:#fff;border-radius:var(--radius-sm);flex-direction:column;gap:1px;width:100%;min-height:22px;padding:2px 4px;display:flex;position:absolute;overflow:hidden}.wv-course-name{font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);-webkit-line-clamp:3;line-clamp:3;word-break:break-all;-webkit-box-orient:vertical;line-height:1.2;display:-webkit-box;overflow:hidden}.wv-course-location{opacity:.85;white-space:nowrap;text-overflow:ellipsis;align-items:center;gap:2px;font-size:10px;line-height:1.2;display:flex;overflow:hidden}.wv-course-time{opacity:.92;font-size:10px;line-height:1.15;font-weight:var(--font-weight-medium)}.wv-course-location svg{opacity:.8;flex-shrink:0}.wv-course-teacher{opacity:.7;white-space:nowrap;text-overflow:ellipsis;margin-top:auto;font-size:10px;overflow:hidden}.week-selector{align-items:center;gap:var(--space-2);display:flex}.week-nav-btn{border-radius:var(--radius-sm);width:32px;height:32px;color:var(--color-accent);transition:all var(--transition-fast);-webkit-tap-highlight-color:transparent;justify-content:center;align-items:center;display:flex}.week-nav-btn:hover:not(:disabled){background:var(--color-fill-hover)}.week-nav-btn:active:not(:disabled){transform:scale(.9)}.week-nav-btn:disabled{opacity:.3;cursor:not-allowed}.week-display{padding:var(--space-1) var(--space-3);border-radius:var(--radius-sm);transition:background var(--transition-fast);-webkit-tap-highlight-color:transparent;flex-direction:column;align-items:center;min-width:100px;display:flex}.week-display:hover{background:var(--color-fill-hover)}.week-number{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold)}.week-current-hint{color:var(--color-accent);font-size:10px;font-weight:var(--font-weight-medium)}.color-picker{gap:var(--space-3);flex-wrap:wrap;display:flex}.color-swatch{background:var(--swatch-color);cursor:pointer;width:32px;height:32px;transition:all var(--transition-fast);-webkit-tap-highlight-color:transparent;border:2.5px solid #0000;border-radius:50%;justify-content:center;align-items:center;display:flex}.color-swatch:hover{transform:scale(1.15)}.color-swatch.active{border-color:var(--swatch-color);box-shadow:0 0 0 2px var(--color-bg-elevated), 0 0 0 4px var(--swatch-color);transform:scale(1.1)}.semester-form{gap:var(--space-4);flex-direction:column;max-height:80vh;padding:2px;display:flex;overflow-y:auto}.period-actions{gap:var(--space-2);display:flex}.period-act-btn{font-size:var(--font-size-xs);color:var(--color-accent);padding:var(--space-1) var(--space-2);border-radius:var(--radius-sm);font-weight:var(--font-weight-medium);transition:opacity var(--transition-fast);background:#007aff1a}.period-act-btn:disabled{opacity:.5;cursor:not-allowed;color:var(--color-text-secondary);background:var(--color-fill-disabled)}.periods-container{gap:var(--space-2);max-height:300px;padding-right:var(--space-2);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-3);background:var(--color-bg-tertiary);flex-direction:column;display:flex;overflow-y:auto}.period-row{align-items:center;gap:var(--space-2);display:flex}.period-num-label{width:24px;font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-secondary);text-align:center}.time-input{padding:var(--space-2) var(--space-3);font-size:var(--font-size-sm);flex:1}.period-sep{color:var(--color-text-tertiary)}.modal-overlay{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:var(--z-modal-backdrop);background:#0006;justify-content:center;align-items:flex-end;padding:0;animation:.2s forwards fadeIn;display:flex;position:fixed;inset:0}@media (width>=640px){.modal-overlay{padding:var(--space-6);align-items:center}}.modal-content{background:var(--color-bg-elevated);border-radius:var(--radius-lg) var(--radius-lg) 0 0;width:100%;max-height:90dvh;z-index:var(--z-modal);flex-direction:column;animation:.35s cubic-bezier(.25,.46,.45,.94) forwards slideInFromBottom;display:flex;overflow:hidden}@media (width>=640px){.modal-content{border-radius:var(--radius-lg);animation:.25s cubic-bezier(.25,.46,.45,.94) forwards scaleIn}.modal-sm{max-width:400px}.modal-md{max-width:520px}.modal-lg{max-width:680px}}.modal-header{padding:var(--space-4) var(--space-5);border-bottom:.5px solid var(--color-separator);flex-shrink:0;justify-content:space-between;align-items:center;display:flex}.modal-title{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold)}.modal-close{width:30px;height:30px;color:var(--color-text-tertiary);background:var(--color-bg-tertiary);transition:all var(--transition-fast);border-radius:50%;justify-content:center;align-items:center;display:flex}.modal-close:hover{background:var(--color-fill-active);color:var(--color-text-primary)}.modal-body{padding:var(--space-5);-webkit-overflow-scrolling:touch;flex:1;overflow-y:auto}.schedule-page{flex-direction:column;flex:1;display:flex;overflow:hidden}.schedule-topbar{padding:calc(env(safe-area-inset-top,0px) + var(--space-3)) var(--space-4) var(--space-3);background:var(--glass-bg);-webkit-backdrop-filter:var(--glass-blur);border-bottom:.5px solid var(--color-separator);z-index:20;justify-content:space-between;align-items:center;gap:var(--space-3);display:flex;position:sticky;top:0}.schedule-topbar-left,.schedule-topbar-right{flex:none;min-width:40px}.schedule-topbar-center{flex:1;justify-content:center;align-items:center;display:flex}.schedule-title{font-size:var(--font-size-md);font-weight:var(--font-weight-semibold);white-space:nowrap;text-overflow:ellipsis;max-width:120px;overflow:hidden}.add-course-btn{width:36px;height:36px;color:var(--color-accent);background:var(--color-fill-hover);transition:all var(--transition-fast);-webkit-tap-highlight-color:transparent;border-radius:50%;justify-content:center;align-items:center;display:flex}.add-course-btn:hover{background:var(--color-accent);color:#fff}.add-course-btn:active{transform:scale(.9)}.schedule-empty{justify-content:center;align-items:center;gap:var(--space-4);padding:var(--space-8);text-align:center;flex-direction:column;flex:1;display:flex}.empty-illustration{margin-bottom:var(--space-4);animation:3s ease-in-out infinite float}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-8px)}}.empty-title{font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold)}.empty-desc{font-size:var(--font-size-md);color:var(--color-text-secondary)}.empty-btn{padding:var(--space-3) var(--space-8);border-radius:var(--radius-full);background:var(--color-accent);color:#fff;font-size:var(--font-size-md);font-weight:var(--font-weight-semibold);transition:all var(--transition-fast);margin-top:var(--space-4)}.empty-btn:hover{background:var(--color-accent-hover);transform:scale(1.03)}.empty-btn:active{transform:scale(.97)}.course-detail{gap:var(--space-4);margin:calc(-1 * var(--space-5));margin-top:calc(-1 * var(--space-5));flex-direction:column;display:flex}.course-detail-header{padding:var(--space-6) var(--space-5);color:#fff}.course-detail-name{font-size:var(--font-size-xl);font-weight:var(--font-weight-bold)}.course-detail-info{gap:var(--space-3);padding:0 var(--space-5);flex-direction:column;display:flex}.detail-row{align-items:center;gap:var(--space-3);font-size:var(--font-size-md);display:flex}.detail-icon{text-align:center;width:24px;font-size:18px}.course-detail-actions{gap:var(--space-3);padding:var(--space-4) var(--space-5) var(--space-5);display:flex}.detail-btn{padding:var(--space-3);border-radius:var(--radius-md);font-size:var(--font-size-md);font-weight:var(--font-weight-semibold);transition:all var(--transition-fast);flex:1}.detail-btn-edit{background:var(--color-accent);color:#fff}.detail-btn-edit:hover{background:var(--color-accent-hover)}.detail-btn-delete{color:var(--color-destructive);background:#ff3b301a}.detail-btn-delete:hover{background:#ff3b3033}@media (width<=640px){.schedule-title{font-size:var(--font-size-sm)}.schedule-topbar{padding:calc(env(safe-area-inset-top,0px) + var(--space-2)) var(--space-3) var(--space-2)}}.course-form{gap:var(--space-4);flex-direction:column;display:flex}.form-section{gap:var(--space-2);flex-direction:column;display:flex}.form-label{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.3px}.form-input,.form-select,.form-textarea{width:100%;padding:var(--space-3) var(--space-4);border:1px solid var(--color-border-strong);border-radius:var(--radius-md);background:var(--color-bg-tertiary);font-size:var(--font-size-md);color:var(--color-text-primary);transition:all var(--transition-fast);-webkit-appearance:none;outline:none}.form-input:focus,.form-select:focus,.form-textarea:focus{border-color:var(--color-accent);box-shadow:0 0 0 3px #007aff26}.form-input::placeholder,.form-textarea::placeholder{color:var(--color-text-tertiary)}.form-textarea{resize:vertical;min-height:60px}.form-select{cursor:pointer;background-image:url("data:image/svg+xml,%3Csvg width='10' height='6' viewBox='0 0 10 6' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 1L5 5L9 1' stroke='%23666' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-position:right 12px center;background-repeat:no-repeat;padding-right:36px}.form-row{gap:var(--space-3);display:flex}.form-flex{flex:1}.form-divider{background:var(--color-separator);height:.5px;margin:var(--space-1) 0}.form-day-picker{gap:var(--space-2);flex-wrap:wrap;display:flex}.day-btn{padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);background:var(--color-bg-tertiary);color:var(--color-text-primary);transition:all var(--transition-fast);border:1px solid #0000}.day-btn:hover{background:var(--color-fill-active)}.day-btn.active{background:var(--color-accent);color:#fff}.form-week-type{gap:var(--space-2);display:flex}.week-type-btn{padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);background:var(--color-bg-tertiary);color:var(--color-text-primary);transition:all var(--transition-fast);flex:1}.week-type-btn:hover{background:var(--color-fill-active)}.week-type-btn.active{background:var(--color-accent);color:#fff}.time-slot-card{gap:var(--space-3);padding:var(--space-4);background:var(--color-bg-tertiary);border-radius:var(--radius-md);border:1px solid var(--color-border);flex-direction:column;display:flex}.time-slot-header{justify-content:space-between;align-items:center;display:flex}.time-slot-title{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-accent)}.time-slot-remove{font-size:var(--font-size-sm);color:var(--color-destructive);font-weight:var(--font-weight-medium);padding:var(--space-1) var(--space-2);border-radius:var(--radius-sm);transition:background var(--transition-fast)}.time-slot-remove:hover{background:#ff3b301a}.add-slot-btn{justify-content:center;align-items:center;gap:var(--space-2);padding:var(--space-3);border-radius:var(--radius-md);border:1.5px dashed var(--color-border-strong);color:var(--color-accent);font-weight:var(--font-weight-medium);font-size:var(--font-size-sm);transition:all var(--transition-fast);width:100%;display:flex}.add-slot-btn:hover{background:var(--color-fill-hover);border-color:var(--color-accent)}.form-actions{gap:var(--space-3);padding-top:var(--space-2);display:flex}.form-btn{padding:var(--space-3) var(--space-5);border-radius:var(--radius-md);font-size:var(--font-size-md);font-weight:var(--font-weight-semibold);transition:all var(--transition-fast);-webkit-tap-highlight-color:transparent;flex:1}.form-btn-primary{background:var(--color-accent);color:#fff}.form-btn-primary:hover{background:var(--color-accent-hover)}.form-btn-primary:active{transform:scale(.97)}.form-btn-secondary{background:var(--color-bg-tertiary);color:var(--color-text-primary)}.form-btn-secondary:hover{background:var(--color-fill-active)}.form-error{padding:var(--space-3) var(--space-4);border-radius:var(--radius-sm);color:var(--color-destructive);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);background:#ff3b301a}.jw-import-form{gap:var(--space-4);flex-direction:column;display:flex}.jw-import-tip,.jw-import-proxy-note{padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);font-size:var(--font-size-sm);line-height:1.5}.jw-import-tip{color:var(--color-text-secondary);background:#007aff14}.jw-import-proxy-note{background:var(--color-bg-tertiary);color:var(--color-text-tertiary)}.settings-page{-webkit-overflow-scrolling:touch;padding-top:env(safe-area-inset-top,0px);flex:1;overflow-y:auto}.settings-group{margin-bottom:var(--space-6);padding:0 var(--space-4)}.settings-group-title{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.3px;padding:0 var(--space-4);margin-bottom:var(--space-2)}.settings-card{background:var(--color-bg-secondary);border-radius:var(--radius-md);overflow:hidden}.settings-item{padding:var(--space-3) var(--space-4);border-bottom:.5px solid var(--color-separator);font-size:var(--font-size-md);justify-content:space-between;align-items:center;gap:var(--space-3);color:inherit;text-decoration:none;display:flex;position:relative}.settings-item:last-child{border-bottom:none}.settings-item.clickable{cursor:pointer;transition:background var(--transition-fast);text-align:left;width:100%}.settings-item.clickable:hover{background:var(--color-fill-hover)}.settings-item-desc{font-size:var(--font-size-sm);color:var(--color-text-tertiary)}.settings-chevron{flex-shrink:0}.theme-selector{gap:var(--space-2);background:var(--color-bg-tertiary);border-radius:var(--radius-sm);padding:2px;display:flex}.theme-btn{padding:var(--space-1) var(--space-3);border-radius:calc(var(--radius-sm) - 2px);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);transition:all var(--transition-fast);color:var(--color-text-secondary);align-items:center;gap:4px;display:flex}.theme-btn.active{background:var(--color-bg-secondary);color:var(--color-text-primary);box-shadow:var(--shadow-sm)}.toggle{flex-shrink:0;width:51px;height:31px;display:inline-block;position:relative}.toggle input{opacity:0;width:0;height:0}.toggle-slider{cursor:pointer;background:var(--color-fill-active);border-radius:var(--radius-full);transition:all var(--transition-normal);position:absolute;inset:0}.toggle-slider:before{content:"";width:27px;height:27px;transition:all var(--transition-normal);background:#fff;border-radius:50%;position:absolute;bottom:2px;left:2px;box-shadow:0 2px 4px #00000026}.toggle input:checked+.toggle-slider{background:var(--color-accent)}.toggle input:checked+.toggle-slider:before{transform:translate(20px)}.settings-select{padding:var(--space-1) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg-tertiary);font-size:var(--font-size-sm);color:var(--color-text-primary);-webkit-appearance:none;cursor:pointer}.settings-profile{align-items:center;gap:var(--space-3);padding:var(--space-4);display:flex}.profile-avatar{background:linear-gradient(135deg, var(--color-accent), #5ac8fa);color:#fff;width:44px;height:44px;font-size:var(--font-size-lg);font-weight:var(--font-weight-bold);border-radius:50%;justify-content:center;align-items:center;display:flex}.profile-info{flex:1}.profile-name{font-weight:var(--font-weight-semibold)}.profile-sub{font-size:var(--font-size-sm);color:var(--color-text-secondary)}.profile-admin-label{font-size:12px;font-weight:var(--font-weight-semibold);color:var(--color-accent);margin-top:4px}.settings-admin-btn,.settings-logout-btn{padding:var(--space-2) var(--space-4);border-radius:var(--radius-sm);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium)}.settings-admin-btn{color:var(--color-accent);background:#007aff1a}.settings-logout-btn{color:var(--color-destructive);background:#ff3b301a}.semester-item{flex-wrap:wrap}.semester-info{align-items:center;gap:var(--space-2);flex:1;display:flex}.semester-badge{font-size:10px;font-weight:var(--font-weight-semibold);color:var(--color-accent);border-radius:var(--radius-full);background:#007aff1a;padding:1px 6px}.semester-actions{gap:var(--space-2);display:flex}.semester-switch-btn,.semester-delete-btn{font-size:var(--font-size-sm);padding:var(--space-1) var(--space-3);border-radius:var(--radius-sm);font-weight:var(--font-weight-medium)}.semester-switch-btn{color:var(--color-accent);background:#007aff1a}.semester-delete-btn{color:var(--color-destructive);background:#ff3b3014}.course-list-item{gap:var(--space-3)}.course-list-color{border-radius:50%;flex-shrink:0;width:12px;height:12px}.course-list-info{flex-direction:column;flex:1;gap:1px;min-width:0;display:flex}.course-list-name{font-weight:var(--font-weight-medium);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.course-list-meta{font-size:var(--font-size-xs);color:var(--color-text-secondary)}.course-list-actions{gap:var(--space-2);flex-shrink:0;display:flex}.course-list-edit{font-size:var(--font-size-sm);padding:var(--space-1) var(--space-3);border-radius:var(--radius-sm);font-weight:var(--font-weight-medium);color:var(--color-accent);background:#007aff1a}.course-list-delete{font-size:var(--font-size-sm);padding:var(--space-1) var(--space-3);border-radius:var(--radius-sm);font-weight:var(--font-weight-medium);color:var(--color-destructive);background:#ff3b3014}.settings-add-btn{justify-content:center;align-items:center;gap:var(--space-2);width:100%;padding:var(--space-3);color:var(--color-accent);font-weight:var(--font-weight-medium);transition:background var(--transition-fast);display:flex}.settings-add-btn:hover{background:var(--color-fill-hover)}.settings-footer{text-align:center;padding:var(--space-8) var(--space-4);color:var(--color-text-tertiary);font-size:var(--font-size-xs)}.settings-footer p{margin-bottom:var(--space-1)}.auth-page{padding:var(--space-6);flex:1;justify-content:center;align-items:center;display:flex}.auth-card{background:var(--color-bg-secondary);border-radius:var(--radius-xl);width:100%;max-width:400px;padding:var(--space-8);box-shadow:var(--shadow-lg);animation:scaleIn var(--transition-slow) forwards}.auth-header{text-align:center;margin-bottom:var(--space-8)}.auth-logo{margin-bottom:var(--space-5);justify-content:center;display:flex}.auth-title{font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);margin-bottom:var(--space-2)}.auth-subtitle{font-size:var(--font-size-sm);color:var(--color-text-secondary)}.auth-form{gap:var(--space-3);flex-direction:column;display:flex}.auth-submit{margin-top:var(--space-3);height:48px;font-size:var(--font-size-lg);border-radius:var(--radius-md)}.auth-submit:disabled{opacity:.7}.auth-footer{text-align:center;margin-top:var(--space-6);font-size:var(--font-size-sm);color:var(--color-text-secondary)}.auth-link{color:var(--color-accent);font-weight:var(--font-weight-semibold);margin-left:var(--space-1)}:root{--font-family:"Inter", -apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", Roboto, sans-serif;--font-size-xs:11px;--font-size-sm:13px;--font-size-md:15px;--font-size-lg:17px;--font-size-xl:20px;--font-size-2xl:24px;--font-size-3xl:34px;--font-weight-regular:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:20px;--space-6:24px;--space-8:32px;--space-10:40px;--space-12:48px;--radius-sm:8px;--radius-md:12px;--radius-lg:16px;--radius-xl:20px;--radius-full:9999px;--shadow-sm:0 1px 3px #0000000f, 0 1px 2px #0000000a;--shadow-md:0 4px 12px #00000014, 0 2px 4px #0000000a;--shadow-lg:0 12px 40px #0000001f, 0 4px 12px #0000000f;--shadow-xl:0 24px 60px #00000029, 0 8px 20px #00000014;--transition-fast:.15s cubic-bezier(.25, .46, .45, .94);--transition-normal:.25s cubic-bezier(.25, .46, .45, .94);--transition-slow:.35s cubic-bezier(.25, .46, .45, .94);--transition-spring:.5s cubic-bezier(.34, 1.56, .64, 1);--z-dropdown:100;--z-sticky:200;--z-modal-backdrop:300;--z-modal:400;--z-toast:500;--course-color-1:#007aff;--course-color-2:#34c759;--course-color-3:#ff9500;--course-color-4:#ff3b30;--course-color-5:#af52de;--course-color-6:#ff2d55;--course-color-7:#5ac8fa;--course-color-8:#fc0;--course-color-9:#00c7be;--course-color-10:#ff6482;--course-color-11:#30b0c7;--course-color-12:#ac8e68;--color-bg-primary:#f5f5f7;--color-bg-secondary:#fff;--color-bg-tertiary:#f2f2f7;--color-bg-elevated:#fff;--color-bg-grouped:#f2f2f7;--color-text-primary:#1d1d1f;--color-text-secondary:#6e6e73;--color-text-tertiary:#aeaeb2;--color-text-on-color:#fff;--color-accent:#007aff;--color-accent-hover:#0056cc;--color-destructive:#ff3b30;--color-border:#00000014;--color-border-strong:#00000026;--color-separator:#0000000f;--color-fill-hover:#0000000a;--color-fill-active:#00000014;--glass-bg:#ffffffb8;--glass-blur:blur(20px) saturate(180%);--glass-border:#ffffff80;--schedule-cell-min-height:60px;--schedule-header-height:56px;--schedule-time-col-width:50px;--schedule-day-min-width:44px}[data-theme=dark]{--color-bg-primary:#1c1c1e;--color-bg-secondary:#2c2c2e;--color-bg-tertiary:#3a3a3c;--color-bg-elevated:#2c2c2e;--color-bg-grouped:#1c1c1e;--color-text-primary:#f5f5f7;--color-text-secondary:#98989f;--color-text-tertiary:#636366;--color-text-on-color:#fff;--color-accent:#0a84ff;--color-accent-hover:#409cff;--color-destructive:#ff453a;--color-border:#ffffff1a;--color-border-strong:#fff3;--color-separator:#ffffff14;--color-fill-hover:#ffffff0f;--color-fill-active:#ffffff1a;--glass-bg:#1c1c1eb8;--glass-border:#ffffff1a;--shadow-sm:0 1px 3px #0000004d;--shadow-md:0 4px 12px #0006;--shadow-lg:0 12px 40px #00000080}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-text-size-adjust:100%;background-color:var(--color-bg-primary);font-size:16px}body{font-family:var(--font-family);font-size:var(--font-size-md);color:var(--color-text-primary);background-color:var(--color-bg-primary);min-height:100dvh;transition:background-color var(--transition-normal), color var(--transition-normal);line-height:1.47;overflow-x:hidden}#root{background-color:var(--color-bg-primary);flex-direction:column;min-height:100dvh;display:flex}a{color:var(--color-accent);text-decoration:none}button{cursor:pointer;font-family:inherit;font-size:inherit;color:inherit;background:0 0;border:none}input,textarea,select{font-family:inherit;font-size:inherit;color:inherit}.visually-hidden{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--color-text-tertiary);border-radius:var(--radius-full)}::-webkit-scrollbar-thumb:hover{background:var(--color-text-secondary)}.app-layout{flex-direction:column;min-height:100dvh;display:flex;position:relative}.app-content{padding-bottom:calc(env(safe-area-inset-bottom,0px) + 80px);flex-direction:column;flex:1;display:flex}.tab-bar{height:calc(56px + env(safe-area-inset-bottom,0px));padding-bottom:env(safe-area-inset-bottom,0px);background:var(--glass-bg);-webkit-backdrop-filter:var(--glass-blur);border-top:.5px solid var(--color-border);z-index:var(--z-sticky);justify-content:space-around;align-items:center;display:flex;position:fixed;bottom:0;left:0;right:0}.tab-bar-item{padding:var(--space-1) var(--space-4);color:var(--color-text-tertiary);transition:color var(--transition-fast);-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none;flex-direction:column;align-items:center;gap:2px;display:flex}.tab-bar-item.active{color:var(--color-accent)}.tab-bar-item svg{width:24px;height:24px}.tab-bar-item span{font-size:var(--font-size-xs);font-weight:var(--font-weight-medium)}.nav-header{z-index:var(--z-sticky);background:var(--glass-bg);-webkit-backdrop-filter:var(--glass-blur);border-bottom:.5px solid var(--color-border);padding:env(safe-area-inset-top,0px) var(--space-4) 0;position:sticky;top:0}.nav-header-inner{height:var(--schedule-header-height);justify-content:space-between;align-items:center;gap:var(--space-3);display:flex}.nav-title{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold)}.nav-large-title{font-size:var(--font-size-3xl);font-weight:var(--font-weight-bold);padding:var(--space-2) var(--space-4) var(--space-3);letter-spacing:-.4px}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes scaleIn{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes slideInFromBottom{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.animate-fade-in{animation:fadeIn var(--transition-normal) forwards}.animate-slide-up{animation:slideUp var(--transition-slow) forwards}.animate-scale-in{animation:scaleIn var(--transition-normal) forwards}
