/* Pico v2.1.1 Jade light colour roles (P). Local course UI sizing/layout (A).
   Source: https://github.com/picocss/pico/blob/v2.1.1/css/pico.jade.css
   No framework runtime or third-party font assets. */
:root{--ink:#373c44;--heading:#2d3138;--muted:#646b79;--teal:#007a50;--hover:#006d46;--link-hover:#005f3d;--mint:#edf7f2;--border:rgb(231,234,239.5);--control:#cfd5e2;--white:#fff;--radius:.75rem;--s1:.25rem;--s2:.5rem;--s3:.75rem;--s4:1rem;--s6:1.5rem;--s8:2rem;--touch:44px;font-family:system-ui,-apple-system,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;font-size:100%;line-height:1.5;color:var(--ink);background:var(--white);font-synthesis:none}
*{box-sizing:border-box}html{scroll-padding-top:var(--s6);-webkit-text-size-adjust:100%;text-size-adjust:100%}body{margin:0;min-height:100vh;min-height:var(--app-height,100dvh);padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left)}button,input{font:inherit}button,a,input{touch-action:manipulation;-webkit-tap-highlight-color:transparent}button{cursor:pointer;color:inherit}a{color:inherit;text-decoration:none}button,a,input{transition:background-color .2s,border-color .2s}button:focus-visible,a:focus-visible,input:focus-visible,.shelf:focus-visible{outline:2px solid var(--teal);outline-offset:3px}button:disabled{cursor:default}svg{fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}button svg{width:20px;height:20px}.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}[hidden]{display:none!important}.skip-link{position:fixed;top:8px;left:8px;z-index:10;padding:var(--s3);background:var(--teal);color:white;transform:translateY(-160%)}.skip-link:focus{transform:translateY(0)}
.page-frame{width:100%;max-width:92rem;min-height:var(--app-height,100dvh);margin:auto;padding:var(--s6) var(--s8);display:flex;flex-direction:column;gap:var(--s6)}.site-header{display:flex;align-items:center;flex:0 0 auto}.brand{display:flex;align-items:center;gap:var(--s3)}.brand svg{width:36px;height:36px;color:var(--teal);stroke-width:2.2}.brand strong{display:block;font:700 1.5rem/1.25 Georgia,"Times New Roman",serif;letter-spacing:-.025em;color:var(--heading)}.brand small{display:block;color:var(--muted);font-size:.875rem;line-height:1.5;margin-top:var(--s1)}.release-marker{margin-left:var(--s2);font-size:.625rem;letter-spacing:0;color:var(--muted)}main{flex:1;min-width:0;display:flex;flex-direction:column;gap:var(--s6)}.hero{background:var(--mint);border-radius:var(--radius);display:flex;justify-content:space-between;align-items:center;gap:var(--s8);padding:var(--s8);min-height:140px}.hero h1{font-size:2rem;line-height:1.35;letter-spacing:-.025em;color:var(--heading);margin:0;font-weight:700}.hero h1 br{display:none}.hero p:not(.hero-english){color:var(--muted);font-size:1rem;line-height:1.5;margin:var(--s2) 0 0}.hero-english{font-family:Georgia,"Times New Roman",serif;font-size:2rem;line-height:1.15;letter-spacing:-.04em;margin:0;color:var(--teal)}
.workspace{flex:1;min-width:0;display:flex;flex-direction:column;gap:var(--s6);justify-content:space-between}.category-rail{width:100%}.category-rail nav{display:flex;flex-wrap:wrap;gap:var(--s2)}.category-button{display:flex;align-items:center;justify-content:center;gap:var(--s2);min-height:var(--touch);border:1px solid var(--control);background:white;border-radius:.5rem;padding:var(--s3) var(--s4);font-size:1rem;font-weight:600;line-height:1.5}.category-button svg{width:20px;height:20px}.category-button[aria-pressed=true]{background:var(--mint);color:var(--teal);border-color:var(--teal)}.library{display:contents}.catalog-heading,#collections,.showcase-preview{width:100%;min-width:0}.catalog-heading{display:flex;align-items:center;justify-content:space-between;gap:var(--s6)}.catalog-heading h2{font-size:1.5rem;line-height:1.35;margin:0;color:var(--heading)}.catalog-heading p{font-size:.875rem;color:var(--muted);line-height:1.5;margin:var(--s1) 0 0}.search{display:flex;align-items:center;gap:var(--s3);width:24rem;max-width:100%;min-height:48px;padding:0 var(--s4);border:1px solid var(--control);border-radius:.5rem;background:white}.search:focus-within{border-color:var(--teal)}.search svg{width:20px;height:20px;color:var(--muted)}.search input{min-width:0;width:100%;height:46px;border:0;outline:none;background:transparent;color:var(--ink);font-size:1rem}input::placeholder{color:var(--muted);opacity:1}.search button{min-height:var(--touch);border:0;background:none;padding:0;color:var(--teal);font-size:.875rem;white-space:nowrap}
.collection-section{position:relative}.section-heading{display:flex;align-items:center;flex-wrap:wrap;gap:var(--s3);min-height:44px;margin-bottom:var(--s2);padding-right:104px}.section-heading h3{font-size:1.25rem;line-height:1.4;margin:0;color:var(--heading)}.section-heading span{font-size:.875rem;color:var(--muted)}.course-browse{position:absolute;right:0;top:0}.shelf-controls{display:flex;gap:var(--s2)}.shelf-controls button{width:44px;height:44px;min-width:44px;border:1px solid var(--control);border-radius:.5rem;background:white;color:var(--teal);display:flex;align-items:center;justify-content:center;padding:var(--s2)}.shelf-controls button:disabled{opacity:.4}.shelf-controls svg{width:20px;height:20px}.browse-hint{display:none}.course-grid.shelf{display:grid;grid-auto-flow:column;grid-auto-columns:calc((100% - 2rem)/3);gap:var(--s4);overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x mandatory;scroll-padding-inline:0;padding:0 0 var(--s1);scrollbar-width:thin;scrollbar-color:var(--control) transparent;min-width:0}.shelf:focus{outline:none}.shelf:focus-visible{outline:2px solid var(--teal);outline-offset:3px}.course-card{scroll-snap-align:start;scroll-snap-stop:always;min-width:0;height:auto;padding:var(--s6);border:1px solid var(--border);border-radius:var(--radius);background:white;display:flex;flex-direction:column;gap:var(--s3);transition:border-color .2s,background-color .2s}.card-top{display:flex;align-items:center;gap:var(--s4);min-width:0}.card-top>div{min-width:0}.course-code{width:76px;height:76px;padding:var(--s1);container-type:inline-size;display:flex;align-items:center;justify-content:center;flex-shrink:0;border-radius:.5rem;background:var(--mint);color:var(--teal);font-family:Georgia,"Times New Roman",serif;font-weight:700;line-height:1}.code-label{display:block;max-width:100%;white-space:nowrap;text-align:center;line-height:1;font-size:clamp(18px,55cqw,32px)}.course-code-numbered{font-family:"Times New Roman",Times,serif;font-variant-numeric:lining-nums tabular-nums}.course-code-numbered .code-zero{position:relative;display:inline-block}.code-zero::after{content:"";position:absolute;width:.065em;height:.52em;background:currentColor;left:50%;top:50%;transform:translate(-50%,-50%) rotate(28deg);border-radius:.04em}.course-code-long .code-label{font-size:clamp(14px,38cqw,27px)}.course-code-extra-long .code-label{font-size:clamp(12px,29cqw,23px)}.card-top h4{font-size:1.125rem;line-height:1.4;font-weight:600;color:var(--heading);margin:0;overflow-wrap:anywhere}.card-top p{font-size:.875rem;line-height:1.5;color:var(--muted);margin:var(--s2) 0 0}.card-description{font-size:.875rem;line-height:1.5;color:var(--muted);margin:0;overflow-wrap:anywhere}.open-collection{align-self:flex-start;margin-top:auto;min-height:44px;max-width:100%;display:flex;align-items:center;gap:var(--s3);border:1px solid var(--teal);border-radius:.5rem;background:var(--teal);color:white;padding:var(--s3) var(--s4);font-size:1rem;font-weight:600;line-height:1.5;text-align:left}.open-collection svg{width:18px;height:18px}.open-collection:active{background:var(--hover)}.open-collection:disabled{background:#f1f3f5;border-color:var(--control);color:var(--muted)}.course-card:has(.open-collection:disabled){border-style:dashed}.showcase-preview{display:flex;align-items:center;justify-content:space-between;gap:var(--s4);padding:var(--s3) var(--s4);border-top:1px solid var(--border);border-bottom:1px solid var(--border);font-size:.875rem;color:var(--muted)}.showcase-name{display:flex;align-items:center;gap:var(--s2);font-weight:600}.showcase-name svg{width:20px;height:20px}.showcase-status{font-size:.875rem}footer{display:flex;align-items:center;gap:var(--s6);font-size:.875rem;color:var(--muted);padding-top:var(--s2)}footer>span{font-family:Georgia,serif;color:var(--heading)}footer p{margin:0}footer a{margin-left:auto;min-height:44px;display:flex;align-items:center;gap:var(--s2)}
.empty-state{text-align:center;padding:var(--s8);border:1px solid var(--border);border-radius:var(--radius);width:100%}.empty-state h3{font-size:1.25rem;margin:0}.empty-state p{color:var(--muted);font-size:1rem}.reset-button,.load-more{min-height:44px;border:1px solid var(--control);border-radius:.5rem;background:white;color:var(--teal);padding:var(--s3) var(--s4);font-size:1rem}.load-more{display:block;width:100%;margin-top:var(--s4)}dialog{width:min(720px,calc(100% - 2rem));max-height:85vh;max-height:85dvh;overflow:auto;border:1px solid var(--border);border-radius:var(--radius);padding:var(--s6);color:var(--ink);background:white;box-shadow:0 16px 60px #0002}dialog::backdrop{background:#2d313866}body:has(dialog[open]){overflow:hidden}.dialog-head{display:flex;justify-content:space-between;gap:var(--s4)}.dialog-head h2{font-size:1.5rem;line-height:1.35;margin:var(--s1) 0 var(--s4);color:var(--heading)}.dialog-head p{font-size:.875rem;color:var(--teal);margin:0}.close-button{align-self:flex-start;display:flex;align-items:center;justify-content:center;width:44px;height:44px;flex-shrink:0;border:1px solid var(--control);border-radius:.5rem;background:white}.dialog-search input{width:100%;min-height:48px;border:1px solid var(--control);border-radius:.5rem;padding:var(--s3) var(--s4);font-size:1rem;color:var(--ink);background:white}#entry-count{font-size:.875rem;color:var(--muted);margin:var(--s4) 0}#entry-list a{display:flex;align-items:center;justify-content:space-between;gap:var(--s4);min-height:48px;border-bottom:1px solid var(--border);padding:var(--s3) var(--s1);font-size:1rem;overflow-wrap:anywhere}#entry-list svg{width:18px;height:18px}.entry-empty{color:var(--muted)}.dialog-pointer-return:focus{outline:none}
#viewport-debug{position:fixed;right:12px;bottom:12px;z-index:50;width:min(342px,calc(100vw - 24px));padding:12px;border:1px solid var(--control);border-radius:.5rem;background:white;box-shadow:0 5px 24px #0002;color:var(--ink);font-size:12px}#viewport-debug summary{min-height:36px;font-size:13px;font-weight:700;cursor:pointer}#viewport-debug pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:40dvh;overflow:auto;margin:4px 0 8px;font-size:11px;line-height:1.5}#viewport-debug button{min-height:44px;padding:8px 12px;border:1px solid var(--control);border-radius:.5rem;background:var(--mint);font-size:12px}#viewport-debug small{display:block;margin-top:8px}
@media(hover:hover){.category-button:hover,.shelf-controls button:hover:not(:disabled),.close-button:hover,.reset-button:hover,.load-more:hover{background:var(--mint);border-color:var(--teal)}.open-collection:hover:not(:disabled){background:var(--hover);border-color:var(--hover)}.course-card:hover{border-color:var(--control);background:#fcfefd}#entry-list a:hover{color:var(--link-hover);background:var(--mint)}}
@media(min-width:1440px){.course-grid.shelf{grid-auto-columns:calc((100% - 3rem)/4)}}
@media(min-width:600px) and (max-width:1023px){.page-frame{padding:var(--s6)}.course-grid.shelf{grid-auto-columns:calc((100% - 1rem)/2)}.hero{padding:var(--s6);min-height:160px}.hero h1{font-size:1.75rem}.hero-english{font-size:1.75rem}.catalog-heading h2{font-size:1.25rem}.search{width:20rem}footer{display:none}}
@media(min-width:600px) and (min-height:600px) and (max-height:800px){.page-frame{padding:var(--s4) var(--s6);gap:var(--s4)}main,.workspace{gap:var(--s4)}.hero{min-height:0;padding:var(--s6)}footer{display:none}}
@media(min-width:600px) and (min-height:600px) and (max-height:700px){.hero{display:none}}
@media(max-width:599px){.page-frame{padding:var(--s4);gap:var(--s6)}main{gap:0}.hero,.catalog-heading h2{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.workspace{gap:var(--s4)}.category-rail nav{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s2)}.category-button{font-size:.875rem;padding:var(--s2);gap:var(--s2)}.category-button svg{width:18px;height:18px}.catalog-heading{display:flex;flex-direction:column-reverse;align-items:stretch;gap:var(--s2)}.catalog-heading p{margin:0;font-size:.875rem}.search{width:100%;min-height:44px;padding:0 var(--s3)}.search input{height:42px}.section-heading{gap:var(--s2);padding-right:104px}.section-heading h3{font-size:1.125rem}.section-heading span{font-size:.875rem}.course-grid.shelf{grid-auto-columns:100%;gap:var(--s4);scrollbar-width:none}.course-grid.shelf::-webkit-scrollbar{display:none}.course-card{padding:var(--s4)}.course-code{width:64px;height:64px}.card-top{gap:var(--s3)}.card-top h4{font-size:1.125rem}.card-top p{margin-top:var(--s1)}.showcase-preview{padding:var(--s2) var(--s3)}footer{display:none}}
@media(hover:none) and (pointer:coarse) and (min-width:600px) and (max-width:1023px) and (max-height:599px){.page-frame{padding:var(--s3) var(--s4);gap:var(--s3)}.brand strong{font-size:1.25rem}.hero{display:none}.workspace{display:grid;grid-template-columns:176px minmax(0,1fr);gap:var(--s4);align-items:start}.category-rail{grid-row:1/4}.category-rail nav{display:grid;grid-template-columns:1fr}.category-button{font-size:.875rem;padding:var(--s2)}.catalog-heading{display:block}.catalog-heading>div{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}.search{width:100%}.course-grid.shelf{grid-auto-columns:100%}.course-card{padding:var(--s4)}.course-code{width:56px;height:56px}.showcase-preview{padding:var(--s2)}footer{display:none}}
@media(prefers-reduced-motion:reduce){*{transition:none!important}html{scroll-behavior:auto}}
