:root{--navy:#0f2347;--blue:#2563eb;--muted:#607089;--line:#e0e7f0;--bg:#f3f7fc;--white:#fff;color-scheme:light}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:105px}body{margin:0;background:var(--bg);color:var(--navy);font-family:Inter,"Segoe UI",Arial,sans-serif;line-height:1.6}a{color:inherit;text-decoration:none}button,input{font:inherit}button,a,input{ -webkit-tap-highlight-color:transparent}button{cursor:pointer}button:focus-visible,a:focus-visible,input:focus-visible{outline:3px solid #71a7ff;outline-offset:4px}.site-header{min-height:90px;padding:18px max(5vw,calc((100vw - 1180px)/2));background:#fff;display:flex;justify-content:space-between;align-items:center;gap:24px;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:10}.brand{display:flex;gap:12px;align-items:center;font-size:14px;letter-spacing:1px;font-weight:600;white-space:nowrap}.brand small{display:block;color:var(--muted);font-size:9px;letter-spacing:1.7px;margin-top:2px}.logo{display:block;flex-shrink:0;width:48px;height:48px;object-fit:contain}.site-header nav{display:flex;gap:27px;font-size:13px;font-weight:600}.site-header nav a:hover{color:var(--blue)}main{max-width:1180px;width:90%;margin:auto}.hero{margin-top:32px;background:var(--navy);color:#fff;border-radius:24px;display:grid;grid-template-columns:1.1fr 1fr;gap:45px;padding:48px;position:relative;overflow:hidden}.hero:before{content:"";position:absolute;width:380px;height:380px;border:1px solid #ffffff0a;border-radius:50%;top:-180px;left:280px;pointer-events:none}.eyebrow{font-size:10px;font-weight:750;letter-spacing:2px;margin:0 0 16px}.hero .eyebrow{color:#a8c7ff}h1{font-size:clamp(38px,4.4vw,60px);line-height:1.1;letter-spacing:-2.5px;font-weight:700;margin:20px 0}h2{font-size:32px;line-height:1.2;letter-spacing:-1px;margin:0 0 12px}h3{line-height:1.4}.intro{font-size:15px;color:#bfd0e9;max-width:390px;margin-bottom:26px}.primary{display:inline-flex;gap:34px;align-items:center;background:var(--blue);padding:13px 21px;border-radius:9px;font-size:13px;font-weight:650}.primary:hover{background:#3672f5}.primary span{font-size:20px}.hero-foot{display:flex;align-items:center;gap:8px;font-size:11px;color:#b4c6e0;margin-top:35px}.small-dot{width:6px;height:6px;border-radius:50%;background:#78a9ff}.today{align-self:center;border-radius:16px;background:#fff;color:var(--navy);padding:26px 28px;box-shadow:0 20px 40px #06132c30}.today-top{display:flex;align-items:center;justify-content:space-between;font-size:10px;letter-spacing:1.5px;font-weight:700;color:var(--muted);margin-bottom:17px}.live{background:#eff5ff;color:var(--blue);padding:3px 9px;border-radius:5px;letter-spacing:0}.today h2{font-size:26px;margin-bottom:3px}.date{font-size:12px;color:var(--muted);margin:0 0 18px}.today-item{border-top:1px solid var(--line);padding:14px 0}.today-item time{font-size:11px;color:var(--blue);font-weight:700}.today-item h3{font-size:14px;margin:4px 0}.today-item p{margin:0;color:var(--muted);font-size:11px}.today-link{border-top:1px solid var(--line);padding-top:16px;display:flex;justify-content:space-between;font-size:11px;font-weight:700;color:var(--blue)}.overview{display:grid;grid-template-columns:repeat(4,1fr);padding:25px 0;border-bottom:1px solid var(--line);margin:0 20px}.overview div{display:flex;align-items:center;justify-content:center;gap:12px;border-right:1px solid var(--line)}.overview div:last-child{border:none}.overview b{font-size:25px;letter-spacing:-1px}.overview span{font-size:12px;color:var(--muted)}.section{padding:52px 0 10px}.section-heading{display:flex;justify-content:space-between;gap:25px;align-items:end;margin-bottom:26px}.section-heading p:not(.eyebrow){font-size:13px;color:var(--muted);margin:0}.blue{color:var(--blue)}.search input{background:white;border:1px solid var(--line);border-radius:9px;padding:12px 16px;width:290px;font-size:12px;color:var(--navy)}.filters{display:flex;gap:8px;overflow-x:auto;padding:3px 3px 10px}.filters button{white-space:nowrap;border:1px solid var(--line);background:#fff;color:var(--muted);padding:9px 19px;border-radius:8px;font-size:12px;font-weight:600}.filters button[aria-pressed=true]{background:var(--navy);color:#fff;border-color:var(--navy)}.result-count{font-size:11px;color:var(--muted);margin:6px 0 24px}.day-group{display:grid;grid-template-columns:105px 1fr;gap:20px;margin-bottom:23px}.day-title{font-size:14px;margin:17px 0}.day-title small{display:block;font-size:10px;font-weight:400;color:var(--muted);margin-top:2px}.day-cards{display:grid;gap:11px}.course{display:grid;grid-template-columns:115px 1fr 100px 70px;gap:15px;align-items:center;background:#fff;border:1px solid var(--line);border-radius:12px;padding:20px 24px}.course-time{font-size:13px;font-weight:700;border-right:1px solid var(--line);align-self:stretch;display:flex;flex-direction:column;justify-content:center}.course-time small{font-size:10px;font-weight:400;color:var(--muted)}.course h3{font-size:14px;margin:0 0 5px}.course-meta{font-size:10px;color:var(--muted)}.room{justify-self:start;background:#eff4fb;color:#405978;border-radius:6px;padding:5px 9px;font-size:11px;white-space:nowrap}.detail{border:0;background:transparent;color:var(--blue);font-size:11px;font-weight:700;padding:9px 0}.detail:hover{text-decoration:underline}.empty{border:1px dashed #c1d0e4;background:#ffffff90;padding:28px;text-align:center;border-radius:12px;font-size:13px;color:var(--muted)}.info-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}.info-card{padding:26px;border:1px solid var(--line);background:#fff;border-radius:14px}.tile-icon{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:8px;color:var(--blue);background:#eef4ff;font-size:12px;font-weight:700}.info-card h3{font-size:18px;margin:16px 0 22px}.info-card p{font-size:12px;color:var(--muted);margin:6px 0}.info-card p.empty-title{font-size:12px;font-weight:600;color:var(--navy)}.memory{display:grid;grid-template-columns:1fr 1fr;gap:45px;align-items:center;padding-bottom:60px}.memory>div>p:not(.eyebrow){font-size:13px;color:var(--muted)}.photo-empty{min-height:205px;border:1px dashed #b9c9e0;background:#eaf0f9;border-radius:16px;text-align:center;display:flex;flex-direction:column;justify-content:center;padding:24px}.photo-empty span{font-size:48px;line-height:1;font-weight:800;letter-spacing:-3px;color:#adc0df;margin-bottom:20px}.photo-empty b{font-size:13px}.photo-empty p{margin:4px 0 0}footer{background:#fff;border-top:1px solid var(--line);padding:28px max(5vw,calc((100vw - 1180px)/2));display:flex;justify-content:space-between;align-items:center;gap:20px}footer p{font-size:11px;color:var(--muted);text-align:right}dialog{border:0;border-radius:18px;padding:28px;width:min(520px,90vw);color:var(--navy);box-shadow:0 30px 100px #0f234730}dialog::backdrop{background:#06162db0;backdrop-filter:blur(3px)}.dialog-top{display:flex;justify-content:space-between;align-items:center}.dialog-top .eyebrow{margin:0}.dialog-top button{border:0;background:var(--bg);border-radius:7px;width:34px;height:34px;color:var(--navy);font-size:24px}dialog h2{font-size:25px;margin:20px 0}dialog dl{margin-bottom:0}dialog dt{font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:1px;margin-top:15px}dialog dd{margin:3px 0 0;font-size:14px;white-space:pre-line}.skip{position:absolute;left:12px;top:-100px;background:#fff;padding:12px;z-index:30}.skip:focus{top:12px}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}
@media(max-width:900px){.hero{padding:32px;gap:28px}.site-header nav{gap:16px;font-size:12px}.course{grid-template-columns:95px 1fr 85px;gap:12px;padding:17px}.detail{grid-column:3;grid-row:2;padding:0;text-align:left}.room{grid-column:3;grid-row:1}.day-group{grid-template-columns:75px 1fr;gap:12px}.search input{width:245px}.course-meta{font-size:9px}.overview{margin:0}.overview div{gap:8px}.overview span{font-size:11px}.info-card{padding:20px}}
@media(max-width:650px){html{scroll-padding-top:126px}.site-header{padding:13px 5%;display:block}.brand{font-size:12px}.brand small{font-size:8px}.logo{width:39px;height:39px}.site-header nav{margin-top:12px;justify-content:space-between;gap:10px;font-size:11px}.hero{grid-template-columns:1fr;padding:29px 23px;border-radius:18px;margin-top:20px;gap:27px}h1{font-size:45px;margin-top:15px}.hero .eyebrow{font-size:8px;letter-spacing:1.4px}.intro{font-size:13px}.hero-foot{margin-top:24px;font-size:10px}.today{padding:22px;width:100%}.overview{padding:22px 0;gap:0}.overview div{flex-direction:column;gap:0}.overview b{font-size:23px}.overview span{font-size:10px}.section{padding-top:36px}.section-heading{display:block;margin-bottom:18px}h2{font-size:27px}.section-heading p:not(.eyebrow){font-size:12px}.search{display:block;margin-top:20px}.search input{width:100%;font-size:13px}.filters button{padding:8px 15px}.day-group{display:block;margin-bottom:22px}.day-title{margin:0 0 10px}.day-title small{display:inline;margin-left:8px}.course{grid-template-columns:86px 1fr;padding:16px;gap:12px}.course h3{font-size:13px}.course-time{font-size:12px;grid-row:1 / 3}.room{grid-column:2;grid-row:2;width:fit-content}.detail{grid-column:2;grid-row:3;text-align:right;font-size:12px;padding:7px 0}.course-meta{font-size:10px}.info-grid{grid-template-columns:1fr}.info-card h3{margin:12px 0}.memory{grid-template-columns:1fr;gap:20px;padding-bottom:35px}.photo-empty{min-height:190px}footer{align-items:start;flex-direction:column;gap:10px}footer p{text-align:left;margin:0;font-size:10px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
[hidden]{display:none!important}#load-status{background:#fff1ed;color:#9c241b;border:1px solid #efc2b8;border-radius:9px;padding:14px;margin:22px 0;font-size:13px}.public-post{border-top:1px solid var(--line);padding:17px 0}.public-post:last-child{padding-bottom:0}.public-post h4{font-size:14px;line-height:1.5;margin:0 0 7px;overflow-wrap:anywhere}.info-card p.deadline{font-size:11px;color:#2354ad;background:#f0f5ff;padding:6px 8px;border-radius:5px}.info-card p.overdue{color:#7a5b1e;background:#fff6df}.content-link{display:block;color:var(--blue);font-size:11px;font-weight:600;margin-top:10px;overflow-wrap:anywhere}.post-detail summary{font-size:11px;color:var(--blue);cursor:pointer}.post-body{white-space:pre-wrap;overflow-wrap:anywhere}.gallery-list{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;grid-column:1 / -1}.gallery-card{background:white;border:1px solid var(--line);border-radius:14px;overflow:hidden}.gallery-card img{width:100%;height:auto;object-fit:contain;display:block}.gallery-copy{padding:18px}.gallery-copy h3{font-size:16px;margin:0 0 6px}.gallery-copy p{font-size:12px;color:var(--muted);margin:5px 0}.hero h1{max-width:480px}.info-card{min-width:0}footer a:hover{color:var(--blue)}
@media(max-width:650px){.gallery-list{grid-template-columns:1fr}.gallery-card img{height:auto}}

.gallery-photo{display:block;width:100%;padding:0;border:0;background:#f3f7fc;cursor:zoom-in}.gallery-photo:focus-visible{outline:3px solid #2563eb;outline-offset:-3px}.gallery-list{align-items:start}.photo-open{overflow:hidden}#photo-viewer{width:min(1000px,94vw);max-height:94vh;padding:18px;overflow:auto}#photo-viewer .dialog-top{gap:18px;margin-bottom:14px}#photo-viewer-title{font-size:18px;line-height:1.4;margin:0;overflow-wrap:anywhere}#photo-viewer .dialog-top button{flex-shrink:0}#photo-viewer-image{display:block;width:100%;height:auto;max-height:75vh;object-fit:contain}#photo-viewer .content-link{font-size:13px}

.gallery-moment{grid-column:1/-1}.moment-photos{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-items:start;gap:14px;padding:0 18px 18px}.moment-photos .gallery-photo{border-radius:8px;overflow:hidden}.photo-viewer-nav{display:flex;align-items:center;justify-content:center;gap:18px;margin-top:12px}.photo-viewer-nav button{border:1px solid var(--line);border-radius:7px;background:var(--bg);color:var(--navy);padding:8px 12px;font-size:12px}.photo-viewer-nav button:disabled{opacity:.4;cursor:default}#photo-counter{font-size:12px}#photo-viewer-image{max-height:65vh}@media(max-width:650px){.moment-photos{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;padding:0 12px 12px}}@media(max-width:420px){.moment-photos{grid-template-columns:1fr}.photo-viewer-nav{gap:8px}}

/* Subtle academic ornaments: static, decorative, and behind the content. */
.campus-page{
  background-color:var(--bg);
  background-image:url('/assets/academic-lines.svg'),radial-gradient(ellipse at 50% 0, #eaf1fc 0, #f3f7fc 65%);
  background-position:center 90px,center top;
  background-size:1600px 1300px,100% 1100px;
  background-repeat:repeat-y,no-repeat;
}
.campus-page .hero{background-image:linear-gradient(125deg,#0f2347 45%,#142e56);isolation:isolate}
.campus-page .hero::after{content:"";position:absolute;right:-95px;top:-180px;width:450px;height:450px;border:1px solid #9bbcff24;border-radius:50%;box-shadow:0 0 0 38px #9bbcff09,0 0 0 76px #9bbcff06;pointer-events:none;z-index:-1}
.campus-page .hero::before{width:270px;height:270px;top:auto;bottom:-205px;left:18%;border-color:#9bbcff26;box-shadow:0 0 0 25px #9bbcff08;z-index:-1}
@media(min-width:1600px){.campus-page{background-size:100% 1300px,100% 1100px}}
@media(max-width:650px){.campus-page{background-size:850px 850px,100% 900px;background-position:center 110px,center top}.campus-page .hero::after{width:300px;height:300px;top:-160px;right:-155px}}
@media print{.campus-page{background:#fff}.campus-page .hero::before,.campus-page .hero::after{display:none}}

.task-photos{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:8px;margin:10px 0}.task-photos .gallery-photo{border:1px solid var(--line);border-radius:8px;overflow:hidden;min-width:0}.task-photos img{display:block;width:100%;height:auto;object-fit:contain}.task-photos .gallery-photo:only-child{grid-column:1/-1}.info-card .task-no-deadline{font-size:11px;color:var(--muted)}.info-card .task-photo-count{font-size:11px;margin-top:12px}

.past-tasks{border-top:1px solid var(--line);margin-top:20px;padding-top:16px}.past-tasks>summary{cursor:pointer;color:var(--muted);font-size:12px;font-weight:650;line-height:1.6}.past-tasks>summary:hover{color:var(--blue)}.past-tasks>summary:focus-visible{outline:3px solid #71a7ff;outline-offset:4px;border-radius:3px}.info-card .archive-note{font-size:11px;margin:10px 0 14px}.past-tasks .public-post h4{color:#405978}

.practicum-schedule{margin:28px 0}.practicum-schedule>h3{font-size:18px;margin:0 0 6px}.practicum-note{font-size:12px;color:var(--muted);margin:0 0 16px}.practicum-schedule .course{margin:12px 0;grid-template-columns:115px 1fr 100px 120px}.meeting-date{font-size:12px;font-weight:650;color:var(--blue);margin:4px 0}.meeting-title{font-size:12px;color:var(--muted);margin:4px 0}.meeting-history-item{padding:14px 0;border-bottom:1px solid var(--line);white-space:normal}.meeting-history-item strong{font-size:13px}.meeting-history-item p{font-size:12px;margin:4px 0}.meeting-history-item small{font-size:11px;color:var(--muted)}#detail-dialog{max-height:90vh;overflow:auto}.practicum-schedule .room{white-space:normal;overflow-wrap:anywhere}@media(max-width:900px){.practicum-schedule .course{grid-template-columns:95px 1fr 110px}}@media(max-width:650px){.practicum-schedule .course{grid-template-columns:86px 1fr}.practicum-schedule .detail{grid-column:2;grid-row:3}.practicum-schedule .room{grid-column:2;grid-row:2}}

/* Academic hero: a balanced title, introduction, and agenda type scale. */
.hero-copy{min-width:0;align-self:center}
.hero h1{font-size:clamp(32px,3.2vw,42px);line-height:1.2;letter-spacing:-1px;margin:14px 0 18px;max-width:480px;text-wrap:balance}
.hero .intro{font-size:16px;line-height:1.75;color:#d2def0;max-width:460px;margin:0 0 24px}
.hero .eyebrow{font-size:11px;line-height:1.6;letter-spacing:1.5px;margin-bottom:14px}
.hero .primary{font-size:14px;gap:26px}
.hero .hero-foot{font-size:12px;line-height:1.6;margin-top:28px}
.hero .today-top{font-size:11px;letter-spacing:1.2px}
.hero .today h2{font-size:26px;line-height:1.3;letter-spacing:-.5px}
.hero .date,.hero .today-link{font-size:13px}
.hero .today-item time,.hero .today-item p{font-size:12px;line-height:1.6}
.hero .today-item h3{font-size:15px;line-height:1.5;margin:5px 0}
@media(max-width:650px){.hero h1{font-size:32px;letter-spacing:-.7px;margin:12px 0 16px}.hero .intro{font-size:16px;line-height:1.7}.hero .eyebrow{font-size:10px;letter-spacing:1.1px}.hero .hero-foot{font-size:12px;margin-top:24px}}
