:root{--background:234 45% 13%;--foreground:0 0% 92%;--card:220 45% 16%;--card-foreground:0 0% 92%;--muted:215 50% 22%;--muted-foreground:0 0% 63%;--accent:48 100% 50%;--accent-foreground:234 45% 13%;--destructive:346 84% 50%;--destructive-foreground:0 0% 100%;--success:145 63% 49%;--success-foreground:234 45% 13%;--warning:43 96% 56%;--warning-foreground:234 45% 13%;--border:240 4% 37%;--input:215 50% 22%;--ring:171 77% 54%;--bg-primary:hsl(var(--background));--bg-secondary:hsl(var(--card));--bg-tertiary:hsl(var(--muted));--text-primary:hsl(var(--foreground));--text-secondary:hsl(var(--muted-foreground));--red-fill:hsl(var(--destructive));--yellow-fill:hsl(var(--accent));--green-fill:hsl(var(--success));--teal-accent:hsl(var(--ring));--border-color:hsl(var(--border));--hover-bg:hsl(var(--muted));--focus-ring:hsl(var(--ring));--radius:.75rem;--radius-sm:.5rem;--radius-lg:1rem;--shadow-sm:0 1px 2px 0 #00000026;--shadow:0 4px 6px -1px #0003, 0 2px 4px -1px #0000001a;--shadow-md:0 10px 15px -3px #0003, 0 4px 6px -2px #0000001a;--shadow-lg:0 20px 25px -5px #0003, 0 10px 10px -5px #0000001a;--transition-fast:.15s cubic-bezier(.4, 0, .2, 1);--transition-normal:.2s cubic-bezier(.4, 0, .2, 1);--transition-slow:.3s cubic-bezier(.4, 0, .2, 1)}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg-primary);color:var(--text-primary);min-height:100vh;padding:20px;font-family:JetBrains Mono,Fira Code,SF Mono,monospace}.skip-link{background:var(--yellow-fill);color:var(--bg-primary);z-index:10000;border-radius:0 0 4px;padding:8px 16px;font-weight:700;text-decoration:none;position:absolute;top:-40px;left:0}.skip-link:focus{top:0}:focus-visible{box-shadow:0 0 0 2px hsl(var(--background)), 0 0 0 4px hsl(var(--ring));outline:none}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.semester-links{flex-wrap:wrap;justify-content:center;gap:8px;margin:15px 0;display:flex}.semester-nav-link{border:1px solid hsl(var(--border));background:hsl(var(--muted));color:hsl(var(--muted-foreground));border-radius:var(--radius);transition:all var(--transition-fast);padding:8px 16px;font-family:inherit;font-size:.85rem;line-height:1.2;text-decoration:none}.semester-nav-link:hover{background:hsl(var(--card));color:hsl(var(--foreground))}.semester-nav-link.active{background:linear-gradient(135deg, hsl(var(--accent)), #ff8000);color:hsl(var(--accent-foreground));border-color:hsl(var(--accent));font-weight:700}header{text-align:center;background:linear-gradient(135deg, hsl(var(--card)), hsl(var(--muted)));border-radius:var(--radius-lg);border:1px solid hsl(var(--border));margin-bottom:30px;padding:20px;position:relative}header h1{background:linear-gradient(90deg, hsl(var(--destructive)), hsl(var(--accent)));-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;margin-bottom:8px;font-size:clamp(1.25rem,4vw,1.8rem)}header p{color:hsl(var(--muted-foreground));font-size:.9rem}.semester-toggle{justify-content:center;gap:8px;margin:15px 0;display:flex}.semester-btn{border:1px solid hsl(var(--border));background:hsl(var(--muted));color:hsl(var(--muted-foreground));border-radius:var(--radius);cursor:pointer;transition:all var(--transition-fast);padding:8px 16px;font-family:inherit;font-size:.85rem}.semester-btn:hover{background:hsl(var(--card));color:hsl(var(--foreground))}.semester-btn.active{background:linear-gradient(135deg, hsl(var(--accent)), #ff8000);color:hsl(var(--accent-foreground));border-color:hsl(var(--accent));font-weight:700}.stats{justify-content:center;gap:30px;margin-top:15px;display:flex}.stat{text-align:center}.stat-value{font-size:clamp(1rem,3vw,1.4rem);font-weight:700}.stat-label{color:hsl(var(--muted-foreground));font-size:.75rem}.color-legend{color:hsl(var(--muted-foreground));justify-content:center;gap:15px;margin-top:12px;font-size:.75rem;display:flex}.legend-full{color:hsl(var(--destructive))}.legend-near{color:hsl(var(--warning))}.legend-open{color:hsl(var(--success))}.search-container{max-width:400px;margin:0 auto 20px;position:relative}.search-input{background:hsl(var(--input));border:1px solid hsl(var(--border));border-radius:var(--radius);width:100%;color:hsl(var(--foreground));transition:all var(--transition-fast);padding:10px 100px 10px 15px;font-family:inherit;font-size:.9rem}.search-input::-webkit-search-cancel-button{-webkit-appearance:none;display:none}.search-input::placeholder{color:hsl(var(--muted-foreground))}.search-input:focus{border-color:hsl(var(--ring));box-shadow:0 0 0 2px hsl(var(--ring) / .3);outline:none}.search-input:focus~.search-hint,.search-input:not(:placeholder-shown)~.search-hint{opacity:0}.search-hint{color:hsl(var(--muted-foreground));pointer-events:none;transition:opacity var(--transition-fast);font-size:.7rem;position:absolute;top:50%;right:12px;transform:translateY(-50%)}.search-hint kbd{background:hsl(var(--muted));border-radius:var(--radius-sm);border:1px solid hsl(var(--border));padding:2px 6px;font-family:inherit}.controls-panel{background:hsl(var(--card));border:1px solid hsl(var(--border));border-radius:var(--radius-lg);max-width:1400px;box-shadow:var(--shadow-sm);margin:0 auto 20px;padding:15px}.controls-row{flex-wrap:wrap;justify-content:center;align-items:center;gap:12px;display:flex}.controls-panel .search-input{flex:0 280px;min-width:150px}.filter-buttons{flex-wrap:wrap;gap:4px;display:flex}.filter-btn{border:1px solid hsl(var(--border));background:hsl(var(--muted));color:hsl(var(--muted-foreground));border-radius:var(--radius);cursor:pointer;transition:all var(--transition-fast);padding:6px 12px;font-family:inherit;font-size:.75rem}.filter-btn:hover{background:hsl(var(--card));color:hsl(var(--foreground));border-color:hsl(var(--accent) / .5)}.filter-btn.active{background:hsl(var(--accent));color:hsl(var(--accent-foreground));border-color:hsl(var(--accent))}.sort-select{border:1px solid hsl(var(--border));background:hsl(var(--muted));color:hsl(var(--foreground));border-radius:var(--radius);cursor:pointer;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23a0a0a0' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");background-position:right 8px center;background-repeat:no-repeat;padding:6px 24px 6px 12px;font-family:inherit;font-size:.75rem}.controls-panel .jump-to-nav{border-top:1px solid hsl(var(--border));background:0 0;margin-top:10px;margin-bottom:0;padding-top:10px;padding-bottom:0}.controls-panel .jump-to-nav:empty{border:none;margin:0;padding:0;display:none}.bookmark-btn{cursor:pointer;border-radius:var(--radius);transition:all var(--transition-fast);color:hsl(var(--muted-foreground));background:0 0;border:none;margin-right:8px;padding:4px 8px;font-size:1.3rem}.bookmark-btn:hover{background:hsl(var(--muted))}.bookmark-btn.starred{color:hsl(var(--accent))}.toast-container{z-index:2000;flex-direction:column;gap:10px;display:flex;position:fixed;bottom:20px;right:20px}.toast{background:hsl(var(--card));border:1px solid hsl(var(--border));border-radius:var(--radius);box-shadow:var(--shadow-lg);max-width:300px;padding:12px 16px;font-size:.85rem;animation:.3s slideInRight}.toast.fade-out{animation:.3s forwards slideOutRight}@keyframes slideInRight{0%{opacity:0;transform:translate(100%)}to{opacity:1;transform:translate(0)}}@keyframes slideOutRight{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(100%)}}.course-cell.hidden{display:none}.course-grid{grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:8px;max-width:1400px;margin:0 auto;display:grid}.jump-to-nav{background:hsl(var(--card));border-radius:var(--radius);flex-wrap:wrap;justify-content:center;gap:6px;max-width:1400px;margin:0 auto 20px;padding:12px 20px;display:flex}.jump-to-nav a{color:hsl(var(--muted-foreground));border-radius:var(--radius-sm);transition:all var(--transition-fast);padding:4px 8px;font-size:.75rem;text-decoration:none}.jump-to-nav a:hover{background:hsl(var(--muted));color:hsl(var(--foreground))}.dept-header{color:hsl(var(--muted-foreground));border-bottom:1px solid hsl(var(--border));grid-column:1/-1;justify-content:space-between;align-items:center;margin-top:10px;padding:15px 0 5px;font-size:.9rem;font-weight:700;display:flex}.dept-header .back-to-top{color:hsl(var(--muted-foreground));opacity:.6;transition:opacity var(--transition-fast);font-size:.7rem;font-weight:400;text-decoration:none}.dept-header .back-to-top:hover{opacity:1;color:hsl(var(--accent))}.course-cell{border-radius:var(--radius);cursor:pointer;transition:all var(--transition-fast);background:hsl(var(--card));border:1px solid hsl(var(--border));content-visibility:auto;contain-intrinsic-size:120px 44px;justify-content:space-between;align-items:center;min-height:44px;max-height:52px;padding:10px 12px;font-size:.8rem;display:flex;overflow:hidden}.course-cell:hover{box-shadow:var(--shadow-md);transform:translateY(-2px)}.course-cell.full{background:linear-gradient(135deg, hsl(var(--destructive)), #bc1038);border-color:hsl(var(--destructive));color:hsl(var(--destructive-foreground))}.course-cell.near{background:linear-gradient(135deg, hsl(var(--warning)), #c27e0a);border-color:hsl(var(--warning));color:hsl(var(--warning-foreground))}.course-cell.expanded{outline:2px solid hsl(var(--accent))}.course-code{text-overflow:ellipsis;white-space:nowrap;max-width:70%;font-weight:500;overflow:hidden}.course-fill{font-size:.75rem;font-weight:700}.modal-overlay{background:hsl(var(--background) / .8);z-index:1000;visibility:hidden;opacity:0;transition:opacity var(--transition-normal), visibility 0s var(--transition-normal);justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.modal{background:hsl(var(--card));border-radius:var(--radius-lg);border:1px solid hsl(var(--border));width:100%;max-width:900px;max-height:90vh;box-shadow:var(--shadow-lg);flex-direction:column;display:flex;overflow:hidden}.modal-header{border-bottom:1px solid hsl(var(--border));background:hsl(var(--card));z-index:10;flex-shrink:0;justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.modal-header h2{font-size:1.25rem}.modal-header .close-btn{color:hsl(var(--muted-foreground));cursor:pointer;border-radius:var(--radius);min-width:44px;min-height:44px;transition:all var(--transition-fast);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:8px 12px;font-size:1.5rem;display:flex}.modal-header .close-btn:hover{color:hsl(var(--destructive));background:hsl(var(--destructive) / .1)}.modal-header-left{align-items:center;min-width:0;display:flex}.modal-header-left h2{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.modal-body{overscroll-behavior:contain;-webkit-overflow-scrolling:touch;flex:1;min-height:0;padding:20px;overflow-y:auto}.section-type-selector{margin-bottom:16px}.section-type-group{margin-bottom:12px}.section-type-label{color:hsl(var(--muted-foreground));text-transform:uppercase;letter-spacing:.5px;margin-bottom:8px;font-size:.75rem}.section-list{grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px;display:grid}.section-item{background:hsl(var(--muted));border-radius:var(--radius);cursor:pointer;transition:all var(--transition-fast);border:2px solid #0000;padding:12px}.section-item:hover{background:hsl(var(--card))}.section-item.selected{border-color:hsl(var(--accent))}.section-item.full{border-left:4px solid hsl(var(--destructive))}.section-item.near{border-left:4px solid hsl(var(--warning))}.section-id{font-size:1rem;font-weight:700}.section-instructor{color:hsl(var(--muted-foreground));font-size:.75rem}.section-stats{margin-top:8px;font-size:.85rem}.section-fill{font-weight:700}.chart-container{background:hsl(var(--muted));border-radius:var(--radius-lg);margin-top:16px;padding:16px}.chart-wrapper{touch-action:none;height:260px;position:relative}.chart-wrapper canvas{position:absolute;inset:0;width:100%!important;height:100%!important}.chart-placeholder{text-align:center;color:hsl(var(--muted-foreground));justify-content:center;align-items:center;height:100%;font-size:.85rem;display:flex}.chart-hidden{visibility:hidden;overflow:hidden;height:0!important}.chart-legend{color:hsl(var(--muted-foreground));justify-content:center;gap:20px;margin-top:8px;margin-bottom:4px;padding:4px 0;font-size:.7rem;display:none}.chart-legend.visible{display:flex}.chart-legend-item{align-items:center;gap:5px;display:flex}.chart-legend-dot{border-radius:2px;width:10px;height:10px;transform:rotate(45deg)}.chart-legend-dot.capacity-changed{background:hsl(var(--ring))}.milestone-progress{margin:12px 0 20px;padding:0 8px}.mp-track{background:hsl(var(--muted));border-radius:2px;height:4px;margin:22px 0;position:relative;overflow:visible}.mp-fill{background:linear-gradient(90deg,#ff1744,#ff9100,#ffc400,#00e5ff,#d500f9);border-radius:2px;height:100%;transition:width .5s;position:absolute;top:0;left:0}.mp-dot{background:hsl(var(--muted-foreground));border:2px solid hsl(var(--card));z-index:2;width:8px;height:8px;transition:all var(--transition-fast);border-radius:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.mp-dot.passed{box-shadow:0 0 6px}.mp-dot-label{color:hsl(var(--muted-foreground));white-space:nowrap;pointer-events:none;font-size:.55rem;font-weight:600;line-height:1;position:absolute;left:50%;transform:translate(-50%)}.mp-dot:nth-child(odd) .mp-dot-label{bottom:14px}.mp-dot:nth-child(2n) .mp-dot-label{top:14px}.mp-dot.passed .mp-dot-label{color:hsl(var(--foreground))}.chart-mode-toggle{background:hsl(var(--background));border-radius:var(--radius);gap:2px;width:fit-content;margin-bottom:10px;padding:2px;display:flex}.chart-mode-btn{color:hsl(var(--muted-foreground));cursor:pointer;border-radius:calc(var(--radius) - 2px);transition:all var(--transition-fast);background:0 0;border:none;min-height:28px;padding:5px 14px;font-family:inherit;font-size:.72rem}.chart-mode-btn:hover{color:hsl(var(--foreground))}.chart-mode-btn:focus-visible{outline:2px solid hsl(var(--ring));outline-offset:1px}.chart-mode-btn.active{background:hsl(var(--accent));color:hsl(var(--accent-foreground));font-weight:600}.event-history{border:1px solid hsl(var(--border));border-radius:var(--radius);margin-top:16px;overflow:hidden}.event-history-summary{background:hsl(var(--muted));color:hsl(var(--foreground));cursor:pointer;min-height:44px;transition:background var(--transition-fast);align-items:center;gap:8px;padding:10px 14px;font-family:inherit;font-size:.8rem;font-weight:600;list-style:none;display:flex}.event-history-summary:hover{background:hsl(var(--muted) / .8)}.event-history-summary:focus-visible{outline:2px solid hsl(var(--ring));outline-offset:-2px}.event-history-summary::-webkit-details-marker{display:none}.event-history-summary:after{content:"▸";transition:transform var(--transition-fast);color:hsl(var(--muted-foreground));margin-left:auto;font-size:.7rem}.event-history[open] .event-history-summary:after{transform:rotate(90deg)}.event-history-icon{font-size:1rem}.event-count{color:hsl(var(--muted-foreground));font-size:.7rem;font-weight:400}.event-history-list{-webkit-overflow-scrolling:touch;max-height:200px;padding:8px 14px;overflow-y:auto}.event-filters{border-bottom:1px solid hsl(var(--border) / .3);padding:6px 14px}.ef-row{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.ef-pill{border:1px solid hsl(var(--border));color:hsl(var(--muted-foreground));cursor:pointer;transition:all var(--transition-fast);white-space:nowrap;background:0 0;border-radius:12px;min-height:24px;padding:3px 10px;font-family:inherit;font-size:.65rem}.ef-pill:hover{color:hsl(var(--foreground));border-color:hsl(var(--ring))}.ef-select{border:1px solid hsl(var(--border));background:hsl(var(--background));color:hsl(var(--foreground));cursor:pointer;border-radius:6px;min-height:24px;padding:2px 6px;font-family:inherit;font-size:.65rem}.ef-select:focus-visible{outline:2px solid hsl(var(--ring));outline-offset:1px}.event-item{border-bottom:1px solid hsl(var(--border) / .3);align-items:center;gap:8px;padding:6px 0;font-size:.75rem;display:flex}.event-item:last-child{border-bottom:none}.event-icon{flex-shrink:0;font-size:.85rem}.event-desc{color:hsl(var(--foreground));flex:1}.event-ts{color:hsl(var(--muted-foreground));white-space:nowrap;font-size:.65rem}html.modal-open,html.modal-open body{touch-action:none;overflow:hidden}@view-transition{navigation:auto}::view-transition-old(modal){animation-duration:.25s}::view-transition-new(modal){animation-duration:.25s}.modal{view-transition-name:modal}@container (width<=400px){.section-list{grid-template-columns:1fr}}@supports (animation-timeline:view()){.chart-container{animation:linear fadeSlideIn;animation-timeline:view();animation-range:entry}@keyframes fadeSlideIn{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}}.modal{background:hsl(var(--card) / .95);-webkit-backdrop-filter:blur(16px);border:1px solid hsl(var(--border) / .5)}header{background:linear-gradient(135deg, hsl(var(--card)) 0%, hsl(var(--muted)) 50%, hsl(var(--card)) 100%);background-size:200% 200%;animation:8s infinite gradientShift}@keyframes gradientShift{0%,to{background-position:0%}50%{background-position:100%}}.course-cell{position:relative;overflow:hidden}.course-cell:before{content:"";background:linear-gradient(90deg, transparent, hsl(var(--foreground) / .08), transparent);transition:transform .5s;position:absolute;inset:0;transform:translate(-100%)}.course-cell:hover:before{transform:translate(100%)}@keyframes fadeUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.modal-overlay{visibility:hidden;opacity:0;transition:opacity var(--transition-normal), visibility 0s var(--transition-normal)}.modal-overlay.active{visibility:visible;opacity:1;transition:opacity var(--transition-normal), visibility 0s 0s}.modal{transition:transform var(--transition-normal);transform:scale(.95)translateY(20px)}.modal-overlay.active .modal{transform:scale(1)translateY(0)}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}@media (width<=768px){header,.course-cell{animation:none}.course-cell:before{display:none}body{padding:10px}body.modal-open{touch-action:none;overflow:hidden}header{margin-bottom:15px;padding:15px}header h1{border-radius:4px;font-size:1.4rem}.semester-links{gap:.5rem;display:flex}.semester-nav-link{justify-content:center;align-items:center;padding:6px 10px;font-size:.75rem;display:flex}.semester-toggle{flex-wrap:wrap;margin:8px 0}.semester-btn{padding:6px 12px;font-size:.8rem}.stats{gap:15px}.stat-value{font-size:1.1rem}.course-grid{grid-template-columns:repeat(auto-fill,minmax(100px,1fr));gap:6px}.course-cell{min-height:36px;max-height:42px;padding:6px 8px;font-size:.7rem}.modal-overlay{align-items:center;padding:12px}.modal{border-radius:var(--radius-lg);width:100%;max-height:90vh}.modal-header{padding:12px 16px}.modal-header h2{font-size:1rem}.modal-header .close-btn{padding:4px 8px;font-size:1.6rem}.modal-body{padding:12px}.section-type-selector{margin-bottom:8px}.section-type-group{margin-bottom:6px}.section-list{grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:6px}.section-item{min-height:44px;padding:8px 10px}.section-id{font-size:.85rem}.section-stats{margin-top:4px;font-size:.78rem}.chart-container{margin-top:10px;padding:10px}.chart-wrapper{height:180px}.chart-mode-btn{min-height:36px;padding:5px 14px;font-size:.72rem}.event-history{margin-top:10px}.event-history-summary{padding:10px 12px;font-size:.75rem}.event-item{gap:6px;font-size:.7rem}.ef-pill,.ef-select{min-height:28px;font-size:.6rem}.controls-panel{padding:10px}.controls-row{gap:8px}.search-container,.controls-panel .search-input{flex:100%;max-width:none}.filter-buttons{justify-content:center}.color-legend{gap:10px;font-size:.7rem}.mp-dot-label{font-size:.48rem}.milestone-progress{margin:8px 0 16px;padding:0 4px}.mp-track{margin:18px 0}}@media (pointer:coarse){.section-item{min-height:44px}.semester-btn,.semester-nav-link{min-height:40px;padding:8px 14px}}
