*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:#0f172a;color:#e2e8f0;min-height:100vh}.app{max-width:1280px;margin:0 auto;padding:0 1rem 4rem}.app-header{text-align:center;padding:2.5rem 1rem 1.5rem;border-bottom:1px solid #1e293b;margin-bottom:2rem}.app-header h1{font-size:2rem;font-weight:700;color:#f8fafc}.subtitle{color:#94a3b8;margin-top:.4rem;font-size:.95rem}.app-main{display:flex;flex-direction:column;gap:1.5rem}.search-form{background:#1e293b;border:1px solid #334155;border-radius:12px;padding:1.5rem}.form-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:1rem;margin-bottom:1.2rem}.form-group{display:flex;flex-direction:column;gap:.4rem}.form-group label{font-size:.8rem;font-weight:600;color:#94a3b8;text-transform:uppercase;letter-spacing:.05em}.form-group input{background:#0f172a;border:1px solid #334155;border-radius:8px;padding:.55rem .8rem;color:#e2e8f0;font-size:.95rem;transition:border-color .15s}.form-group input:focus{outline:none;border-color:#6366f1}.form-group input::placeholder{color:#475569}.form-actions{display:flex;gap:.75rem;flex-wrap:wrap}.btn{padding:.55rem 1.4rem;border:none;border-radius:8px;font-size:.95rem;font-weight:600;cursor:pointer;transition:opacity .15s,transform .1s}.btn:active{transform:scale(.97)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:#6366f1;color:#fff}.btn-primary:hover:not(:disabled){background:#4f46e5}.btn-secondary{background:#334155;color:#cbd5e1}.btn-secondary:hover:not(:disabled){background:#475569}.status-bar{display:flex;justify-content:space-between;align-items:center;font-size:.85rem;color:#64748b;flex-wrap:wrap;gap:.5rem}.polling-badge{color:#22c55e;font-weight:600}.error-banner{background:#450a0a;border:1px solid #7f1d1d;color:#fca5a5;padding:.75rem 1rem;border-radius:8px;font-size:.9rem}.placeholder{display:flex;flex-direction:column;align-items:center;gap:1rem;padding:4rem;color:#475569;font-size:.95rem}.spinner{width:36px;height:36px;border:3px solid #334155;border-top-color:#6366f1;border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.table-wrapper{overflow-x:auto;border-radius:12px;border:1px solid #1e293b}.course-table{width:100%;border-collapse:collapse;font-size:.9rem}.course-table thead tr{background:#1e293b}.course-table th{padding:.75rem 1rem;text-align:left;font-size:.75rem;font-weight:600;color:#94a3b8;text-transform:uppercase;letter-spacing:.05em;white-space:nowrap}.course-table tbody tr{border-top:1px solid #1e293b;transition:background .1s}.course-table tbody tr:hover{background:#1e293b}.row-full{opacity:.75}.course-table td{padding:.75rem 1rem;vertical-align:middle;white-space:nowrap}.course-table td.schedule{white-space:normal;min-width:140px}td.code{font-family:monospace;font-size:.85rem;color:#a5b4fc}.status-badge{display:inline-block;padding:.2rem .6rem;border-radius:999px;font-size:.72rem;font-weight:700;letter-spacing:.04em}.badge-open{background:#14532d;color:#4ade80}.badge-full{background:#450a0a;color:#f87171}.enrollment{display:flex;flex-direction:column;gap:.3rem;min-width:120px}.remaining{color:#64748b;font-size:.8rem}.progress-bar{height:4px;background:#1e293b;border-radius:999px;overflow:hidden}.progress-fill{height:100%;border-radius:999px;transition:width .3s}.toast-container{position:fixed;bottom:1.5rem;right:1.5rem;display:flex;flex-direction:column;gap:.6rem;z-index:9999}.toast{background:#1e293b;border:1px solid #4ade80;color:#4ade80;padding:.8rem 1.2rem;border-radius:10px;font-size:.9rem;font-weight:600;box-shadow:0 4px 20px #00000080;animation:slideIn .25s ease}@keyframes slideIn{0%{transform:translate(120%);opacity:0}to{transform:translate(0);opacity:1}}.app-loading{display:flex;justify-content:center;align-items:center;min-height:100vh}.header-inner{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem}.tabs{display:flex;gap:0;margin-top:1.25rem;border-bottom:2px solid #1e293b}.tab{background:none;border:none;padding:.55rem 1.25rem;font-size:.9rem;font-weight:600;color:#64748b;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-2px;transition:color .15s,border-color .15s;display:flex;align-items:center;gap:.45rem}.tab:hover{color:#e2e8f0}.tab-active{color:#a5b4fc;border-bottom-color:#6366f1}.tab-badge{background:#6366f1;color:#fff;font-size:.7rem;font-weight:700;padding:.1rem .5rem;border-radius:999px;min-width:1.3rem;text-align:center}.watch-btn{background:none;border:none;font-size:1.1rem;cursor:pointer;color:#475569;padding:.2rem .4rem;border-radius:6px;transition:color .15s,background .15s;line-height:1}.watch-btn:hover{color:#fbbf24;background:#1e293b}.watch-btn-active{color:#fbbf24}.login-page{display:flex;justify-content:center;align-items:center;min-height:100vh;padding:1rem;background:#0f172a}.login-card{background:#1e293b;border:1px solid #334155;border-radius:16px;padding:2.5rem 2rem;max-width:400px;width:100%;text-align:center;display:flex;flex-direction:column;gap:1rem}.login-logo{font-size:3rem}.login-title{font-size:1.5rem;font-weight:700;color:#f8fafc}.login-subtitle{color:#94a3b8;font-size:.9rem;line-height:1.5}.btn-google{display:flex;align-items:center;justify-content:center;gap:.7rem;width:100%;padding:.7rem 1.2rem;background:#fff;color:#111;border:none;border-radius:8px;font-size:.95rem;font-weight:600;cursor:pointer;margin-top:.5rem;transition:opacity .15s,transform .1s}.btn-google:hover:not(:disabled){opacity:.9}.btn-google:active{transform:scale(.97)}.btn-google:disabled{opacity:.5;cursor:not-allowed}.google-icon{width:20px;height:20px;flex-shrink:0}.login-error{color:#f87171;font-size:.85rem;margin-top:.25rem}.user-menu{position:relative}.user-avatar-btn{background:none;border:2px solid #334155;border-radius:50%;cursor:pointer;padding:0;width:40px;height:40px;overflow:hidden;display:flex;align-items:center;justify-content:center;transition:border-color .15s}.user-avatar-btn:hover{border-color:#6366f1}.user-avatar{width:100%;height:100%;object-fit:cover}.user-avatar-fallback{width:100%;height:100%;background:#6366f1;color:#fff;font-size:1rem;font-weight:700;display:flex;align-items:center;justify-content:center}.user-menu-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100}.user-menu-dropdown{position:absolute;top:calc(100% + .5rem);right:0;background:#1e293b;border:1px solid #334155;border-radius:10px;min-width:200px;padding:.5rem 0;z-index:101;box-shadow:0 8px 24px #00000080}.user-menu-info{padding:.75rem 1rem;display:flex;flex-direction:column;gap:.2rem}.user-menu-name{font-size:.9rem;font-weight:600;color:#e2e8f0}.user-menu-email{font-size:.78rem;color:#64748b;word-break:break-all}.user-menu-divider{border:none;border-top:1px solid #334155;margin:0}.user-menu-signout{width:100%;background:none;border:none;color:#f87171;font-size:.9rem;font-weight:600;padding:.65rem 1rem;text-align:left;cursor:pointer;transition:background .15s}.user-menu-signout:hover{background:#0f172a}.action-cell{display:flex;align-items:center;gap:.25rem}.notify-btn{background:none;border:none;font-size:.95rem;cursor:pointer;color:#475569;padding:.2rem .35rem;border-radius:6px;transition:color .15s,background .15s;line-height:1;opacity:.5}.notify-btn:hover{color:#e2e8f0;background:#1e293b;opacity:1}.notify-btn-active{color:#6366f1;opacity:1}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000a6;z-index:200;display:flex;align-items:center;justify-content:center;padding:1rem;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.modal{background:#1e293b;border:1px solid #334155;border-radius:14px;width:100%;max-width:480px;display:flex;flex-direction:column;gap:0;box-shadow:0 20px 60px #0009;animation:modalIn .2s ease}@keyframes modalIn{0%{transform:scale(.95);opacity:0}to{transform:scale(1);opacity:1}}.modal-header{display:flex;justify-content:space-between;align-items:flex-start;padding:1.25rem 1.5rem 1rem;border-bottom:1px solid #334155}.modal-title{font-size:1.05rem;font-weight:700;color:#f8fafc}.modal-subtitle{font-size:.8rem;color:#64748b;margin-top:.2rem}.modal-close{background:none;border:none;color:#64748b;font-size:1rem;cursor:pointer;padding:.2rem .4rem;border-radius:6px;line-height:1;transition:color .15s,background .15s;flex-shrink:0}.modal-close:hover{color:#e2e8f0;background:#334155}.modal-body{padding:1.25rem 1.5rem;display:flex;flex-direction:column;gap:.85rem}.modal-footer{display:flex;justify-content:flex-end;gap:.6rem;padding:1rem 1.5rem;border-top:1px solid #334155}.notify-row{display:block;cursor:pointer}.notify-row-left{display:flex;align-items:flex-start;gap:.75rem}.notify-row input[type=checkbox]{margin-top:.2rem;width:16px;height:16px;accent-color:#6366f1;flex-shrink:0;cursor:pointer}.notify-label{display:flex;align-items:center;gap:.4rem;font-size:.95rem;font-weight:600;color:#e2e8f0}.notify-desc{display:block;font-size:.8rem;color:#64748b;margin-top:.15rem}.notify-row-compact{margin-top:.25rem}.discord-icon{width:16px;height:16px;color:#5865f2;flex-shrink:0}.notify-sub{padding:.85rem 1rem;background:#0f172a;border:1px solid #334155;border-radius:8px;display:flex;flex-direction:column;gap:.75rem;margin-left:1.5rem}.field-hint{display:block;font-size:.75rem;color:#64748b;margin-top:.25rem;line-height:1.4}.notify-info{font-size:.82rem;color:#f59e0b;background:#451a03;border:1px solid #92400e;border-radius:6px;padding:.5rem .75rem}.notify-prefs-panel{max-width:560px;margin:1.5rem auto;background:#1e293b;border:1px solid #334155;border-radius:14px;overflow:hidden}.notify-prefs-panel-header{padding:1.25rem 1.5rem 1rem;border-bottom:1px solid #334155}.notify-prefs-panel-title{font-size:1.15rem;font-weight:700;color:#f1f5f9;margin:0 0 .35rem}.notify-prefs-panel-subtitle{font-size:.83rem;color:#94a3b8;margin:0;line-height:1.5}.notify-prefs-panel-body{padding:1rem 1.5rem;display:flex;flex-direction:column;gap:.5rem}.notify-prefs-panel-footer{padding:1rem 1.5rem;border-top:1px solid #334155;display:flex;align-items:center;gap:1rem}.notify-saved-badge{font-size:.85rem;font-weight:600;color:#22c55e}.notify-interval-group select{width:100%;background:#0f172a;color:#f1f5f9;border:1px solid #334155;border-radius:8px;padding:.5rem .75rem;font-size:.9rem;cursor:pointer;-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}.notify-interval-group select:focus{outline:2px solid #6366f1;outline-offset:2px;border-color:transparent}
