:root{--bg:#f6f7f9;--panel:#ffffff;--border:#e2e5ea;--text:#1f2430;--muted:#6b7280;--header-height:56px;--accent:#2563eb;--accent-hover:#1d4ed8;--res-0:#c8e6c9;--res-0-border:#7cb47f;--res-1-10:#fff3b0;--res-1-10-border:#d9be4a;--res-10plus:#f4b0b0;--res-10plus-border:#d97a7a;--res-unknown:#e4e7eb;--res-unknown-border:#b6bcc4}*{box-sizing:border-box}body,html{margin:0;padding:0;background:var(--bg);color:var(--text);font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif}.site-shell{min-height:100vh;display:flex;flex-direction:column}.site-main{flex:1 1}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.site-header{position:-webkit-sticky;position:sticky;top:0;z-index:100;background:var(--panel);border-bottom:1px solid var(--border)}.site-header-inner{max-width:1400px;margin:0 auto;padding:0 24px;height:var(--header-height);display:flex;align-items:center;justify-content:space-between;gap:16px}.site-logo{font-size:16px;font-weight:700;color:var(--text);text-decoration:none;white-space:nowrap}.site-logo:hover{color:var(--accent)}.nav-toggle{display:none;flex-direction:column;justify-content:center;gap:5px;width:40px;height:40px;padding:8px;border:1px solid var(--border);border-radius:8px;background:#fff;cursor:pointer}.nav-toggle-bar{display:block;height:2px;background:var(--text);border-radius:1px}.site-nav{gap:8px}.site-nav,.site-nav-list{display:flex;align-items:center}.site-nav-list{gap:4px;list-style:none;margin:0;padding:0}.site-nav-link{display:block;padding:8px 12px;border-radius:8px;font-size:14px;color:var(--muted);text-decoration:none}.site-nav-link:hover{color:var(--text);background:#f0f2f5}.site-nav-link.is-active{color:var(--text);font-weight:600;background:#eef2ff}.nav-cta{margin-left:8px;padding:8px 14px;border-radius:8px;font-size:14px;font-weight:600;color:#fff;background:var(--accent);text-decoration:none;white-space:nowrap}.nav-cta:hover{background:var(--accent-hover)}.site-footer{margin-top:40px;background:var(--panel);border-top:1px solid var(--border)}.site-footer-inner{max-width:1400px;margin:0 auto;padding:32px 24px;display:grid;grid-template-columns:repeat(3,1fr);grid-gap:32px;gap:32px}.footer-heading{font-size:14px;font-weight:700;margin:0 0 10px}.footer-col p{margin:0;font-size:14px;line-height:1.55;color:var(--muted)}.footer-meta{margin-top:10px!important;font-size:13px!important}.footer-links{list-style:none;margin:0;padding:0}.footer-links li{margin-bottom:6px}.footer-links a{font-size:14px;color:var(--muted);text-decoration:none}.footer-links a:hover{color:var(--accent)}.site-footer-bottom{border-top:1px solid var(--border);padding:14px 24px;text-align:center}.site-footer-bottom p{margin:0;font-size:13px;color:var(--muted)}.content-page{max-width:720px;margin:0 auto;padding:32px 24px 48px}.content-header{margin-bottom:32px}.content-header h1{margin:0 0 12px;font-size:28px;line-height:1.25}.content-lead{margin:0 0 16px;font-size:17px;line-height:1.55;color:var(--muted)}.content-section{margin-bottom:36px}.content-section h2{margin:0 0 12px;font-size:20px}.content-section h3{margin:20px 0 10px;font-size:16px}.content-section dd,.content-section li,.content-section p{font-size:15px;line-height:1.6}.content-section ul{padding-left:1.25rem}.content-section a{color:var(--accent)}.content-section a:hover{color:var(--accent-hover)}.content-tip{padding:12px 14px;background:#f0f5ff;border:1px solid #cfe0ff;border-radius:8px}.content-meta{color:var(--muted)}.btn-primary{display:inline-block;margin-top:8px;padding:10px 18px;border-radius:8px;font-size:14px;font-weight:600;color:#fff;background:var(--accent);text-decoration:none}.btn-primary:hover{background:var(--accent-hover);color:#fff}.content-table-wrap{overflow-x:auto;margin:12px 0 16px}.content-table{width:100%;border-collapse:collapse;font-size:14px}.content-table td,.content-table th{padding:10px 12px;text-align:left;border:1px solid var(--border)}.content-table th{background:#f0f2f5;font-weight:600}.content-table tbody tr:nth-child(2n){background:#fafbfc}.feature-list{padding-left:1.25rem}.feature-list li{margin-bottom:8px}.faq-list{margin:0}.faq-list dt{font-weight:600;font-size:15px;margin-top:16px}.faq-list dt:first-child{margin-top:0}.faq-list dd{margin:6px 0 0;color:var(--muted)}.color-dot{display:inline-block;width:12px;height:12px;border-radius:3px;margin-right:6px;vertical-align:middle;border:1px solid rgba(0,0,0,.15)}.color-dot.res-0{background:var(--res-0)}.color-dot.res-1-10{background:var(--res-1-10)}.color-dot.res-10plus{background:var(--res-10plus)}.color-dot.res-unknown{background:var(--res-unknown)}.page{max-width:1400px;margin:0 auto;padding:24px}.page h1{margin:0 0 4px;font-size:22px}.subtitle{margin:0 0 8px;color:var(--muted);font-size:14px}.intro-links{margin:0 0 20px;font-size:13px;color:var(--muted)}.intro-links a{color:var(--accent);text-decoration:none}.intro-links a:hover{text-decoration:underline}.layout{display:grid;grid-template-columns:260px 1fr;grid-gap:20px;gap:20px;align-items:start}.sidebar{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:16px;position:-webkit-sticky;position:sticky;top:calc(var(--header-height) + 24px);max-height:calc(100vh - var(--header-height) - 48px);overflow:auto}.sidebar h2{font-size:13px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin:0 0 10px}.filter-group{margin-bottom:22px}.period-toggle{display:flex;gap:4px;background:#f0f2f5;border:1px solid var(--border);border-radius:8px;padding:4px}.period-btn{flex:1 1;border:none;background:transparent;border-radius:6px;padding:7px 8px;font-size:13px;color:var(--muted);cursor:pointer}.period-btn:hover{color:var(--text)}.period-btn.is-active{background:#fff;color:var(--text);font-weight:600;box-shadow:0 1px 2px rgba(0,0,0,.08)}.check{display:flex;align-items:center;gap:8px;padding:4px 0;font-size:14px;cursor:pointer}.swatch{width:14px;height:14px;border-radius:3px;border:1px solid rgba(0,0,0,.15);flex-shrink:0}.search{width:100%;padding:8px 10px;font-size:14px;margin-bottom:8px}.search,.subject-list{border:1px solid var(--border);border-radius:8px}.subject-list{max-height:320px;overflow:auto;padding:6px 8px}.subject-actions{display:flex;gap:8px;margin-bottom:8px}.reset-btn,.subject-actions button{border:1px solid var(--border);background:#fff;border-radius:8px;padding:6px 10px;font-size:13px;cursor:pointer}.reset-btn:hover,.subject-actions button:hover{background:#f0f2f5}.main{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:12px 16px 16px}.count{font-size:14px;color:var(--muted);margin:4px 0 12px}.course-search{position:relative;margin-bottom:12px}.course-search-input{margin-bottom:0;padding-right:34px}.course-search-clear{position:absolute;top:50%;right:8px;transform:translateY(-50%);width:22px;height:22px;border:none;background:transparent;color:var(--muted);font-size:20px;line-height:1;cursor:pointer;border-radius:4px}.course-search-clear:hover{background:#f0f2f5;color:var(--text)}.course-results{position:absolute;z-index:20;top:calc(100% + 4px);left:0;right:0;max-height:320px;overflow:auto;background:var(--panel);border:1px solid var(--border);border-radius:8px;box-shadow:0 8px 24px rgba(0,0,0,.12);padding:4px}.course-result{display:flex;flex-direction:column;align-items:flex-start;gap:2px;width:100%;text-align:left;border:none;background:transparent;padding:8px 10px;border-radius:6px;cursor:pointer}.course-result:hover{background:#f0f5ff}.course-result-name{font-size:14px;color:var(--text)}.course-result-meta{font-size:12px;color:var(--muted)}.empty-result{color:var(--muted);cursor:default}.empty-result:hover{background:transparent}.timeline{--subject-lane-width:8.5rem;border:1px solid var(--border);border-radius:8px}.timeline .vis-labelset{width:var(--subject-lane-width);max-width:var(--subject-lane-width)}.timeline .vis-labelset .vis-label{overflow:visible}.timeline .vis-labelset .vis-label .subject-label,.timeline .vis-labelset .vis-label .vis-inner{display:block;box-sizing:border-box;width:100%;max-width:var(--subject-lane-width);white-space:normal;overflow-wrap:break-word;word-break:break-word;line-height:1.25;font-size:15px;padding:4px 6px;-webkit-hyphens:auto;hyphens:auto}.empty{padding:60px 20px;text-align:center;color:var(--muted)}.vis-item.res-0{background-color:var(--res-0);border-color:var(--res-0-border)}.vis-item.res-1-10{background-color:var(--res-1-10);border-color:var(--res-1-10-border)}.vis-item.res-10plus{background-color:var(--res-10plus);border-color:var(--res-10plus-border)}.vis-item.res-unknown{background-color:var(--res-unknown);border-color:var(--res-unknown-border)}.vis-item{color:#1f2430;font-size:12px}.vis-item .vis-item-content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vis-item.is-estimated{background-image:repeating-linear-gradient(-45deg,transparent,transparent 4px,rgba(255,255,255,.35) 0,rgba(255,255,255,.35) 8px)}.vis-item.is-selected{box-shadow:0 0 0 2px #2563eb;border-color:#2563eb;font-weight:600}.vis-item.is-continues{border-top-right-radius:0;border-bottom-right-radius:0}.vis-item.is-continues:after{content:"";position:absolute;top:50%;right:-9px;transform:translateY(-50%);width:0;height:0;border-top:7px solid transparent;border-bottom:7px solid transparent;border-left:9px solid;pointer-events:none}.vis-item.is-found{box-shadow:0 0 0 3px #f59e0b;border-color:#f59e0b;font-weight:600;animation:found-pulse 1.2s ease-out 2}@keyframes found-pulse{0%{box-shadow:0 0 0 3px #f59e0b,0 0 0 6px rgba(245,158,11,.4)}to{box-shadow:0 0 0 3px #f59e0b,0 0 0 12px rgba(245,158,11,0)}}.selected-section{margin-top:20px;border-top:1px solid var(--border);padding-top:16px}.selected-section h2{font-size:15px;margin:16px 0 8px}.calc{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:16px;background:#f0f5ff;border:1px solid #cfe0ff;border-radius:12px;padding:14px 18px}.calc-stats{display:flex;gap:28px}.stat{display:flex;flex-direction:column;line-height:1.2}.stat-value{font-size:22px;font-weight:700;color:#1d3b7a}.stat-label{font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.03em}.calc-controls{display:flex;align-items:center;gap:12px}.reset-btn:disabled{opacity:.5;cursor:not-allowed}.copy-list{margin-top:16px}.copy-header{display:flex;align-items:center;justify-content:space-between}.copy-header h2{margin:0}.copy-text{width:100%;margin-top:8px;padding:10px 12px;border:1px solid var(--border);border-radius:8px;font-family:ui-monospace,Cascadia Code,Consolas,monospace;font-size:12px;line-height:1.5;resize:vertical;white-space:pre;background:#fafbfc;color:var(--text)}.copy-hint{margin:6px 0 0}.copy-hint,.legend-hint{font-size:12px;color:var(--muted)}.legend-hint{flex-wrap:wrap;gap:8px 20px;margin:16px 0 0}.legend-hint,.legend-item{display:flex;align-items:center}.legend-item{gap:8px}.legend-swatch{position:relative;width:26px;height:14px;border-radius:3px;flex-shrink:0;border:1px solid var(--res-unknown-border);background-color:var(--res-unknown)}.legend-swatch.legend-estimated{background-image:repeating-linear-gradient(-45deg,transparent,transparent 4px,rgba(0,0,0,.28) 0,rgba(0,0,0,.28) 8px)}.legend-swatch.legend-continues:after{content:"";position:absolute;top:50%;right:-8px;transform:translateY(-50%);width:0;height:0;border-top:7px solid transparent;border-bottom:7px solid transparent;border-left:8px solid var(--text)}.timeline-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.timeline-toolbar .count{margin:4px 0 12px}.term-toggle{display:flex;gap:4px;background:#f0f2f5;border:1px solid var(--border);border-radius:8px;padding:4px}.term-btn{border:none;background:transparent;border-radius:6px;padding:6px 12px;font-size:13px;color:var(--muted);cursor:pointer;white-space:nowrap}.term-btn:hover{color:var(--text)}.term-btn.is-active{background:#fff;color:var(--text);font-weight:600;box-shadow:0 1px 2px rgba(0,0,0,.08)}@media (max-width:768px){.nav-toggle{display:flex}.site-nav{display:none;position:absolute;top:var(--header-height);left:0;right:0;flex-direction:column;align-items:stretch;gap:12px;padding:16px 24px 20px;background:var(--panel);border-bottom:1px solid var(--border);box-shadow:0 8px 24px rgba(0,0,0,.08)}.site-nav.is-open{display:flex}.site-header,.site-header-inner{position:relative}.site-nav-list{flex-direction:column;align-items:stretch;width:100%}.site-nav-link{padding:10px 12px}.nav-cta{margin-left:0;text-align:center}.site-footer-inner{gap:24px}.layout,.site-footer-inner{grid-template-columns:1fr}.sidebar{position:static;max-height:none}}