:root{--ease-out:cubic-bezier(.22,.75,.24,1);--motion-fast:150ms;--motion-base:220ms;--motion-slow:300ms}
body{transition:background-color var(--motion-base),color var(--motion-base)}
button,summary,a,input,select,textarea{-webkit-tap-highlight-color:transparent}
button,summary{touch-action:manipulation}
button:focus-visible,summary:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--accent);outline-offset:4px}
.university-mark{width:38px;height:42px;object-fit:contain;border-radius:0;background:transparent}
.masthead{padding-bottom:20px}.decoration{display:none}.eyebrow,.home-kicker{letter-spacing:1.8px}
.mobile-pager{box-shadow:none;border-radius:20px;padding:5px}.pager-indicator{border-radius:15px;transition:transform var(--motion-slow) var(--ease-out),background-color var(--motion-base)}
.mobile-pager button{border-radius:15px;transition:color var(--motion-fast),transform var(--motion-fast) var(--ease-out)}
.board-grid{border-radius:24px;box-shadow:none;overflow-anchor:none}.content-page{scrollbar-width:thin;scrollbar-color:var(--line) transparent}.board-symbol{border-radius:14px}
.home-row{border-radius:13px;border-top:0;position:relative;padding:22px 12px;transition:background-color var(--motion-fast),transform var(--motion-fast) var(--ease-out)}
.home-row+.home-row:before{content:'';position:absolute;left:12px;right:12px;top:0;height:1px;background:var(--line)}
.home-arrow{transition:transform var(--motion-base) var(--ease-out)}.home-row:active{transform:scale(.994)}
.pager-caption button,.publish-entry,.primary-action{border-radius:14px;transition:background-color var(--motion-fast),opacity var(--motion-fast),transform var(--motion-fast) var(--ease-out);box-shadow:none}
.pager-caption button:hover:not(:disabled){transform:none}.pager-caption button:active:not(:disabled),.primary-action:active:not(:disabled),.publish-entry:active{transform:scale(.97)}
.account-menu summary{transition:background-color var(--motion-fast),transform var(--motion-fast) var(--ease-out)}.menu-glyph i{transition:transform var(--motion-base) var(--ease-out),top var(--motion-base) var(--ease-out),opacity var(--motion-fast)}
.menu-panel{border:1px solid var(--line);border-radius:20px;background:var(--paper);backdrop-filter:none;box-shadow:0 8px 24px #0000000a}
.account-menu[open] .menu-panel{animation:panel-in var(--motion-base) var(--ease-out) both}
.menu-panel button{border-radius:13px;transition:background-color var(--motion-fast),transform var(--motion-fast) var(--ease-out)}.menu-panel button:hover{background:var(--soft);transform:none}.menu-panel button:active{transform:scale(.98)}.menu-panel button:hover .settings-icon{transform:rotate(25deg)}.menu-panel button:hover svg:not(.settings-icon){transform:none}
dialog{border-radius:24px;box-shadow:0 18px 65px #00000012;padding:28px;background:var(--paper);overscroll-behavior:contain;scrollbar-width:thin}
dialog[open]{animation:dialog-in var(--motion-base) var(--ease-out) both}dialog::backdrop{background:#231f192e;animation:backdrop-in var(--motion-base) ease both}
dialog.is-closing{animation:dialog-out var(--motion-fast) ease-in both;pointer-events:none}dialog.is-closing::backdrop{animation:backdrop-out var(--motion-fast) ease both}
.close-dialog{display:grid;place-items:center;flex-shrink:0;width:36px;height:36px;border-radius:50%;transition:background-color var(--motion-fast),transform var(--motion-fast)}.close-dialog:active{transform:scale(.9)}
.user-card,.clock-result,.board-placeholder{border-radius:18px}.timetable-entry,.clock-entry{box-shadow:none;transition:background-color var(--motion-fast),transform var(--motion-fast) var(--ease-out)}.timetable-entry:hover,.clock-entry:hover{transform:none}.timetable-entry:active,.clock-entry:active{transform:scale(.93)}
.schedule-course{box-shadow:none;border-radius:12px;transition:background-color var(--motion-base),filter var(--motion-fast),transform var(--motion-fast) var(--ease-out)}.schedule-course:hover{box-shadow:none;transform:none}.schedule-course:active{transform:scale(.97)}
.theme-option{transition:background-color var(--motion-fast),border-color var(--motion-fast);border-radius:14px}.theme-swatch{box-shadow:none}.setting-row input,.setting-row input::after{transition:background-color var(--motion-base),transform var(--motion-base) var(--ease-out)}
dialog form input:not([type=checkbox]),dialog form textarea,dialog form select,.semester-start{border-radius:12px;transition:border-color var(--motion-fast),background-color var(--motion-base)}
@keyframes panel-in{from{opacity:0;transform:translateY(-5px) scale(.985)}to{opacity:1;transform:translateY(0) scale(1)}}
@keyframes dialog-in{from{opacity:0;transform:translateY(10px) scale(.985)}to{opacity:1;transform:translateY(0) scale(1)}}
@keyframes dialog-out{from{opacity:1;transform:translateY(0) scale(1)}to{opacity:0;transform:translateY(6px) scale(.99)}}
@keyframes backdrop-in{from{opacity:0}to{opacity:1}}@keyframes backdrop-out{from{opacity:1}to{opacity:0}}
@media(hover:hover){.home-row:hover .home-arrow{transform:translate(2px,-2px)}.close-dialog:hover{background:var(--hover)}}
@media(max-width:600px){.masthead{padding-bottom:12px}.university-mark{width:32px;height:36px}.mobile-pager{padding:4px;border-radius:18px}.pager-indicator{border-radius:13px}.board-grid{border-radius:22px}.home-row{padding:18px 4px;border-radius:12px}.home-row+.home-row:before{left:4px;right:4px}dialog{border-radius:24px;padding:24px 20px;max-height:calc(100dvh - 32px);width:calc(100% - 28px)}.timetable-dialog{width:calc(100% - 16px);padding:20px 12px}.content-page{padding-left:22px;padding-right:22px}.pager-caption button{min-height:38px}.post-actions button{min-height:36px}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}.board-grid{scroll-behavior:auto!important}}
header{text-align:center;padding-left:0;padding-right:0}.hero-title-line{display:flex;justify-content:center;align-items:center;gap:20px}.hero-title-line h1{min-width:0}.hero-title-line svg{width:32px;height:32px;flex-shrink:0;fill:none;stroke:var(--accent);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;opacity:.65}.hero-title-line .hero-sprout{transform:rotate(-12deg)}.hero-title-line .hero-spark{width:26px;height:26px}.intro{max-width:none;margin-left:auto;margin-right:auto}
@media(max-width:600px){.hero-title-line{gap:9px}.hero-title-line svg{width:22px;height:22px}.hero-title-line .hero-spark{width:17px;height:17px}.hero-title-line h1{font-size:clamp(23px,6.6vw,30px)}header .intro{font-size:11px}}
@media(max-width:600px){
  .timetable-dialog{width:calc(100% - 16px);max-width:440px;max-height:calc(100dvh - 16px);padding:18px 10px 14px;border-radius:22px;overflow-y:auto}
  .timetable-dialog .dialog-head{margin-bottom:10px;padding:0 5px;align-items:center}.timetable-dialog h2{font-size:18px}.schedule-subtitle{font-size:10px;margin-top:6px}.timetable-dialog .close-dialog{width:32px;height:32px}
  .schedule-hint{font-size:10px;margin:8px 5px 12px}.schedule-scroll{overflow:visible;max-height:none;border-radius:12px;border:1px solid var(--line)}
  .schedule-grid{min-width:0;width:100%;grid-template-columns:54px repeat(5,minmax(0,1fr));grid-template-rows:32px repeat(12,36px);border-radius:12px;overflow:hidden}
  .schedule-head{position:static;font-size:11px;font-weight:600}.schedule-time{position:static;gap:2px;font-size:8px;line-height:1.1;min-width:0}.schedule-time small{font-size:0;display:flex;flex-direction:column;gap:2px;line-height:1.1}.schedule-clock span{font-size:8px;font-variant-numeric:tabular-nums}
  .schedule-course{margin:3px 2px;padding:4px 1px;border-radius:8px;font-size:11px;line-height:1.3;min-width:0;letter-spacing:0}.schedule-course[data-course="Python"]{font-size:9px}
  .schedule-footnote{font-size:9px;margin:10px 5px 8px;line-height:1.6}.unscheduled{margin:0 5px;font-size:10px}.unscheduled summary{padding:6px 0}.schedule-cell{border-right-color:var(--line)}
}
@media(max-width:359px){.schedule-grid{grid-template-columns:47px repeat(5,minmax(0,1fr));grid-template-rows:30px repeat(12,34px)}.schedule-course{font-size:10px}.schedule-course[data-course="Python"]{font-size:8px}}
/* Dedicated timetable route: #timetable. */
.timetable-page{display:block;position:relative;box-sizing:border-box;width:calc(100% - 64px);max-width:1100px;margin:36px auto;padding:32px;border:1px solid var(--line);border-radius:24px;background:var(--paper);color:var(--ink);max-height:none;overflow:visible;animation:schedule-page-in 220ms var(--ease-out) both}
.timetable-page .dialog-head{flex-direction:row-reverse;justify-content:flex-end;gap:24px;align-items:center;margin-bottom:24px}.timetable-page .dialog-head>div{flex:1}.timetable-page h2{font-size:26px}.schedule-back{display:inline-flex;align-items:center;justify-content:center;min-height:42px;padding:10px 16px;border:1px solid var(--line);border-radius:14px;background:var(--soft);color:var(--ink);font-size:13px;white-space:nowrap;transition:background-color 150ms,transform 150ms}.schedule-back:hover{background:var(--hover)}.schedule-back:active{transform:scale(.96)}
.timetable-page .schedule-scroll{max-height:none;overflow:visible;border-radius:16px}.timetable-page .schedule-grid{min-width:0;grid-template-columns:110px repeat(5,minmax(0,1fr));grid-template-rows:44px repeat(12,48px);border-radius:16px;overflow:hidden}.timetable-page .schedule-head,.timetable-page .schedule-time{position:static}.timetable-page .schedule-head{font-size:13px}.timetable-page .schedule-course{font-size:15px;border-radius:12px}.timetable-page .schedule-footnote{margin-top:18px}.timetable-page .unscheduled{margin-top:14px}
@keyframes schedule-page-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
@media(max-width:600px){.timetable-page{width:calc(100% - 16px);max-width:none;margin:12px auto;padding:16px 8px;border-radius:20px;max-height:none;overflow:visible}.timetable-page .dialog-head{padding:0 4px;gap:12px;margin-bottom:18px}.timetable-page h2{font-size:21px}.timetable-page .schedule-subtitle{font-size:10px;line-height:1.6}.schedule-back{min-height:38px;padding:8px 12px;font-size:12px}.timetable-page .schedule-hint{margin:6px 4px 12px;font-size:10px}.timetable-page .schedule-grid{grid-template-columns:55px repeat(5,minmax(0,1fr));grid-template-rows:38px repeat(12,43px);border-radius:12px}.timetable-page .schedule-head{font-size:12px}.timetable-page .schedule-course{font-size:12px;margin:3px 2px;border-radius:10px}.timetable-page .schedule-course[data-course="Python"]{font-size:10px}.timetable-page .schedule-time{font-size:9px;gap:3px}.timetable-page .schedule-clock span{font-size:9px}.timetable-page .schedule-footnote{margin:12px 4px 8px;font-size:10px}.timetable-page .unscheduled{margin:8px 4px;font-size:11px}}
@media(max-width:359px){.timetable-page .schedule-grid{grid-template-columns:48px repeat(5,minmax(0,1fr));grid-template-rows:34px repeat(12,40px)}.timetable-page .schedule-course{font-size:11px}.timetable-page .schedule-course[data-course="Python"]{font-size:9px}}
@media(prefers-reduced-motion:reduce){.timetable-page{animation:none}}
/* Home follows the document scroll rather than an inner scrolling panel. */
.board-grid.home-active{align-items:flex-start;overflow-y:hidden}.board-grid.home-active .home-page{height:auto;min-height:0;overflow:visible}.board-grid.home-active>.board{height:0;min-height:0;overflow:hidden;padding-top:0;padding-bottom:0}
/* Every section grows with its content; the document is the only vertical scroller. */
.board-grid,.board-grid.home-active{display:block;height:auto;max-height:none;overflow:visible;scroll-snap-type:none;scroll-behavior:auto;touch-action:pan-y}
.board-grid>.content-page,.board-grid.home-active>.content-page,.board-grid.home-active>.board{height:auto;min-height:0;max-height:none;width:100%;overflow:visible;overscroll-behavior:auto;scroll-snap-align:none;padding:44px clamp(28px,6vw,88px)}
.mobile-pager{scroll-margin-top:16px}.post-content{overflow-wrap:anywhere}.home-row-copy>span{white-space:normal;overflow:visible;line-height:1.7}.home-row-count,.home-arrow{flex-shrink:0}
@media(max-width:800px) and (min-width:601px){.board-grid>.content-page,.board-grid.home-active>.content-page,.board-grid.home-active>.board{padding:35px}}
@media(max-width:600px){.board-grid>.content-page,.board-grid.home-active>.content-page,.board-grid.home-active>.board{padding:25px 22px}.mobile-pager{scroll-margin-top:12px}}
.team-tabs{display:grid;grid-template-columns:1fr 1fr;gap:4px;padding:4px;border-radius:14px;background:var(--soft);margin-bottom:24px}.team-tabs button{border:0;border-radius:10px;background:transparent;padding:11px 8px;color:var(--muted);font-size:12px;transition:color .2s,background-color .2s}.team-tabs button[aria-selected=true]{background:var(--paper);color:var(--ink);font-weight:600}.team-pages{overflow:clip;touch-action:pan-y}.team-page{min-height:304px}.team-subtitle{color:var(--muted);font-size:12px;line-height:1.8;margin-top:-10px}.team-feedback{text-align:center;margin:24px 0 0}.team-paging{display:flex;align-items:center;justify-content:space-between;margin-top:22px;font-size:11px;color:var(--muted)}.team-paging button{width:36px;height:36px;border:1px solid var(--line);border-radius:50%;background:var(--paper);color:var(--ink)}.team-paging button:disabled{opacity:.3}.author-profile .qq-nickname{overflow-wrap:anywhere}.team-page .author-profile{padding-top:8px}
