@font-face{font-family:Fraunces;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/fraunces-latin-400-normal.6IfK1voy.woff2)format("woff2")}@font-face{font-family:Fraunces;font-style:italic;font-display:swap;font-weight:400;src:url(/_astro/fraunces-latin-400-italic.ChpO6tcr.woff2)format("woff2")}@font-face{font-family:Fraunces;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/fraunces-latin-500-normal.DnGCNyPD.woff2)format("woff2")}@font-face{font-family:Fraunces;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/fraunces-latin-600-normal.BFCDtZfi.woff2)format("woff2")}@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/public-sans-latin-400-normal.8Rpg0ruU.woff2)format("woff2")}@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/public-sans-latin-500-normal.NlrCPXnF.woff2)format("woff2")}@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/public-sans-latin-600-normal.Fru-LXNs.woff2)format("woff2")}@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/public-sans-latin-700-normal.BqJmxWdE.woff2)format("woff2")}:root{--color-background:#fafafa;--color-foreground:#09090b;--color-primary:#18181b;--color-secondary:#3f3f46;--color-accent:#ec4899;--color-accent-text:#c22d85;--color-destructive:#dc2626;--color-assignment:#b45309;--color-border:#e4e4e7;--color-muted:#e8ecf0;--sk-shine:#ffffff73;--font-display:"Fraunces", "Noto Serif SC", "Songti SC", Georgia, serif;--font-body:"Public Sans", "PingFang SC", "Microsoft YaHei", system-ui, sans-serif;--font-size-body:1rem;--max-width:960px;--content-width:68ch;--ease:cubic-bezier(.22, .61, .36, 1);--ease-bounce:cubic-bezier(.34, 1.4, .64, 1);--header-h:4.2rem;--nav-drop-gap:22px;--nav-drop-pad-x:1.1rem;color-scheme:light}:root[data-theme=dark]{color-scheme:dark;--color-background:#0e0e10;--color-foreground:#f4f4f5;--color-primary:#fafafa;--color-secondary:#a1a1aa;--color-accent:#f472b6;--color-accent-text:#f472b6;--color-destructive:#f87171;--color-assignment:#f59e0b;--color-border:#26262a;--color-muted:#1a1a1c;--sk-shine:#ffffff1a}.masthead-logo{flex:none;width:auto;height:32px;display:block}.masthead .logo-dark,:root[data-theme=dark] .masthead .logo-light{display:none}:root[data-theme=dark] .masthead .logo-dark{display:inline-block}*{box-sizing:border-box}html{scroll-behavior:smooth}body{background:var(--color-background);color:var(--color-foreground);font-family:var(--font-body);font-size:var(--font-size-body);-webkit-font-smoothing:antialiased;margin:0;line-height:1.7}main{min-height:60vh}a{color:var(--color-primary)}:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.skeleton{background:var(--color-muted);border-radius:2px;display:none;position:relative;overflow:hidden}.js-ready .skeleton.sk-show{display:block}.skeleton:after{content:"";background:linear-gradient(90deg, transparent, var(--sk-shine), transparent);animation:1.3s ease-in-out infinite shimmer;position:absolute;inset:0;transform:translate(-100%)}@keyframes shimmer{to{transform:translate(100%)}}.sk-num{width:55%;height:1.4rem;margin:.1rem 0 .35rem}.sk-card{border-top:1px solid var(--color-border);flex-direction:column;gap:.55rem;padding:1.1rem .2rem;display:flex}.sk-card:first-child{border-top:none}.sk-line{border-radius:2px;height:.8rem}.sk-line.w40{width:40%}.sk-line.w70{width:70%}.sk-line.w90{width:90%}.progress{background:var(--color-accent);z-index:100;width:0;height:2px;transition:width .1s linear;position:fixed;top:0;left:0}.back-top{border:1px solid var(--color-border);background:var(--color-background);width:2.5rem;height:2.5rem;color:var(--color-secondary);cursor:pointer;opacity:0;pointer-events:none;transition:opacity .3s var(--ease), border-color .2s var(--ease), color .2s var(--ease), transform .2s var(--ease);z-index:50;border-radius:50%;justify-content:center;align-items:center;display:flex;position:fixed;bottom:1.4rem;right:1.4rem}.back-top svg{width:2rem;height:2rem;transition:transform .2s var(--ease)}.back-top.show{opacity:1;pointer-events:auto}.back-top.hide{opacity:0;pointer-events:none}.back-top:hover{border-color:var(--color-accent);color:var(--color-accent);transform:translateY(-2px)}.back-top:hover svg{transform:translateY(-1.5px)}.link-draw{color:var(--color-primary);background-image:linear-gradient(var(--color-accent), var(--color-accent));transition:background-size .25s var(--ease), color .2s var(--ease);background-position:0 100%;background-repeat:no-repeat;background-size:0% 1px;text-decoration:none}.link-draw:hover{background-size:100% 1px}.js-ready .reveal{opacity:0;transition:opacity .4s var(--ease), transform .4s var(--ease);transform:translateY(8px)}.js-ready .reveal.visible{opacity:1;transform:none}@keyframes rowIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}.site-header{border-bottom:1px solid var(--color-border);min-height:var(--header-h);justify-content:space-between;align-items:center;gap:1rem;padding:.8rem 1.5rem;display:flex}.masthead{white-space:nowrap;align-items:center;margin:0;display:flex}.masthead a{color:var(--color-primary);font-family:var(--font-display);letter-spacing:.08rem;align-items:center;gap:.5rem;font-size:clamp(1.05rem,2vw,1.2rem);font-weight:600;line-height:1;text-decoration:none;display:inline-flex}.site-nav{letter-spacing:.12em;text-transform:uppercase;align-items:center;gap:1.5rem;font-size:.875rem;display:flex}.site-nav a{color:var(--color-secondary);transition:color .2s var(--ease);padding:2px 0;text-decoration:none;position:relative}.site-nav a:after{content:"";background:var(--color-accent);transform-origin:0;width:100%;height:2px;transition:transform .3s var(--ease);position:absolute;bottom:0;left:0;transform:scaleX(0)}.site-nav a:hover:after,.site-nav a[aria-current=page]:after{transform:scaleX(1)}.site-nav a:hover,.site-nav a[aria-current=page]{color:var(--color-accent-text)}.nav-drop{align-items:center;display:inline-flex;position:relative}.nav-drop-chevron{transition:transform .3s var(--ease)}.nav-drop:hover .nav-drop-chevron,.nav-drop:focus-within .nav-drop-chevron{transform:rotate(180deg)}.nav-drop-menu{top:calc(100% + var(--nav-drop-gap));left:calc(-1 * var(--nav-drop-pad-x));background:var(--color-background);border:1px solid var(--color-border);z-index:50;opacity:0;visibility:hidden;transition:opacity .25s var(--ease), transform .25s var(--ease), visibility 0s linear .25s;border-radius:12px;padding:.35rem .2rem;position:absolute;transform:translateY(-6px);box-shadow:0 12px 32px -12px #0000002e}.nav-drop:hover .nav-drop-menu,.nav-drop:focus-within .nav-drop-menu{opacity:1;visibility:visible;transition:opacity .25s var(--ease), transform .25s var(--ease), visibility 0s;transform:translateY(0)}.nav-drop-menu:before{content:"";height:var(--nav-drop-gap);position:absolute;bottom:100%;left:0;right:0}.nav-drop-menu a{padding:.6rem var(--nav-drop-pad-x);color:var(--color-secondary);letter-spacing:.05em;text-transform:uppercase;white-space:nowrap;font-size:.875rem;display:block}.nav-drop-menu a:after{display:none}.nav-drop-menu a span{padding-bottom:.25rem;display:inline-block;position:relative}.nav-drop-menu a span:after{content:"";background:var(--color-accent);transform-origin:0;width:100%;height:2px;transition:transform .3s var(--ease);position:absolute;bottom:0;left:0;transform:scaleX(0)}.nav-drop-menu a:hover span:after,.nav-drop-menu a[aria-current=page] span:after{transform:scaleX(1)}.nav-drop-menu a[aria-current=page]{color:var(--color-accent-text)}.nav-drop:hover>a:after,.nav-drop:focus-within>a:after{transform:scaleX(1)}.nav-toggle{border:1px solid var(--color-border);cursor:pointer;width:2.2rem;height:2.2rem;color:var(--color-primary);transition:border-color .2s var(--ease), color .2s var(--ease), background .2s var(--ease), transform .2s var(--ease);background:0 0;border-radius:999px;padding:0;display:none}.nav-toggle:hover{border-color:var(--color-primary);background:var(--color-muted)}.nav-toggle:active{transform:scale(.94)}.nav-toggle[aria-expanded=true]{border-color:var(--color-primary);background:var(--color-muted)}.js-ready .nav-toggle{justify-content:center;align-items:center;display:flex}.nav-toggle svg path{transform-box:fill-box;transform-origin:50%;transition:transform .35s var(--ease), opacity .3s var(--ease)}.nav-toggle[aria-expanded=true] .h-l1{transform:translateY(5px)rotate(45deg)}.nav-toggle[aria-expanded=true] .h-l2{opacity:0}.nav-toggle[aria-expanded=true] .h-l3{transform:translateY(-5px)rotate(-45deg)}.js-ready .site-header.compact .site-nav,.nav-overlay{display:none}.js-ready .nav-overlay{z-index:140;opacity:0;visibility:hidden;transition:opacity .25s var(--ease), visibility .25s;background:#0006;display:block;position:fixed;inset:0}.js-ready .nav-overlay.open{opacity:1;visibility:visible}.nav-drawer{display:none}.js-ready .nav-drawer{z-index:150;background:var(--color-background);border-left:1px solid var(--color-border);visibility:hidden;width:min(280px,85vw);height:100dvh;transition:transform .3s var(--ease), visibility 0s .3s;flex-direction:column;display:flex;position:fixed;top:0;right:0;transform:translate(100%)}.js-ready .nav-drawer.open{visibility:visible;transition:transform .3s var(--ease), visibility 0s;transform:none}.nav-drawer-head{min-height:var(--header-h);border-bottom:1px solid var(--color-border);justify-content:center;align-items:center;padding:.8rem 1.2rem;display:flex}.nav-drawer-close{border:1px solid var(--color-border);width:2.2rem;height:2.2rem;color:var(--color-secondary);cursor:pointer;transition:border-color .2s var(--ease), color .2s var(--ease);background:0 0;border-radius:999px;justify-content:center;align-items:center;padding:0;display:inline-flex}.nav-drawer-close:hover{border-color:var(--color-primary);color:var(--color-primary);background:var(--color-muted)}.js-ready .nav-drawer .site-nav{flex-direction:column;align-items:stretch;gap:0;padding:.6rem 1.2rem 1.2rem;display:flex}.js-ready .nav-drawer .site-nav a{color:var(--color-primary);border-bottom:1px solid var(--color-border);padding:.8rem .3rem;font-size:1rem}.js-ready .nav-drawer .site-nav a:before{content:"→";opacity:0;color:var(--color-accent-text);transition:opacity .2s var(--ease), transform .2s var(--ease);position:absolute;top:50%;right:.4rem;transform:translateY(-50%)translate(-6px)}.js-ready .nav-drawer .site-nav a:hover:before{opacity:1;transform:translateY(-50%)translate(0)}.js-ready .nav-drawer .site-nav a:last-child{border-bottom:none}.js-ready .nav-drawer .site-nav a:after{height:2px}.js-ready .nav-drawer .nav-group-children a:after{width:calc(100% - 1.6rem);left:1.3rem}.js-ready .nav-drawer .site-nav a:hover,.js-ready .nav-drawer .site-nav a[aria-current=page]{color:var(--color-accent-text)}.js-ready .nav-drawer.open .site-nav a{animation:rowIn .4s var(--ease) both}.js-ready .nav-drawer.open .site-nav a:nth-child(2){animation-delay:90ms}.js-ready .nav-drawer.open .site-nav a:nth-child(4){animation-delay:.27s}.js-ready .nav-drawer .nav-group{border-bottom:1px solid var(--color-border)}.js-ready .nav-drawer .nav-group-toggle{cursor:pointer;width:100%;color:var(--color-primary);font:inherit;letter-spacing:.12em;text-transform:uppercase;transition:color .2s var(--ease);background:0 0;border:none;justify-content:space-between;align-items:center;padding:.8rem .3rem;font-size:1rem;display:flex}.js-ready .nav-drawer .nav-group-toggle:hover{color:var(--color-accent-text)}.js-ready .nav-drawer .nav-group-toggle{position:relative}.js-ready .nav-drawer .nav-group-toggle:after{content:"";background:var(--color-accent);transform-origin:0;width:100%;height:2px;transition:transform .3s var(--ease);position:absolute;bottom:0;left:0;transform:scaleX(0)}.js-ready .nav-drawer .nav-group-toggle:hover:after,.js-ready .nav-drawer .nav-group-toggle.teaching-active:after{transform:scaleX(1)}.js-ready .nav-drawer .nav-group-chevron{transition:transform .3s var(--ease);flex:none}.js-ready .nav-drawer .nav-group-toggle[aria-expanded=true] .nav-group-chevron{transform:rotate(180deg)}.js-ready .nav-drawer .nav-group-children{display:none}.js-ready .nav-drawer .nav-group-children.open{display:block}.js-ready .nav-drawer .nav-group-children.open a{animation:rowIn .3s var(--ease) both}.js-ready .nav-drawer .nav-group-children.open a:nth-child(2){animation-delay:60ms}.js-ready .nav-drawer .nav-group-children.open a:nth-child(3){animation-delay:.12s}.js-ready .nav-drawer .nav-group-children a{color:var(--color-secondary);border-bottom:none;padding:.7rem .3rem .7rem 1.3rem;font-size:.9375rem;display:block}.js-ready .nav-drawer .nav-group-children a:hover,.js-ready .nav-drawer .nav-group-children a[aria-current=page]{color:var(--color-accent-text)}.home-top{min-height:calc(100vh - var(--header-h));min-height:calc(100dvh - var(--header-h));flex-direction:column;justify-content:center;display:flex;position:relative}.home-top #about{padding-bottom:4.5rem}.scroll-hint{flex-direction:column;align-items:center;gap:.6rem;display:flex;position:absolute;bottom:12px;left:50%;transform:translate(-50%)}.scroll-line{background:var(--color-border);width:2px;height:3.2rem;position:relative;overflow:hidden}.scroll-dot{background:var(--color-accent);width:5px;height:5px;animation:scrollDot 2s var(--ease) infinite;border-radius:50%;position:absolute;top:0;left:-1.5px}.scroll-dot:after{content:"";background:linear-gradient(to top, var(--color-accent), transparent);width:2px;height:14px;position:absolute;bottom:4px;left:50%;transform:translate(-50%)}@keyframes scrollDot{0%{opacity:1;top:0}70%{opacity:.5;top:calc(100% - 5px)}to{opacity:0;top:calc(100% - 5px)}}.scroll-text{letter-spacing:.24em;text-transform:uppercase;color:var(--color-secondary);font-size:.75rem}.hero{text-align:center;padding:3.2rem 1.5rem 2.6rem}.hero-title{font-family:var(--font-display);letter-spacing:0;margin:2rem 0 0;font-size:clamp(2.8rem,8vw,5.5rem);font-weight:600;line-height:1.15}.hero-title .word{opacity:0;animation:letterIn .5s var(--ease) forwards;display:inline-block;transform:translateY(14px)}@keyframes letterIn{to{opacity:1;transform:none}}.hero-tagline{font-family:var(--font-display);letter-spacing:.08em;color:var(--color-secondary);margin:1.5rem auto 0;font-size:clamp(1.3rem,2.8vw,1.8rem);font-style:italic;display:inline-block;position:relative}.hero-tagline:after{content:"";background:var(--color-accent);transform-origin:0;height:1px;animation:drawLine .5s .45s var(--ease) forwards;position:absolute;bottom:-10px;left:0;right:0;transform:scaleX(0)}@keyframes drawLine{to{transform:scaleX(1)}}.section{max-width:var(--max-width);margin:0 auto;padding:3rem 1.5rem}.section-head{border-bottom:1px solid var(--color-border);justify-content:space-between;align-items:baseline;margin-bottom:1.6rem;padding-bottom:.7rem;display:flex}.section-title{font-family:var(--font-display);letter-spacing:.06em;margin:0;font-size:1.4rem;font-weight:500}.page-head{text-align:center;padding:2.5rem 1.5rem 0}.page-title{font-family:var(--font-display);margin:0;font-size:clamp(1.75rem,3.5vw,2.5rem);font-weight:600;line-height:1.15}.page-head+.section{padding-top:2.5rem}.about-copy{max-width:var(--content-width);text-align:center;margin:0 auto}.home-top .section{width:100%}.about-headline{width:100%;max-width:var(--content-width);flex-wrap:wrap;justify-content:center;align-items:center;gap:.9rem;margin:3.5rem auto 1.6rem;display:flex}.about-headline:before,.about-headline:after{content:"";background:var(--color-border);flex:1;height:1px}.ah-name{font-family:var(--font-display);text-transform:uppercase;flex:none;font-size:1.5rem;font-weight:600;line-height:1.15}.ah-role{font-family:var(--font-display);color:var(--color-accent-text);flex:none;font-size:1.35rem;font-style:italic;font-weight:500}@media (width<=768px){.about-headline:before,.about-headline:after{display:none}.about-headline{margin-top:1.9rem}.ah-name{font-size:1.4rem}.ah-role{font-size:1.25rem}}.about-tags{flex-direction:column;align-items:center;gap:1rem;margin-top:2.4rem;display:flex}.at{text-align:center;margin:0;line-height:1.3}.at-traits{font-family:var(--font-body);letter-spacing:.12em;text-transform:uppercase;color:var(--color-secondary);font-size:.9rem;font-weight:500}.at-sep{color:var(--color-secondary);margin:0 .7em}.type-tag{letter-spacing:.06em;color:var(--color-primary);white-space:nowrap;font-size:.875rem;display:inline-block}.type-tag.type-suspended{color:var(--color-secondary)}.product-grid{grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:2.4rem 2rem;display:grid}.product-card{text-align:center;border:1px solid var(--color-border);transition:transform .25s var(--ease), box-shadow .25s var(--ease), border-color .25s var(--ease);animation:rowIn .4s var(--ease) both;border-radius:6px;flex-direction:column;align-items:center;gap:1rem;padding:1.8rem 1.8rem 1.6rem;display:flex;position:relative}.product-grid:has(.product-card:only-child) .product-card{max-width:520px;margin-inline:auto}.product-body{width:100%}.product-card:hover{border-color:var(--color-secondary);box-shadow:0 4px 8px -4px #09090b66}.product-name{font-family:var(--font-display);margin:0 0 .35rem;font-size:1.6rem;font-weight:600}.product-icon{object-fit:contain;flex:none;width:100%;height:7.5rem;padding:.5rem 1.5rem}.product-tagline{color:var(--color-secondary);margin:0 0 .5rem}.product-desc{color:var(--color-secondary);margin:0 0 1rem}.product-actions{margin-top:.2rem;flex-wrap:wrap;gap:.6rem;width:100%;max-width:360px;margin-inline:auto;display:flex}.product-btn{border:1px solid var(--color-border);color:var(--color-secondary);font:inherit;letter-spacing:.05em;cursor:pointer;transition:color .2s var(--ease), border-color .2s var(--ease), background .2s var(--ease);background:0 0;border-radius:999px;flex:1;justify-content:center;align-items:center;gap:.45rem;padding:.3rem .8rem;font-size:.875rem;text-decoration:none;display:inline-flex}.product-btn:hover{border-color:var(--color-primary);color:var(--color-primary)}.product-btn.active{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-background)}.product-btn svg{flex:none}.gh-stars{font-variant-numeric:tabular-nums;align-items:center;gap:.4rem;display:inline-flex}.product-panel{transition:grid-template-rows .3s var(--ease);grid-template-rows:0fr;width:100%;display:grid}.product-panel.open{grid-template-rows:1fr}.product-panel-inner{min-width:0;overflow:hidden}.panel-box{border:1px solid var(--color-border);text-align:left;border-radius:6px;margin-top:.9rem;padding:.9rem 1rem 1rem;font-size:1rem}.panel-box .file-meta{font-size:.875rem}.panel-ver{font-family:var(--font-display);letter-spacing:.03em;color:var(--color-primary);align-items:baseline;gap:.6rem;margin:0 0 .5rem;font-size:1rem;font-weight:600;display:flex}.panel-ver .panel-date{font-family:var(--font-body);color:var(--color-secondary);font-size:.875rem;font-weight:400}.chg-inner,.upd-content{color:var(--color-secondary);max-width:var(--content-width);margin:0 0 .3rem;font-size:1rem;line-height:1.8}.chg-inner p,.upd-content p{margin:0 0 .3rem}.chg-inner .chg-h,.upd-content .chg-h{font-family:var(--font-display);color:var(--color-primary);margin:.5rem 0 .25rem;font-size:1rem;font-weight:600}.chg-inner code,.upd-content code{background:var(--color-muted);border-radius:3px;padding:.1em .3em;font-family:ui-monospace,Consolas,Courier New,monospace;font-size:.875em}.chg-inner ul,.chg-inner ol,.upd-content ul,.upd-content ol{margin:0 0 .3rem;padding-left:1.25rem}.chg-inner li,.upd-content li{margin:0 0 .2rem}.chg-inner li::marker,.upd-content li::marker{color:var(--color-accent)}.panel-empty{color:var(--color-secondary);padding:.5rem .1rem .2rem;font-size:1rem}.file-row{border-top:1px solid var(--color-border);color:var(--color-foreground);animation:rowIn .3s var(--ease) both;flex-wrap:wrap;align-items:center;gap:1rem;padding:.75rem .2rem;text-decoration:none;display:flex}.file-row:first-child{border-top:none}.file-audio{flex:100%;order:10;align-items:center;gap:.6rem;padding-top:.45rem;display:flex}.file-audio[hidden]{display:none}.file-audio:not([hidden]){animation:playerIn .25s var(--ease)}@keyframes playerIn{0%{opacity:0;transform:translateY(-6px)}}.file-audio.closing{opacity:0;transition:opacity .2s var(--ease), transform .2s var(--ease);transform:translateY(-6px)}.file-audio audio{display:none}.audio-toggle{border:1px solid var(--color-border);background:var(--color-background);width:2rem;height:2rem;color:var(--color-primary);cursor:pointer;transition:all .3s var(--ease);border-radius:50%;flex:none;justify-content:center;align-items:center;display:inline-flex;position:relative}.audio-toggle:hover{border-color:var(--color-primary);color:var(--color-primary)}.audio-toggle.active{background:var(--color-primary);color:var(--color-background);border-color:var(--color-primary)}.audio-ic-play,.audio-ic-pause{transition:opacity .3s var(--ease);position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.audio-ic-pause,.audio-toggle.active .audio-ic-play{opacity:0}.audio-toggle.active .audio-ic-pause{opacity:1}.audio-range{cursor:pointer;appearance:none;background:0 0;flex:1;min-width:0;height:1rem;margin:0}.audio-range::-webkit-slider-runnable-track{background:linear-gradient(to right, var(--color-primary) var(--p,0%), var(--color-muted) var(--p,0%));border-radius:999px;height:4px}.audio-range::-webkit-slider-thumb{-webkit-appearance:none;background:var(--color-accent);border:none;border-radius:50%;width:12px;height:12px;margin-top:-4px;box-shadow:0 1px 3px #00000040}.audio-range::-moz-range-track{background:var(--color-muted);border-radius:999px;height:4px}.audio-range::-moz-range-progress{background:var(--color-primary);border-radius:999px;height:4px}.audio-range::-moz-range-thumb{background:var(--color-accent);border:none;border-radius:50%;width:12px;height:12px;box-shadow:0 1px 3px #00000040}.audio-time{color:var(--color-secondary);letter-spacing:.04em;flex:none;font-size:.875rem}.audio-seek{border:1px solid var(--color-border);background:var(--color-background);width:2rem;height:2rem;color:var(--color-primary);cursor:pointer;transition:all .3s var(--ease);border-radius:50%;flex:none;justify-content:center;align-items:center;display:inline-flex}.audio-seek:hover{border-color:var(--color-primary);color:var(--color-primary)}.audio-seek svg{flex:none;width:1rem;height:1rem}.file-icon{color:var(--color-secondary);flex:none;align-items:center;gap:3px;display:inline-flex}.file-ext{letter-spacing:.04em;font-size:.75rem}.file-name{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.file-meta{color:var(--color-secondary);flex:none;font-size:.875rem}.file-actions{flex:none;align-items:center;gap:.5rem;display:inline-flex}.dl-btn{border:1px solid var(--color-border);background:var(--color-background);width:2rem;height:2rem;color:var(--color-primary);cursor:pointer;transition:all .3s var(--ease);border-radius:50%;flex:none;justify-content:center;align-items:center;text-decoration:none;display:inline-flex;position:relative}.dl-btn svg{flex:none;width:1rem;height:1rem}.dl-btn:hover{border-color:var(--color-primary);color:var(--color-primary)}.dl-btn.active{background:var(--color-primary);color:var(--color-background);border-color:var(--color-primary)}.dl-btn .dl-ic-play,.dl-btn .dl-ic-pause{transition:opacity .3s var(--ease);position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.dl-btn .dl-ic-pause,.dl-btn.active .dl-ic-play{opacity:0}.dl-btn.active .dl-ic-pause{opacity:1}.dash-toggle{background:var(--color-muted);border:1px solid var(--color-border);cursor:pointer;width:100%;font:inherit;color:var(--color-primary);transition:border-color .2s var(--ease), color .2s var(--ease);border-radius:6px;justify-content:space-between;align-items:center;margin-top:1.2rem;padding:.7rem 1.1rem;display:flex}.dash-toggle:hover{border-color:var(--color-secondary)}.dash-toggle-title{font-family:var(--font-display);letter-spacing:.05em;align-items:center;gap:.5rem;font-size:1.125rem;font-weight:500;display:inline-flex}.dash-toggle-title svg{color:var(--color-accent);flex:none}.dash-toggle-summary{letter-spacing:.05em;color:var(--color-accent-text);text-overflow:ellipsis;white-space:nowrap;margin-left:auto;padding:0 .9rem;font-size:.875rem;overflow:hidden}.dash-toggle-summary[hidden]{display:none}.dash-toggle-chevron{transition:transform .3s var(--ease);color:var(--color-accent);align-items:center;display:inline-flex}.dash-toggle-chevron svg{width:16px;height:16px}.dash-toggle.active .dash-toggle-chevron{transform:rotate(90deg)}.dash-body{opacity:0;height:0;transition:height .45s var(--ease), opacity .35s var(--ease);overflow:hidden}.dash-body.open{opacity:1;height:auto;margin-top:1.2rem}.dash-body.expand{transition:height .75s var(--ease-bounce), opacity .35s var(--ease)}.dash-body.anim .dash-body-inner>*{animation:dashItem .45s var(--ease) both}.dash-body.anim .dash-body-inner>:first-child{animation-delay:0s}.dash-body.anim .dash-body-inner>:nth-child(2){animation-delay:80ms}.dash-body.anim .dash-body-inner>:nth-child(3){animation-delay:.16s}.dash-body.anim .dash-body-inner>:nth-child(4){animation-delay:.24s}@keyframes dashItem{0%{opacity:0;transform:translateY(10px)}}.dash-body-inner{min-width:0}.dash-body .stat-grid{margin-top:0}.stat-grid{background:var(--color-border);border:1px solid var(--color-border);grid-template-columns:repeat(4,1fr);gap:1px;margin:1.6rem 0;display:grid}.stat-card{background:var(--color-background);text-align:center;padding:1.3rem 1rem}.stat-value{font-family:var(--font-display);color:var(--color-primary);font-variant-numeric:tabular-nums;margin:0;font-size:2.1rem;font-weight:600;line-height:1.2}.stat-label{letter-spacing:.12em;color:var(--color-secondary);margin:.25rem 0 0;font-size:.875rem}.filter-bar{flex-wrap:wrap;align-items:center;gap:.5rem;margin:1.2rem 0;font-size:.875rem;display:flex}.asg-filter-fields,.ttb-filters{display:contents}select{font:inherit;background:var(--color-background);border:1px solid var(--color-border);color:var(--color-primary);border-radius:999px;padding:.28rem 1rem;font-size:.875rem}select:focus{outline:2px solid var(--color-accent)}option{background:var(--color-background);color:var(--color-primary)}option:checked{background:var(--color-accent);color:var(--color-background)}.chips{flex-wrap:wrap;gap:.5rem;min-height:1.4rem;margin:.6rem 0;display:flex}.chip{border:1px solid var(--color-accent);color:var(--color-accent-text);font:inherit;cursor:pointer;transition:background .2s var(--ease), color .2s var(--ease);background:0 0;border-radius:999px;align-items:center;gap:.45rem;padding:.14rem .7rem;font-size:.875rem;display:inline-flex}.chip:hover{background:var(--color-accent-text);color:var(--color-background)}.charts-grid{grid-template-columns:1fr 1fr;gap:2.2rem;margin:.8rem 0;display:grid}.chart-box{padding-top:0}.chart-box h2{font-family:var(--font-display);letter-spacing:.05em;margin:0 0 .6rem;font-size:1.125rem;font-weight:500}.chart-hint{letter-spacing:.04em;color:var(--color-secondary);font-size:.75rem;font-weight:400;font-family:var(--font-body);margin-left:.7rem}.chart-hint[hidden]{display:none}.chart-canvas{width:100%;height:280px}.bar-legend{justify-content:center;align-items:center;gap:1.2rem;margin:0 0 .4rem;padding:.2rem 0;display:flex}.bar-legend-item{cursor:pointer;font:inherit;color:var(--color-secondary);transition:opacity .2s var(--ease), background .2s var(--ease);background:0 0;border:none;border-radius:4px;align-items:center;gap:.4rem;padding:.15rem .45rem;font-size:.875rem;display:inline-flex}.bar-legend-item:hover{background:var(--color-muted)}.bar-legend-item.off{opacity:.4}.bar-legend-dot{border-radius:50%;flex-shrink:0;width:.55rem;height:.55rem}.pie-box{margin:0 0 1.8rem;padding-top:1rem}.pie-toolbar{flex-wrap:wrap;align-items:center;gap:1rem;margin-bottom:.4rem;display:flex}.pie-box h2{font-family:var(--font-display);letter-spacing:.05em;margin:0;font-size:1.125rem;font-weight:500}.dim-btn{border:1px solid var(--color-border);color:var(--color-secondary);font:inherit;letter-spacing:.05em;cursor:pointer;transition:all .2s var(--ease);background:0 0;border-radius:999px;padding:.28rem 1rem;font-size:.875rem}.dim-btn:hover:not(.active){border-color:var(--color-primary);color:var(--color-primary)}.dim-btn.active{border-color:var(--color-primary);background:var(--color-primary);color:var(--color-background)}.dim-select{display:none}.list-meta{color:var(--color-secondary);justify-content:space-between;align-items:baseline;margin:1.2rem 0 .4rem;font-size:.875rem;display:flex}.list-meta-left{flex-wrap:wrap;align-items:baseline;gap:.3rem .4rem;min-width:0;display:inline-flex}.susp-scope{align-items:baseline;gap:.1rem;display:inline-flex}.susp-scope[hidden]{display:none}.susp-scope:before{content:"·";color:var(--color-secondary);margin-right:.2rem}.susp-scope-btn{cursor:pointer;font:inherit;color:var(--color-secondary);white-space:nowrap;transition:color .2s var(--ease);background:0 0;border:none;border-radius:3px;padding:0 .25rem;font-size:.875rem}.susp-scope-btn:hover{color:var(--color-accent-text);text-decoration:underline}.susp-scope-btn.active{color:var(--color-accent-text);font-weight:600}.susp-scope-btn.active:hover{text-decoration:none}.sync-badge{letter-spacing:.02em;color:var(--color-accent-text);border:1px solid var(--color-accent);white-space:nowrap;border-radius:999px;padding:.05rem .5rem;font-size:.75rem;animation:1.1s ease-in-out infinite syncPulse;display:inline-block}@keyframes syncPulse{0%,to{opacity:1}50%{opacity:.45}}.log-card.syncing,.asg-card.syncing{opacity:.72}.log-card-list{margin-top:.4rem}.log-card-list .log-card:first-child{border-top:none}.log-card{border-top:1px solid var(--color-border);animation:rowIn .35s var(--ease) both;padding:1.5rem .2rem 1.7rem}.log-card-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:1rem 1.4rem;margin-bottom:1rem;display:flex}.log-card-date{font-family:var(--font-display);font-size:1.25rem;font-weight:600}.log-card-weekday{color:var(--color-secondary);margin-left:.6rem;font-size:.875rem;font-weight:400}.log-card-meta{color:var(--color-secondary);flex-wrap:wrap;align-items:center;gap:.9rem;font-size:.875rem;display:flex}.log-card-class{color:var(--color-primary);font-weight:600}.log-card-period{color:var(--color-accent-text);white-space:nowrap;font-weight:500}.log-card-section{margin-bottom:1.1rem}.log-card-section:last-child{margin-bottom:0}.log-card-label{letter-spacing:.08rem;text-transform:uppercase;color:var(--color-accent-text);margin:0 0 .45rem;font-size:.875rem}.log-card-label .hw-status{font-family:var(--font-body);letter-spacing:.03em;text-transform:none;vertical-align:.12em;border-radius:999px;margin-left:.5rem;padding:.1rem .5rem;font-size:.75rem;font-weight:400;display:inline-block}.log-card-label .hw-status.ongoing{background:var(--color-assignment);color:var(--color-background)}.log-card-label .hw-status.finished{color:#fafafa;background:#52525b}.hw-label-row{justify-content:space-between;align-items:center;gap:.5rem;display:flex}.hw-status-select{font:inherit;border:1px solid var(--color-border);background:var(--color-background);color:var(--color-primary);border-radius:999px;width:auto;padding:.1rem .6rem;font-size:.75rem}.log-card-text{margin:0;font-size:1rem;line-height:1.8}.log-card-text p{margin:0 0 .3rem}.log-card-text p:last-child{margin-bottom:0}.log-card-text ul,.log-card-text ol{margin:0 0 .4rem;padding-left:1.4rem}.log-card-text ul:last-child,.log-card-text ol:last-child{margin-bottom:0}.log-card-text li{margin:0 0 .15rem}.log-card-text li::marker{color:var(--color-accent)}.log-card-text code{background:var(--color-muted);border-radius:3px;padding:.1em .3em;font-family:ui-monospace,Consolas,Courier New,monospace;font-size:.875em}.log-card-text strong{color:var(--color-primary)}.empty-note{color:var(--color-secondary);padding:1rem .2rem}.deep-bar{border:1px solid var(--color-accent);background:color-mix(in srgb, var(--color-accent) 8%, var(--color-background));color:var(--color-primary);border-radius:6px;align-items:center;gap:.6rem;margin:.8rem 0 .4rem;padding:.45rem .8rem;font-size:.875rem;display:flex}.deep-bar[hidden]{display:none}.deep-bar-label{letter-spacing:.04em}.deep-bar-close{cursor:pointer;color:var(--color-secondary);background:0 0;border:none;border-radius:999px;margin-left:auto;padding:.2rem .3rem;font-size:1rem;line-height:1}.deep-bar-close:hover{color:var(--color-primary);background:var(--color-muted)}.log-card.deep-hit{border-left:3px solid var(--color-accent);padding-left:.45rem}.log-card.deep-flash{animation:deepFlash 1.2s var(--ease) 2}@keyframes deepFlash{0%,to{background:0 0}50%{background:color-mix(in srgb, var(--color-accent) 18%, var(--color-background))}}.pager{flex-wrap:wrap;justify-content:center;align-items:center;gap:.4rem;margin:1.6rem 0 .4rem;display:none}.pager.show{display:flex}.page-btn{border:1px solid var(--color-border);min-width:2.1rem;color:var(--color-secondary);font:inherit;letter-spacing:.05em;cursor:pointer;transition:all .2s var(--ease);background:0 0;border-radius:999px;padding:.32rem .6rem;font-size:.875rem}.page-btn:hover:not(:disabled):not(.active){border-color:var(--color-primary);color:var(--color-primary)}.page-btn.active{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-background)}.page-btn:disabled{opacity:.35;cursor:default;pointer-events:none}.page-ellipsis{color:var(--color-secondary);padding:0 .2rem;font-size:.875rem}button.add-log-btn{border-color:var(--color-primary);background:var(--color-primary);color:var(--color-background);transition:background .2s var(--ease), transform .2s var(--ease), box-shadow .2s var(--ease);border-radius:999px;align-items:center;padding:.32rem 1.1rem;font-size:.875rem;display:inline-flex;box-shadow:0 1px 2px #00000014}button.add-log-btn:hover{background:var(--color-primary);color:var(--color-background);transform:translateY(-1px);box-shadow:0 3px 10px #00000026}button.add-log-btn:active{transform:translateY(0);box-shadow:0 1px 2px #00000014}.log-card-del-wrap{align-items:center;gap:.15rem;margin-left:.2rem;display:inline-flex}.log-card-edit,.log-card-del{width:1.7rem;height:1.7rem;color:var(--color-secondary);cursor:pointer;font:inherit;white-space:nowrap;transition:color .2s var(--ease), background .2s var(--ease);background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;padding:0;font-size:.875rem;display:inline-flex}.log-card-edit:hover,.log-card-edit.active{color:var(--color-accent-text);background:var(--color-muted)}.log-card-del:hover{color:var(--color-destructive);background:var(--color-muted)}.modal.form-modal{text-align:left;flex-direction:column;width:100%;max-width:480px;max-height:88vh;display:flex}.modal.form-modal form{min-height:0;overflow-y:auto}.modal-title{font-family:var(--font-display);color:var(--color-primary);margin:0 0 .9rem;font-size:1.125rem;font-weight:600}.form-grid{grid-template-columns:1fr 1fr;gap:.7rem .9rem;display:grid}.form-grid label[hidden]{display:none}@media (width<=480px){.form-grid{grid-template-columns:1fr}}.form-grid label{min-width:0;color:var(--color-secondary);letter-spacing:.05em;flex-direction:column;gap:.3rem;font-size:.875rem;display:flex}.form-grid label.full{grid-column:1/-1}.form-grid input,.form-grid select,.form-grid textarea{font:inherit;background:var(--color-background);border:1px solid var(--color-border);width:100%;color:var(--color-primary);border-radius:2px;font-size:1rem}.form-grid input,.form-grid select{height:2.55rem;padding:0 .5rem;line-height:normal}.form-grid input[type=date]{min-height:2.55rem}.form-grid textarea{resize:vertical;min-height:3rem;padding:.5rem;line-height:1.6}.form-grid input:focus,.form-grid select:focus,.form-grid textarea:focus{border-color:var(--color-accent);outline:2px solid var(--color-accent);outline-offset:-2px}.pwd-wrap{position:relative}.pwd-wrap input{padding-right:2.3rem}.pwd-eye{color:var(--color-secondary);cursor:pointer;transition:color .2s var(--ease);background:0 0;border:none;border-radius:999px;justify-content:center;align-items:center;padding:.3rem;display:inline-flex;position:absolute;top:50%;right:.15rem;transform:translateY(-50%)}.pwd-eye:hover{color:var(--color-primary)}.pwd-eye .eye-open{display:none}.pwd-eye .eye-off,.pwd-eye.visible .eye-open{display:inline-flex}.pwd-eye.visible .eye-off{display:none}.form-actions{background:var(--color-background);align-items:center;gap:.7rem;margin-top:.5rem;padding-top:.7rem;display:flex;position:sticky;bottom:0}.period-range{align-items:center;gap:.35rem;display:flex}.period-range input{flex:1;min-width:0}.period-dash{color:var(--color-secondary);flex:none}.form-hint.period-hint{white-space:normal;margin-top:.15rem;line-height:1.5}.form-error{color:var(--color-accent-text);margin:.4rem 0 0;font-size:.875rem}.form-hint{color:var(--color-secondary);opacity:.85;margin-top:.1rem;font-size:.75rem}.ghost-btn{border:1px solid var(--color-border);color:var(--color-secondary);font:inherit;letter-spacing:.05em;cursor:pointer;transition:all .2s var(--ease);background:0 0;border-radius:999px;padding:.32rem 1.1rem;font-size:.875rem}.ghost-btn:hover{border-color:var(--color-primary);color:var(--color-primary)}.acc-toolbar{z-index:40;background:var(--color-background);color:var(--color-secondary);justify-content:space-between;align-items:center;margin-bottom:.8rem;padding:.4rem 0;font-size:.875rem;display:flex;position:sticky;top:0}.acc-actions{align-items:center;gap:.5rem;display:inline-flex}button.pill-btn{border-radius:999px}.acc-actions .pill-btn{letter-spacing:.05em;padding:.28rem .9rem;font-size:.875rem}.dl-filters{flex-wrap:wrap;align-items:center;gap:.5rem;margin:0 0 1.2rem;display:flex}.dl-subs{flex-wrap:wrap;gap:.5rem;display:flex}.dl-subs[hidden]{display:none}.acc+.acc{border-top:1px solid var(--color-border)}.dl-empty{color:var(--color-secondary);margin:0;padding:1.2rem .2rem;font-size:.875rem}.acc-head{cursor:pointer;text-align:left;width:100%;font-family:var(--font-display);letter-spacing:.04em;color:var(--color-primary);transition:color .2s var(--ease);background:0 0;border:none;justify-content:space-between;align-items:center;padding:1.15rem .2rem;font-size:1.35rem;font-weight:500;display:flex}.acc-head:hover{color:var(--color-accent-text)}.acc-chevron{transition:transform .3s var(--ease);color:var(--color-accent);align-items:center;display:inline-flex}.acc-chevron svg{width:16px;height:16px}.acc.open>.acc-head>.acc-chevron{transform:rotate(90deg)}.acc-body{display:none}.acc.open>.acc-body{display:block}.acc-sub{padding-left:1.6rem}.acc-sub .acc-head{padding:.7rem .2rem;font-size:1.125rem}.acc-sub .file-row{padding:.65rem .2rem}.upd-list{flex-direction:column;display:flex}.upd-card{border-top:1px solid var(--color-border);animation:rowIn .3s var(--ease) both;padding:1.2rem .2rem}.upd-card:first-child{border-top:none}.upd-head{justify-content:space-between;align-items:baseline;gap:1rem;margin-bottom:.35rem;display:flex}.upd-date{color:var(--color-secondary);font-size:.875rem}.upd-title{font-family:var(--font-display);color:var(--color-primary);margin:0;font-size:1.125rem;font-weight:600}.upd-link{font-size:1rem}.teach-nav{flex-wrap:wrap;gap:.5rem;margin:0 0 1.6rem;display:flex}.teach-nav-item{border:1px solid var(--color-border);color:var(--color-secondary);font:inherit;letter-spacing:.05em;transition:all .2s var(--ease);background:0 0;border-radius:999px;padding:.28rem 1rem;font-size:.875rem;text-decoration:none}.teach-nav-item:hover{border-color:var(--color-primary);color:var(--color-primary)}.teach-nav-item.active{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-background)}.upd-filters{flex-wrap:wrap;gap:.5rem;margin-bottom:1.2rem;display:flex}.js-only{display:none}.js-ready .js-only{display:inline-flex}.js-ready select.no-js{display:none}.dd{position:relative}.dd-btn{font:inherit;letter-spacing:.05em;border:1px solid var(--color-border);background:var(--color-background);min-height:2.2rem;color:var(--color-primary);cursor:pointer;transition:border-color .2s var(--ease), color .2s var(--ease), background .2s var(--ease), transform .25s var(--ease);border-radius:999px;align-items:center;gap:.35rem;padding:.28rem 1rem;font-size:.875rem;display:inline-flex}.dd-btn[aria-expanded=true]{background:var(--color-primary);color:var(--color-background);border-color:var(--color-primary);transform:scaleY(1.04)}.dd-btn .dd-chev{transition:transform .3s var(--ease)}.dd-btn[aria-expanded=true] .dd-chev{transform:rotate(180deg)}.filter-bar .dd-btn:not(.is-set):not([aria-expanded=true]),.upd-filters .dd-btn:not(.is-set):not([aria-expanded=true]){color:var(--color-secondary)}.filter-bar .dd-btn.is-set,.upd-filters .dd-btn.is-set{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-background)}.dd-menu{transform-origin:top;background:var(--color-muted);border:1px solid var(--color-border);z-index:60;border-radius:12px;width:max-content;min-width:100%;max-width:min(100vw - 2rem,22rem);padding:.35rem .3rem;animation:.35s cubic-bezier(.34,1.56,.64,1) ddPop;position:absolute;top:calc(100% + 6px);left:0;box-shadow:0 12px 32px -12px #0000002e}@keyframes ddPop{0%{opacity:0;transform:scaleY(0)}70%{opacity:1;transform:scaleY(1.03)}to{opacity:1;transform:scaleY(1)}}.footer-right .dd-menu{transform-origin:bottom;top:auto;bottom:calc(100% + 6px)}@media (prefers-reduced-motion:reduce){.dd-btn[aria-expanded=true]{transform:none}}.dd-opt{text-align:left;width:100%;font:inherit;letter-spacing:.05em;cursor:pointer;color:var(--color-primary);transition:color .2s var(--ease), background .2s var(--ease);background:0 0;border:none;border-radius:6px;margin:.3rem 0;padding:.45rem .8rem;font-size:.875rem;display:block}.dd-opt:hover,.dd-opt:focus-visible{background:var(--color-primary);color:var(--color-background);outline:none}.upd-chip{border:1px solid var(--color-border);color:var(--color-secondary);font:inherit;letter-spacing:.05em;cursor:pointer;transition:all .2s var(--ease);background:0 0;border-radius:999px;padding:.25rem .9rem;font-size:.875rem}.upd-chip:hover{border-color:var(--color-primary);color:var(--color-primary)}.upd-chip.active{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-background)}.asg-class-chips{flex-wrap:wrap;align-items:center;gap:.5rem;display:inline-flex}.upd-more{margin:1.2rem auto 0;display:block}.upd-more[hidden]{display:none}.upd-filters .asg-search{border:1px solid var(--color-border);background:var(--color-background);color:var(--color-primary);font:inherit;letter-spacing:.04em;min-width:10rem;max-width:100%;transition:border-color .2s var(--ease);border-radius:999px;flex:1 1 0;padding:.28rem .9rem;font-size:.875rem}.upd-filters .asg-search::placeholder{color:var(--color-secondary);opacity:.8}.upd-filters .asg-search:focus{border-color:var(--color-accent);box-shadow:0 0 0 2px color-mix(in srgb, var(--color-accent) 25%, transparent);outline:none}.asg-list{flex-direction:column;display:flex}.asg-card{border-top:1px solid var(--color-border);animation:rowIn .3s var(--ease) both;padding:1.2rem .2rem}.asg-card:first-child{border-top:none}.asg-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:.8rem;display:flex}.asg-title{font-family:var(--font-display);color:var(--color-primary);margin:0;font-size:1.125rem;font-weight:600}.asg-meta{flex:none;align-items:center;gap:.6rem;display:flex}.asg-class{letter-spacing:.03em;background:var(--color-secondary);color:var(--color-background);border-radius:999px;padding:.1rem .5rem;font-size:.75rem;display:inline-block}.asg-class+.asg-class{margin-left:.3rem}.asg-pub{color:var(--color-secondary);margin:.3rem 0 .6rem;font-size:.875rem;display:block}.asg-time{align-items:baseline;gap:1rem;margin:.3rem 0 .6rem;display:flex}.asg-time .asg-pub:not(.asg-due){opacity:.75;margin:0}.asg-due{color:var(--color-primary);font-weight:500}.asg-due.soon{color:var(--color-assignment)}.asg-due.overdue{color:var(--color-destructive)}.asg-card .asg-task-md{margin-top:.4rem}.asg-status{font-family:var(--font-body);letter-spacing:.03em;vertical-align:.15em;border-radius:999px;margin-left:.35rem;padding:.1rem .5rem;font-size:.75rem;font-weight:400;display:inline-block}.asg-status.ongoing{background:var(--color-assignment);color:var(--color-background)}.asg-status.finished{color:#fafafa;background:#52525b}.tl-wrap{max-width:var(--content-width);margin:0 auto;padding-left:2.4rem;position:relative}.tl-line{background:var(--color-border);transform-origin:top;width:1px;position:absolute;top:6px;bottom:0;left:4px}.js-ready .tl-line{transition:transform .8s var(--ease);transform:scaleY(0)}.tl-wrap.tl-in .tl-line{transform:scaleY(1)}.tl-item{padding:0 0 2.1rem;position:relative}.tl-item:last-child{padding-bottom:.4rem}.js-ready .tl-item{opacity:0;transition:opacity .6s var(--ease), transform .6s var(--ease);transform:translateY(24px)}.js-ready .tl-item.tl-seen{opacity:1;transition-delay:calc(.2s + var(--i,0) * 60ms);transform:none}.tl-dot{background:var(--color-background);border:1px solid var(--color-accent);border-radius:50%;width:9px;height:9px;position:absolute;top:.42rem;left:-2.4rem}.js-ready .tl-dot{transition:transform .4s var(--ease-bounce);transform:scale(0)}.tl-item.tl-seen .tl-dot{transition-delay:calc(.2s + var(--i,0) * 60ms);transform:scale(1)}.tl-item:last-child .tl-dot{background:var(--color-accent);width:11px;height:11px;top:.38rem;left:calc(-2.4rem - 1px)}.tl-dot:after{content:"";border:1px solid var(--color-accent);opacity:0;border-radius:50%;position:absolute;inset:-4px}.tl-item.tl-seen .tl-dot:after{animation:tlRipple .6s var(--ease) both;animation-delay:calc(.25s + var(--i,0) * 60ms)}@keyframes tlRipple{0%{opacity:.6;transform:scale(.4)}to{opacity:0;transform:scale(1.6)}}.tl-period{font-family:var(--font-display);color:var(--color-accent-text);letter-spacing:.16em;font-size:.95rem;font-style:italic;display:block}.js-ready .tl-period{opacity:0;transition:transform .5s var(--ease), opacity .5s var(--ease), letter-spacing .5s var(--ease);transform:translate(-14px)}.tl-item.tl-seen .tl-period{opacity:1;letter-spacing:.06em;transition-delay:calc(.2s + var(--i,0) * 60ms);transform:none}.tl-title{font-family:var(--font-display);color:var(--color-primary);margin:.25rem 0 .15rem;font-size:1.25rem;font-weight:600}.tl-role{color:var(--color-secondary);margin:0 0 .2rem;font-size:.875rem}.tl-desc{color:var(--color-secondary);margin:0;font-size:1rem}html.no-scrollbar{scrollbar-width:none}html.no-scrollbar::-webkit-scrollbar{display:none}.site-footer{border-top:1px solid var(--color-border);min-height:var(--header-h);color:var(--color-secondary);margin-top:4.5rem;padding:.95rem 1.5rem;font-size:.875rem}.footer-row{flex-wrap:wrap;align-items:center;gap:1.2rem 2rem;display:flex}.footer-left{flex:1;align-items:center;gap:.6rem;display:flex}.footer-icon{border:1px solid var(--color-border);width:2.2rem;height:2.2rem;color:var(--color-secondary);cursor:pointer;transition:color .2s var(--ease), border-color .2s var(--ease);background:0 0;border-radius:50%;justify-content:center;align-items:center;padding:0;text-decoration:none;display:inline-flex}.footer-icon:hover{color:var(--color-accent);border-color:var(--color-accent)}.copyright{text-align:center;letter-spacing:.06em;margin:0;font-size:.875rem}.footer-right{flex-wrap:wrap;flex:1;justify-content:flex-end;align-items:center;gap:1.4rem;display:flex}.footer-right select.no-js{color:var(--color-secondary);cursor:pointer;transition:color .2s var(--ease);background:0 0;border:none;padding:0 .2rem;font-size:.875rem}.footer-right select.no-js:hover{color:var(--color-accent-text)}.footer-right select.no-js:focus{outline:2px solid var(--color-accent);outline-offset:2px;color:var(--color-accent-text)}.modal-overlay{z-index:200;background:#09090b8c;justify-content:center;align-items:flex-start;padding:1.5rem;display:flex;position:fixed;inset:0;overflow-y:auto}.modal-overlay[hidden]{display:none}.modal{background:var(--color-background);text-align:center;width:100%;max-width:320px;animation:rowIn .3s var(--ease) both;border-radius:6px;margin:auto;padding:1.8rem 1.8rem 1.6rem;position:relative;box-shadow:0 24px 60px -24px #09090b73}.modal-qr{border-radius:4px;width:220px;height:220px;margin:0 auto;display:block}.modal-caption{color:var(--color-secondary);margin:1rem 0 0;font-size:1rem}.modal-close{color:var(--color-secondary);cursor:pointer;transition:color .2s var(--ease);background:0 0;border:none;padding:.3rem;font-size:1.35rem;line-height:1;position:absolute;top:.5rem;right:.8rem}.modal-close:hover{color:var(--color-primary)}.del-summary{color:var(--color-secondary);text-align:left;word-break:break-word;margin:0 0 .9rem;font-size:1rem;line-height:1.6}.del-token-note{color:var(--color-accent-text);margin:0 0 .9rem;font-size:.875rem}.del-actions{justify-content:flex-end;gap:.6rem;display:flex}.del-ok{border-color:var(--color-destructive);color:var(--color-destructive)}.del-ok:hover{background:var(--color-destructive);border-color:var(--color-destructive);color:var(--color-background)}@media (width<=768px){:root{--header-h:5rem}.charts-grid{grid-template-columns:1fr}.site-header{flex-wrap:wrap;padding:.8rem 1.1rem}.site-nav{gap:1.1rem}.nav-toggle{width:2.75rem;height:2.75rem}.dl-btn,.audio-toggle,.audio-seek{width:2.5rem;height:2.5rem}.audio-range{height:1.5rem}.audio-range::-webkit-slider-thumb{width:14px;height:14px;margin-top:-5px}.nav-drop-menu,.nav-drop-chevron{display:none}.hero-title{font-size:clamp(2.1rem,8.5vw,2.7rem)}.hero-tagline{font-size:clamp(1.05rem,4.5vw,1.5rem)}.stat-grid{grid-template-columns:repeat(2,1fr)}.product-grid{grid-template-columns:1fr}.file-row{flex-wrap:wrap;gap:.5rem 1rem}.file-name{white-space:normal;-webkit-line-clamp:2;-webkit-box-orient:vertical;flex:100%;order:-1;display:-webkit-box}.acc-sub{padding-left:.8rem}.page-head{padding:1.6rem 1.25rem 0}.page-head+.section{padding-top:1.4rem}.hstrip{-webkit-overflow-scrolling:touch;scrollbar-width:none;-ms-overflow-style:none;scroll-snap-type:x proximity;flex-wrap:nowrap;overflow:auto hidden}.hstrip::-webkit-scrollbar{display:none}.hstrip>*{scroll-snap-align:start;flex:none}.hstrip{min-width:0;max-width:100%}.hstrip[data-hint=start]{mask-image:linear-gradient(90deg,#000 0 calc(100% - .9rem),#0000 100%)}.hstrip[data-hint=mid]{mask-image:linear-gradient(90deg,#0000 0,#000 .9rem calc(100% - .9rem),#0000 100%)}.hstrip[data-hint=end]{mask-image:linear-gradient(90deg,#0000 0,#000 .9rem 100%)}.teach-nav{margin-bottom:1.1rem}.asg-filter-fields,.ttb-filters{display:flex}.js-ready #asg-filters .asg-filter-fields,.asg-filter-fields.hstrip,.js-ready #asg-filters .asg-search{flex:100%;min-width:0}.js-ready .dl-filters{flex-direction:column;align-items:stretch}.js-ready .dl-filters>.hstrip{margin-bottom:0}.hstrip>.dd,.hstrip>.upd-chip,.hstrip>.asg-class-chips{flex:none}.hstrip .dd{min-width:0}}@media (height<=700px){.hero{padding:2rem 1.5rem 1.5rem}.hero-title{margin-top:0}.hero-tagline{margin-top:1rem}.home-top #about{padding-top:1.5rem;padding-bottom:3rem}.scroll-hint{display:none}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}html{scroll-behavior:auto}.hero-title .word,.reveal{opacity:1!important;transform:none!important}}.ttb-toolbar{flex-wrap:wrap;align-items:center;gap:.4rem;margin:0 0 1.2rem;display:flex}.ttb-toolbar-dd{flex:0 auto;align-items:center;min-width:0;display:inline-flex}#ttb-grade-wrap{flex:none}#ttb-ver-wrap{flex:0 auto;max-width:210px}.ttb-grid .ttb-corner{font-weight:600}.ttb-datenav,.ttb-classview{white-space:nowrap;flex:none}.ttb-toolbar-dd .dd{flex:auto;align-items:center;min-width:0;display:flex}.ttb-toolbar-dd .dd-btn{white-space:nowrap;width:100%;min-width:0;overflow:hidden}.ttb-toolbar-dd .dd-label{text-overflow:ellipsis;flex:auto;min-width:0;overflow:hidden}.ttb-updated{color:var(--color-secondary);font-size:.875rem}.ttb-grid-foot{justify-content:flex-end;margin-top:1rem;display:flex}.ttb-classview{align-items:center;gap:.4rem;display:inline-flex}.ttb-classview-btn{border:1px solid var(--color-border);color:var(--color-secondary);font:inherit;letter-spacing:.04em;cursor:pointer;transition:all .2s var(--ease);background:0 0;border-radius:999px;padding:.25rem .6rem;font-size:.875rem}.ttb-classview-btn:hover{border-color:var(--color-primary);color:var(--color-primary)}.ttb-classview-btn.active{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-background)}.ttb-scroll{-webkit-overflow-scrolling:touch;overflow-x:auto}.ttb-grid{display:block}.ttb-row{grid-template-columns:8rem repeat(7,minmax(6rem,1fr));width:100%;min-width:max-content;display:grid}.ttb-row .ttb-period-col,.ttb-row.ttb-head .ttb-corner{z-index:2;background:var(--color-muted);box-shadow:1px 0 0 var(--color-border);position:sticky;left:0}.ttb-grid .ttb-period-col,.ttb-grid .ttb-day-col{border-right:1px solid var(--color-border);border-bottom:1px solid var(--color-border);padding:.45rem .5rem .3rem;font-size:.875rem}.ttb-grid .ttb-head .ttb-day-col{min-height:60px;font-family:var(--font-display);letter-spacing:.04em;background:var(--color-muted);color:var(--color-primary);flex-direction:column;justify-content:center;align-items:center;padding-top:.2rem;padding-bottom:.2rem;font-size:1.125rem;font-weight:500;display:flex}.ttb-grid .ttb-head .ttb-day-col .ttb-day-note{opacity:.7;margin-top:.1rem;font-size:.7rem;font-weight:400;line-height:1.2;display:block}.ttb-grid .ttb-corner,.ttb-grid .ttb-period-col{z-index:2;background:var(--color-muted);box-shadow:1px 0 0 var(--color-border);position:sticky;left:0}.ttb-grid .ttb-period-col{white-space:nowrap;flex-direction:column;justify-content:center;align-items:center;gap:.5rem;line-height:1.2;display:flex}.ttb-period{color:var(--color-primary);font-size:.875rem;font-weight:600}.ttb-time{font-variant-numeric:tabular-nums;color:var(--color-secondary);font-size:.72rem}.ttb-grid .ttb-day-col{min-height:54px}.ttb-grid .ttb-head .ttb-day-col.today{background:var(--color-accent);color:var(--color-background)}.ttb-grid .ttb-head .ttb-day-col.today .ttb-day-note{color:var(--color-background)}.ttb-grid .ttb-day-col.today{background:color-mix(in srgb, var(--color-accent) 8%, var(--color-background))}.ttb-cell{flex-direction:column;align-items:center;gap:.25rem;display:flex}.ttb-class{white-space:normal;overflow-wrap:anywhere;flex-direction:column;align-items:center;gap:.5rem;line-height:1.25;display:inline-flex}.ttb-class b{color:var(--color-primary);font-size:.9rem;font-weight:600}.ttb-class span{color:var(--color-secondary);font-size:.72rem}.ttb-class.ttb-link{cursor:pointer;text-decoration:none}.ttb-class.ttb-link:hover b,.ttb-class.ttb-link:hover span{color:var(--color-accent-text)}.ttb-badge{background:var(--color-accent);color:var(--color-background);letter-spacing:.04em;border-radius:999px;padding:.15rem .3rem;font-size:.62rem;font-weight:600;line-height:1;position:absolute;top:2px;right:2px}.ttb-badge-out{background:var(--color-secondary)}.ttb-class.ttb-move-out{opacity:.45}.ttb-class.ttb-move-out b{color:var(--color-secondary);text-decoration:line-through}.ttb-class.ttb-move-in b{color:var(--color-accent-text);text-underline-offset:2px;text-decoration:underline 1.5px}.ttb-td-wrap{position:relative}@keyframes ttbFlash{0%{background:color-mix(in srgb, var(--color-accent) 25%, var(--color-background))}to{background:0 0}}.ttb-cell-flash{animation:ttbFlash .8s var(--ease) forwards}.ttb-move-btn{border:1px solid var(--color-border);width:1.7rem;height:1.7rem;color:var(--color-primary);cursor:pointer;font:inherit;transition:all .2s var(--ease);background:0 0;border-radius:50%;justify-content:center;align-items:center;padding:0;display:inline-flex}.ttb-move-btn:hover{color:var(--color-accent-text);border-color:var(--color-accent-text);background:var(--color-muted)}.ttb-move-btn[hidden]{display:none}.ttb-move-type{gap:.4rem;margin:.2rem 0 .9rem;display:inline-flex}.ttb-move-type-btn{border:1px solid var(--color-border);color:var(--color-secondary);font:inherit;letter-spacing:.05em;cursor:pointer;transition:all .2s var(--ease);background:0 0;border-radius:999px;padding:.25rem .9rem;font-size:.875rem}.ttb-move-type-btn:hover{border-color:var(--color-primary);color:var(--color-primary)}.ttb-move-type-btn.active{border-color:var(--color-primary);background:var(--color-primary);color:var(--color-background)}.ttb-move-class{align-items:center;gap:.6rem;margin-bottom:.9rem;display:flex}.ttb-move-class span{color:var(--color-secondary);letter-spacing:.05em;font-size:.875rem}.ttb-move-class select{border:1px solid var(--color-border);background:var(--color-background);width:6.5rem;color:var(--color-primary);font:inherit;border-radius:2px;padding:.34rem .5rem;font-size:1rem}.ttb-move-class select:focus{border-color:var(--color-accent);outline:2px solid var(--color-accent);outline-offset:-2px}.ttb-move-row{align-items:center;gap:.45rem;margin-bottom:.6rem;font-size:.9rem;display:flex}.ttb-move-role{min-width:2.2rem;color:var(--color-primary);flex:none;font-weight:600}.ttb-move-day,.ttb-move-p{border:1px solid var(--color-border);background:var(--color-background);color:var(--color-primary);font:inherit;border-radius:2px;padding:.34rem .4rem;font-size:1rem}.ttb-move-day:focus,.ttb-move-p:focus{border-color:var(--color-accent);outline:2px solid var(--color-accent);outline-offset:-2px}.ttb-move-day{min-width:7.5rem}.ttb-move-p{min-width:6rem}.ttb-move-dash{color:var(--color-secondary)}.modal.form-modal.ttb-move-modal-box{max-width:560px}.ttb-move-row{flex-wrap:wrap}.ttb-move-preview{background:var(--color-muted);color:var(--color-primary);font-variant-numeric:tabular-nums;border-radius:2px;margin:.9rem 0 .4rem;padding:.5rem .7rem;font-size:.875rem}.ttb-move-conflict{color:var(--color-assignment);background:color-mix(in srgb, var(--color-assignment) 10%, var(--color-background));border-radius:2px;margin:.2rem 0 .6rem;padding:.4rem .6rem;font-size:.875rem}.ttb-chg-line{flex-wrap:wrap;align-items:baseline;gap:.1rem .45rem;margin:0;font-size:.9rem;display:flex}.ttb-chg-when,.ttb-chg-class{color:var(--color-primary);font-variant-numeric:tabular-nums;white-space:nowrap;font-weight:600}.ttb-chg-who{color:var(--color-secondary);white-space:nowrap}.ttb-chg-arrow{color:var(--color-secondary)}.ttb-chg-line .ttb-chg-note{margin:0}.ttb-chg{margin-top:1rem}.ttb-chg-list{flex-direction:column;display:flex}.ttb-chg-item{border-top:1px solid var(--color-border);animation:rowIn .3s var(--ease) both;padding:.8rem .2rem}.ttb-chg-group:first-child .ttb-chg-item:first-of-type{border-top:none}.ttb-chg-date{color:var(--color-primary);font-weight:600}.ttb-chg-badge{background:var(--color-accent);color:var(--color-background);border-radius:999px;margin-left:.5rem;padding:.12rem .45rem;font-size:.72rem;font-weight:600;display:inline-block}.ttb-chg-text{color:var(--color-secondary);margin:.2rem 0 0;font-size:.9rem}.ttb-chg-note{color:var(--color-secondary);opacity:.8;margin:.15rem 0 0;font-size:.8rem}.ttb-chg-item{position:relative}.ttb-chg-actions{gap:.1rem;display:inline-flex;position:absolute;top:.4rem;right:.2rem}.ttb-chg-actions .log-card-edit,.ttb-chg-actions .log-card-del{width:1.5rem;height:1.5rem}.ttb-auth-hint{color:var(--color-secondary);margin:0 0 .6rem;font-size:.875rem}.ttb-datenav{align-items:center;gap:.25rem;display:inline-flex}.ttb-dnav-btn{border:1px solid var(--color-border);width:1.7rem;height:1.7rem;color:var(--color-secondary);cursor:pointer;transition:color .2s var(--ease), background .2s var(--ease), border-color .2s var(--ease);background:0 0;border-radius:50%;justify-content:center;align-items:center;padding:0;display:inline-flex}.ttb-dnav-btn:hover{color:var(--color-accent-text);border-color:var(--color-accent-text);background:var(--color-muted)}.ttb-dinput{opacity:0;pointer-events:none;border:0;width:1px;height:1px;margin:0;padding:0;position:absolute;overflow:hidden}.ttb-dinput:focus{outline:none}.ttb-dweek{border:1px solid var(--color-border);min-width:4.6rem;font:inherit;color:var(--color-primary);cursor:pointer;user-select:none;transition:color .2s var(--ease), border-color .2s var(--ease), background .2s var(--ease);border-radius:999px;justify-content:center;align-items:center;padding:.25rem .7rem;font-size:.875rem;display:inline-flex}.ttb-dweek:hover{border-color:var(--color-primary);color:var(--color-primary);background:var(--color-muted)}.ttb-dweek:focus-visible{outline:2px solid var(--color-accent-text);outline-offset:1px}.ttb-dnav-today{border:1px solid var(--color-border);font:inherit;color:var(--color-secondary);cursor:pointer;transition:all .2s var(--ease);background:0 0;border-radius:999px;padding:.25rem .7rem;font-size:.875rem}.ttb-dnav-today:hover{border-color:var(--color-primary);color:var(--color-primary)}.ttb-chg-group{margin-top:.8rem}.ttb-chg-group:first-child{margin-top:0}.ttb-chg-group-title{color:var(--color-accent-text);letter-spacing:.04em;margin:.6rem 0 .3rem;font-size:.875rem;font-weight:600}.ttb-chg-group .ttb-chg-item{padding:.7rem .2rem}.ttb-chg-group .ttb-chg-item.has-actions{padding-right:3.6rem}@media (width<=768px){.ttb-toolbar{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.45rem .5rem;display:grid}.ttb-filters{grid-area:1/1}.ttb-move-btn{grid-area:1/2}.ttb-datenav{grid-area:2/1/3/3}.ttb-classview{grid-area:3/1/4/3}.ttb-filters>*{flex:none}#ttb-ver-wrap{flex:none;max-width:none}}.astro-route-announcer{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;top:0;left:0;overflow:hidden}
