:root{color-scheme:light;--bg:#f4f6f8;--paper:#fff;--ink:#152c32;--muted:#626f76;--line:#dfe5e8;--teal:#164b49;--nthu:#7856a2;--nthu-bg:#f1eafa;--ncu:#315f9c;--ncu-bg:#e8effb;--ntu:#ab4754;--ntu-bg:#fbecef;--nsysu:#26786c;--nsysu-bg:#e2f3ed}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:96px}body{margin:0;color:var(--ink);background:var(--bg);font-family:"PingFang TC","Noto Sans TC","Microsoft JhengHei",system-ui,sans-serif;font-size:16px;line-height:1.65;-webkit-font-smoothing:antialiased}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit;cursor:pointer}button:focus-visible,a:focus-visible,summary:focus-visible{outline:3px solid #bc6b16;outline-offset:4px}a{color:inherit}button{color:inherit}h1,h2,h3,h4,p{margin:0}.skip-link{position:fixed;left:-999px;top:8px;padding:12px;background:var(--ink);color:#fff;z-index:100}.skip-link:focus{left:12px}.site-header{background:#fff;border-bottom:1px solid var(--line)}.header-inner{max-width:1320px;padding:0 40px;margin:auto;min-height:90px;display:flex;align-items:center;gap:48px}.brand{display:flex;align-items:center;gap:13px;text-decoration:none}.brand-logo{display:block;width:132px;height:88px;object-fit:contain;flex-shrink:0}.brand-name{font-size:19px;font-weight:700;letter-spacing:2px;line-height:1.35}.header-inner nav{display:flex;align-self:stretch;gap:30px;margin-left:auto}.header-inner nav a{display:flex;align-items:center;text-decoration:none;font-size:14px;color:var(--muted);border-bottom:2px solid transparent}.header-inner nav a.current{color:var(--teal);border-color:var(--teal);font-weight:600}main{max-width:1320px;margin:0 auto;padding:0 40px}.intro{display:flex;align-items:center;justify-content:space-between;padding:44px 0 36px;gap:24px}.eyebrow{font-size:11px;font-weight:650;letter-spacing:2.1px;color:var(--teal);margin-bottom:10px}.eyebrow span{margin-left:12px;color:#76858a}h1{font-size:clamp(28px,3.1vw,42px);font-weight:650;letter-spacing:-1.25px;line-height:1.35}h1>span{font-family:Georgia,serif;font-weight:400;font-size:1.19em;margin-right:5px}.intro-description{color:var(--muted);font-size:15px;margin-top:10px}.intro-aside{padding-left:32px;border-left:1px solid #cfd8dc;display:flex;flex-direction:column;text-align:right;min-width:207px}.intro-aside>span{font-size:12px;color:var(--muted)}.intro-aside strong{font-family:Georgia,serif;font-size:42px;font-weight:400;line-height:1.4;letter-spacing:1px}.intro-aside strong span{color:#b8c5c7;font-size:30px;margin:0 7px}.intro-aside small{font-size:12px;color:var(--muted)}.workspace{background:#fff;border:1px solid var(--line);border-radius:12px;overflow:hidden;box-shadow:0 6px 30px #173f4510}.workspace-top{display:flex;align-items:center;justify-content:space-between;padding:21px 26px;border-bottom:1px solid var(--line);gap:16px}.workspace-top>div:first-child,.section-heading>div{display:flex;gap:12px;align-items:center}.section-index{font-size:12px;font-weight:600;color:#75888e;letter-spacing:1px}h2{font-size:19px;font-weight:650;letter-spacing:.3px}.view-switch{display:flex;gap:3px;background:#f1f4f5;border-radius:7px;padding:4px}.view-switch button{border:0;border-radius:5px;padding:5px 13px;font-size:13px;background:transparent;color:#5a6a70;min-height:34px}.view-switch button[aria-pressed=true]{background:#fff;color:var(--teal);box-shadow:0 1px 4px #173f4517;font-weight:650}.calendar-layout{display:grid;grid-template-columns:minmax(0,1fr) 290px}.calendar-main{padding:23px 25px 15px;min-width:0}.calendar-toolbar{display:flex;align-items:center;justify-content:space-between}.calendar-toolbar h3{font-size:21px;font-weight:600;letter-spacing:-.5px}.calendar-toolbar h3 span{color:#a3afb3;padding:0 5px}.year-label{font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums}.legend{display:flex;flex-wrap:wrap;gap:18px;font-size:12px;margin:14px 0 20px}.legend>span{display:flex;align-items:center;gap:6px}.legend>span:before{content:"";height:7px;width:7px;border-radius:2px;background:var(--school-color)}.nthu{--school-color:var(--nthu);--school-bg:var(--nthu-bg)}.ncu{--school-color:var(--ncu);--school-bg:var(--ncu-bg)}.ntu{--school-color:var(--ntu);--school-bg:var(--ntu-bg)}.nsysu{--school-color:var(--nsysu);--school-bg:var(--nsysu-bg)}.calendar-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));border:1px solid var(--line);border-radius:7px;overflow:hidden}.weekday{font-size:12px;color:#5f747a;text-align:center;background:#f8fafb;padding:8px 0;border-bottom:1px solid var(--line)}.weekday.weekend{color:#986d70}.day{position:relative;min-height:126px;padding:9px 5px 8px;border-right:1px solid var(--line);border-bottom:1px solid var(--line);background:#fff;min-width:0}.day:nth-child(7n){border-right:0}.day.last-row{border-bottom:0}.day.weekend{background:#fcfcfd}.day.muted{background:#f8fafb}.day.muted .day-number{color:#a3adb1}.day.selected{background:#f0f7f6;box-shadow:inset 0 0 0 1.5px #39706b;z-index:1}.day-header{display:flex;justify-content:space-between;align-items:center;margin:0 3px 8px}.day-number{font-size:16px;font-weight:500;line-height:25px;font-variant-numeric:tabular-nums}.month-label{font-size:11px;color:var(--muted)}.same-day-marker{font-size:10px;background:#f4e4d1;color:#82531c;border-radius:3px;padding:0 4px;white-space:nowrap}.event{display:block;width:100%;border:0;border-left:3px solid var(--school-color);border-radius:3px;background:var(--school-bg);color:var(--school-color);text-align:left;padding:6px 5px;margin-top:5px;font-size:12px;font-weight:600;line-height:1.5;white-space:nowrap;transition:filter .15s,transform .15s}.event:hover{filter:brightness(.96);transform:translateY(-1px)}.calendar-note{display:flex;gap:8px;align-items:flex-start;margin-top:15px;color:var(--muted);font-size:12px;line-height:1.8}.note-icon{border:1px solid #829397;border-radius:50%;height:15px;min-width:15px;text-align:center;font:11px/14px Georgia,serif;margin-top:3px}.day-detail{border-left:1px solid var(--line);background:#f8faf9;padding:26px 24px}.detail-eyebrow{font-size:11px;color:#56726c;letter-spacing:1.5px;font-weight:650}.detail-date{display:flex;align-items:baseline;gap:12px;margin:6px 0 13px}.detail-date strong{font:400 42px/1.3 Georgia,serif}.detail-date span{font-size:13px;color:var(--muted)}.conflict-note{display:flex;align-items:flex-start;gap:9px;background:#f7efe2;border:1px solid #eddfc7;padding:11px;border-radius:6px;margin-bottom:21px;color:#80572a;font-size:12px;line-height:1.65}.conflict-note b{font-weight:650}.conflict-icon{font-size:16px;line-height:1.2;margin-top:2px}.detail-school{border-top:1px solid #dfe5e4;padding:17px 0}.detail-school:first-of-type{border-top:0;padding-top:0}.detail-school h4{font-size:16px;display:flex;gap:8px;align-items:center}.school-dot{width:8px;height:8px;border-radius:2px;background:var(--school-color);display:inline-block;flex-shrink:0}.detail-school p{font-size:12px;color:var(--muted);margin:5px 0 7px}.detail-school a{font-size:12px;color:var(--teal);font-weight:550;text-decoration:none;border-bottom:1px solid #99b9b1;padding-bottom:2px}.detail-bottom{font-size:11px;color:#6a7975;margin-top:13px}.school-section{padding-top:37px}.section-heading{display:flex;align-items:center;justify-content:space-between;gap:12px}.section-heading>p{font-size:13px;color:var(--muted)}.count-label{font-size:11px;color:var(--muted);border:1px solid #d8e0e3;padding:1px 7px;border-radius:4px}.school-filters{display:flex;gap:8px;margin:19px 0}.school-filters button{background:#fff;border:1px solid var(--line);border-radius:6px;padding:7px 17px;font-size:13px;min-height:37px}.school-filters button[aria-pressed=true]{background:var(--teal);border-color:var(--teal);color:#fff}.school-cards{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;align-items:start}.school-card{border:1px solid var(--line);border-radius:9px;background:#fff;overflow:hidden;scroll-margin-top:25px}.school-card-top{padding:20px 23px 17px;border-bottom:1px solid #e6ebee;display:flex;justify-content:space-between;gap:12px}.school-name{display:flex;gap:12px;align-items:center}.school-emblem{display:block;width:48px;height:48px;object-fit:contain;flex-shrink:0}.school-name{min-width:0}.school-name>div{min-width:0}.school-date{flex-shrink:0}.school-name h3{font-size:17px;font-weight:650}.school-name p{font-size:10px;letter-spacing:1px;color:var(--muted);line-height:1.6}.school-date{text-align:right}.school-date strong{font-size:17px;font-weight:600;font-variant-numeric:tabular-nums}.school-date small{display:block;font-size:11px;color:var(--muted)}.department-list{padding:3px 23px 10px}.department-row{display:grid;grid-template-columns:44px minmax(0,1fr);gap:11px;align-items:start;padding:11px 0;border-bottom:1px solid #edf0f2}.department-row:last-child{border-bottom:0}.category{background:#f1f5f5;color:#566d6f;font-size:11px;line-height:1.6;text-align:center;border-radius:4px;padding:3px 4px;margin-top:2px}.department-row h4{font-size:14px;font-weight:550}.department-row p{font-size:12px;color:var(--muted);line-height:1.65;margin-top:3px}.department-row .confirmed{color:#267062}.school-source{padding:12px 23px;background:#fafbfc;border-top:1px solid #edf0f2;font-size:11px;color:var(--muted);line-height:1.8}.school-source a{color:#326963;text-underline-offset:3px}.source-details{margin-top:6px}.source-details summary{cursor:pointer;color:#456861;font-size:12px;min-height:28px;display:list-item;align-content:center}.source-details p{padding-top:5px}.source-pill{display:inline-block;margin-top:5px;padding:1px 6px;background:#eef4f2;color:#466b62;border-radius:3px}.source-pill.pending{background:#f3efe8;color:#7c6446}footer{margin-top:34px;padding:25px 0 35px;border-top:1px solid #dbe2e5;display:flex;gap:24px;justify-content:space-between;color:var(--muted);font-size:11px}footer strong{color:var(--ink);font-size:14px}footer span{margin-left:14px}footer p{text-align:right;line-height:1.8}.noscript{padding:30px}.month-mode .day{min-height:91px}.month-mode .event{padding-top:4px;padding-bottom:4px}
@media(min-width:1450px){.header-inner,main{max-width:1430px}.calendar-layout{grid-template-columns:minmax(0,1fr) 315px}.day{min-height:139px}.event{font-size:13px;padding:7px}.day-detail{padding:28px}}
@media(max-width:1100px){main,.header-inner{padding-left:24px;padding-right:24px}.calendar-layout{grid-template-columns:minmax(0,1fr) 250px}.calendar-main{padding:20px 16px 14px}.day-detail{padding:22px 18px}.event{font-size:11px;padding:5px 2px}.day{padding-left:3px;padding-right:3px}.same-day-marker{display:none}.legend{gap:12px}.intro{padding:34px 0}.school-date strong{font-size:15px}.school-card-top,.department-list,.school-source{padding-left:18px;padding-right:18px}}
@media(max-width:900px){.calendar-layout{grid-template-columns:minmax(0,1fr)}.day-detail{border-left:0;border-top:1px solid var(--line);display:grid;grid-template-columns:1fr 1fr;column-gap:22px}.detail-header{grid-column:1/-1;display:flex;align-items:center;gap:18px;flex-wrap:wrap}.detail-date{margin:0}.detail-date strong{font-size:31px}.conflict-note{grid-column:1/-1;margin:12px 0}.detail-school{padding:13px 0}.detail-school:first-of-type{border-top:1px solid #dfe5e4;padding-top:13px}.detail-bottom{grid-column:1/-1;margin-top:2px}.event{font-size:13px;padding:6px}.day{min-height:127px}.school-cards{gap:14px}.school-card-top{flex-wrap:wrap}.school-date{text-align:left;padding-left:52px}.school-date small{display:inline;margin-left:8px}}
@media(max-width:600px){html{scroll-padding-top:15px}.header-inner{min-height:74px;padding:0 18px;gap:12px}.brand-name{font-size:16px;letter-spacing:1px}.brand-logo{width:100px;height:67px}.brand{gap:10px}.header-inner nav{display:none}main{padding:0 14px}.intro{padding:29px 3px 26px;display:block}.intro-aside{display:none}.eyebrow{font-size:10px;letter-spacing:1.5px}h1{font-size:27px;letter-spacing:-1px}.intro-description{font-size:13px}.workspace{border-radius:9px}.workspace-top{padding:15px 13px;display:block}.workspace-top>div:first-child{gap:8px}.workspace-top h2{font-size:17px}.view-switch{margin-top:13px;display:inline-flex}.view-switch button{font-size:12px;padding:5px 13px;min-height:34px}.calendar-main{padding:17px 9px 13px}.calendar-toolbar{padding:0 3px}.calendar-toolbar h3{font-size:17px}.year-label{font-size:12px}.legend{gap:12px 14px;padding:0 3px;margin:12px 0 15px;font-size:11px}.legend>span{gap:4px}.legend>span:before{width:5px;height:5px}.weekday{font-size:11px}.day{min-height:119px;padding:7px 2px 5px}.day-header{margin:0 3px 7px;flex-wrap:wrap;gap:1px}.day-number{font-size:13px;line-height:20px}.month-label{font-size:9px}.event{font-size:11px;line-height:1.5;padding:7px 1px;border-left-width:2px;text-align:center;white-space:normal}.calendar-note{font-size:11px;gap:6px;line-height:1.75;padding:0 2px;margin-top:12px}.day-detail{padding:18px 17px;column-gap:16px}.detail-header{gap:14px}.detail-eyebrow{font-size:10px}.detail-date strong{font-size:29px}.detail-date span{font-size:12px}.detail-school h4{font-size:15px}.detail-school p{font-size:11px}.detail-school a{font-size:12px}.conflict-note{font-size:11px;padding:10px;gap:7px}.detail-bottom{font-size:10px}.section-heading{display:block}.section-heading>p{font-size:12px;margin-top:5px;padding-left:29px}.section-heading h2{font-size:18px}.school-section{padding-top:29px}.school-filters{gap:6px;margin:15px 0;flex-wrap:wrap}.school-filters button{font-size:12px;padding:7px 12px}.school-cards{grid-template-columns:1fr}.school-card-top{flex-wrap:nowrap;padding:18px 17px 15px}.school-date{text-align:right;padding-left:0}.school-date small{display:block;margin-left:0}.school-name h3{font-size:16px}.school-name p{font-size:9px}.school-emblem{width:40px;height:40px}.school-name{gap:9px}.school-date strong{font-size:14px}.school-date small{font-size:10px}.department-list{padding-left:18px;padding-right:18px}.school-source{padding-left:18px;padding-right:18px}.department-row h4{font-size:14px}footer{display:block;padding:22px 2px 30px;margin-top:27px}footer p{text-align:left;margin-top:10px}.month-mode .day{min-height:82px}.month-mode .event{font-size:10px;padding:4px 1px}.month-mode .day-number{font-size:12px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{transition:none!important}}

/* Each subject occupies its own row, with separate group headings. */
.subject-group{margin:9px 0 13px}.source-details .subject-group-label{padding:0;margin:0 0 5px;font-size:12px;font-weight:650;color:var(--ink)}.subject-list{list-style:none;padding:0;margin:0}.subject-row{display:grid;grid-template-columns:100px minmax(0,1fr);gap:10px;padding:6px 0;border-bottom:1px solid #edf0f2;font-size:12px;line-height:1.65;color:var(--muted)}.subject-row:last-child{border-bottom:0}.subject-time{white-space:nowrap;font-variant-numeric:tabular-nums}.subject-name{color:var(--ink)}
