:root{
  --navy:#1F3A68; --navy-deep:#16294b; --brown:#5C3A21; --brown-soft:#EEF2F9; --brown-edge:#7A4A2A; --brown-fill:#7A4A2A;
  --bg:#F3F7FC; --surface:#ffffff; --sky:#DCE8F5; --text:#26303F; --muted:#5b6678;
  --border:#cfd9e8; --link:#1F3A68; --focus:#5C3A21; --btn-bg:#ffffff; --btn-text:#1F3A68;
  --primary-bg:#1F3A68; --primary-text:#ffffff; --off:#8A94A6; --shadow:0 1px 3px rgba(31,58,104,.12);
}
@media (prefers-color-scheme:dark){:root{
  --bg:#0f1829; --surface:#17233a; --sky:#1f3050; --text:#e4eaf4; --muted:#a3afc4;
  --border:#2c3e5f; --link:#9cc0f0; --focus:#EEF2F9; --brown:#7A4A2A; --brown-fill:#7A4A2A; --btn-bg:#17233a; --btn-text:#c7dcf8;
  --primary-bg:#7A4A2A; --primary-text:#ffffff; --off:#7b869b; --shadow:none;
}}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;background:var(--bg);color:var(--text);font:1.0625rem/1.65 Georgia,"Times New Roman",serif}
a{color:var(--link)}
:focus-visible{outline:3px solid var(--focus);outline-offset:2px}
.vh{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.skip{position:absolute;left:-999px;top:0;background:#fff;color:#000;padding:.5rem 1rem;z-index:10}
.skip:focus{left:0}
header.banner{background:linear-gradient(135deg,var(--navy-deep),var(--navy));color:#fff;border-bottom:5px solid var(--brown-edge)}
.wrap{max-width:1160px;margin:0 auto;padding:0 1rem}
.banner .wrap{padding-top:2rem;padding-bottom:1.75rem}
.org{margin:0;color:var(--brown-soft);letter-spacing:.08em;text-transform:uppercase;font:600 .8rem/1.4 system-ui,sans-serif}
.banner h1{margin:.3rem 0 .2rem;font-size:clamp(1.9rem,5vw,2.8rem);line-height:1.15}
.banner .course{margin:0;font-size:1.15rem;color:#e6eefb}
.meta{margin:1rem 0 0;padding:0;list-style:none;display:flex;flex-wrap:wrap;gap:.35rem 1.5rem;font:.95rem/1.4 system-ui,sans-serif;color:#dbe6f8}
.meta strong{color:#fff}
nav.jump{background:var(--surface);border-bottom:1px solid var(--border)}
nav.jump .wrap{display:flex;gap:.4rem 1.25rem;padding-top:.6rem;padding-bottom:.6rem;font:.95rem system-ui,sans-serif;flex-wrap:wrap}
nav.jump .links{display:flex;flex-wrap:wrap;gap:.4rem 1.25rem}
nav.jump .menu-btn{display:none}
@media (max-width:720px){
nav.jump.js .wrap{display:block;padding-top:.3rem;padding-bottom:.3rem}
nav.jump.js .menu-btn{display:flex;align-items:center;justify-content:space-between;width:100%;min-height:44px;padding:.3rem .2rem;border:0;background:none;color:var(--link);font:600 .95rem system-ui,sans-serif;cursor:pointer}
nav.jump .menu-btn .dots{font-size:1.4rem;line-height:1;letter-spacing:.05em;color:var(--brown)}
nav.jump.js .links{display:none;position:absolute;left:0;right:0;top:100%;z-index:20;flex-direction:column;background:var(--surface);border-bottom:3px solid var(--brown);box-shadow:0 8px 16px rgba(0,0,0,.18)}
nav.jump.js.open .links{display:flex}
nav.jump.js .links{max-height:calc(100vh - 3.6rem);max-height:calc(100dvh - 3.6rem);overflow-y:auto;overscroll-behavior:contain}
nav.jump.js .links a{display:flex;align-items:center;min-height:44px;padding:.4rem 1rem;border-top:1px solid var(--border);text-decoration:none}
nav.jump.js .links a:hover{background:var(--sky)}
}
main{padding:1.5rem 0 3rem}
.intro{max-width:46rem;margin:0 0 .5rem}
h2{margin:2.2rem 0 .3rem;color:var(--navy);font-size:1.6rem;border-left:6px solid var(--brown);padding-left:.7rem}
@media (prefers-color-scheme:dark){h2{color:#c7dcf8}}
.sec-sub{margin:0 0 1.1rem;color:var(--muted)}
.grid{display:grid;gap:1.1rem;grid-template-columns:repeat(auto-fill,minmax(310px,1fr))}
.card{background:var(--surface);border:1px solid var(--border);border-top:4px solid var(--navy);border-radius:8px;overflow:hidden;display:flex;flex-direction:column;box-shadow:var(--shadow)}
.card.soon{border-top-color:var(--brown);border-style:dashed;border-top-style:solid}
.thumb{display:block;background:var(--sky);aspect-ratio:600/338}
.thumb img{display:block;width:100%;height:auto}
.thumb.ph{display:flex;align-items:center;justify-content:center;color:var(--muted);font:600 1rem system-ui,sans-serif}
.body{padding:.9rem 1rem 1.1rem;display:flex;flex-direction:column;flex:1}
.num{margin:0;color:var(--brown);font:700 .8rem/1.4 system-ui,sans-serif;letter-spacing:.06em;text-transform:uppercase}
.card h3{margin:.1rem 0 .4rem;font-size:1.2rem;line-height:1.3;color:var(--text)}
.learn{margin:0 0 .7rem;font-size:.95rem}
.contacts{list-style:none;margin:0 0 .7rem;padding:0;display:flex;flex-wrap:wrap;gap:.35rem;font:.82rem system-ui,sans-serif}
.contacts li{display:inline-flex;align-items:center;gap:.35rem;background:var(--sky);border-radius:999px;padding:.15rem .65rem .15rem .2rem}
.contacts .k{display:inline-grid;place-items:center;width:1.3rem;height:1.3rem;border-radius:50%;background:var(--navy);color:#fff;font-weight:700;font-size:.72rem}
@media (prefers-color-scheme:dark){.contacts .k{background:var(--brown-fill);color:#fff}}
details{margin:0 0 .9rem;font-size:.9rem}
summary{cursor:pointer;color:var(--link);font-family:system-ui,sans-serif;font-size:.88rem}
details ul{margin:.5rem 0 0;padding-left:1.1rem}
details li{margin:.25rem 0}
.btns{margin-top:auto;display:grid;grid-template-columns:repeat(3,1fr);gap:.5rem}
.btn{display:inline-flex;align-items:center;justify-content:center;text-align:center;min-height:44px;padding:.4rem .4rem;border:1.5px solid var(--navy);border-radius:6px;background:var(--btn-bg);color:var(--btn-text);text-decoration:none;font:600 .92rem system-ui,sans-serif}
@media (prefers-color-scheme:dark){.btn{border-color:var(--brown)}}
.btn small{font-weight:500;opacity:.75}
.btn:hover{background:var(--sky)}
.btn.primary{background:var(--primary-bg);color:var(--primary-text);border-color:var(--primary-bg)}
.btn.primary:hover{filter:brightness(1.12)}
.btn.practice,.btn.off.practice{grid-column:1/-1;border-style:solid;border-color:var(--brown);border-width:2px}
.btn.off{font-size:.8rem;border:1.5px dashed var(--off);color:var(--muted);background:transparent;font-weight:500}
footer{border-top:4px solid var(--brown-edge);background:var(--navy-deep);color:#cdd9ee;font:.9rem/1.6 system-ui,sans-serif}
footer .wrap{padding-top:1.2rem;padding-bottom:1.2rem}
footer p{margin:.2rem 0}
.ov-grid{display:grid;gap:1.1rem;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));margin-top:1rem}
.ov-card{background:var(--surface);border:1px solid var(--border);border-top:4px solid var(--navy);border-radius:8px;padding:1rem 1.1rem 1.1rem;box-shadow:var(--shadow)}
.ov-card.wide{grid-column:1/-1}
.ov-card h3{margin:0 0 .5rem;font-size:1.15rem;color:var(--text)}
.ov-card p{margin:.4rem 0}
.ov-card ul,.ov-card ol{margin:.4rem 0 0;padding-left:1.2rem}
.ov-card li{margin:.3rem 0}
.ov-card dl{margin:.4rem 0 0}
.ov-card dt{font-weight:700;margin-top:.5rem}
.ov-card dd{margin:0 0 0 0}
.sakai{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem 1rem;justify-content:space-between;background:var(--sky);border-left:5px solid var(--brown);border-radius:6px;padding:.5rem .8rem;margin:0 0 .9rem;font:.9rem/1.45 system-ui,sans-serif}
.sakai p{margin:0!important;flex:1 1 20rem}
.sakai-link{font-weight:700;white-space:nowrap}
.disclaimer{background:var(--sky);border-bottom:1px solid var(--brown)}
.disclaimer .sakai{border-radius:0;margin:0 auto;border-left:0;padding:.8rem 1rem;background:none}
.banner .lecturer{margin:.35rem 0 0;color:var(--brown-soft);font:600 1rem/1.4 system-ui,sans-serif}
.ov-card>h2{margin-top:1.2rem}
.ov-card .intro{max-width:none;margin:.4rem 0}
.ov-sub+.ov-sub{margin-top:1.25rem;padding-top:1.1rem;border-top:1px solid var(--border)}
.ov-sub h3{font-size:1.15rem;color:var(--navy)}
.ov-sub h4{margin:.8rem 0 .2rem;font:700 1rem Georgia,serif}
@media (prefers-color-scheme:dark){.ov-sub h3{color:#c7dcf8}}
.ov-two{display:grid;gap:0 2rem;grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}
.ov-ref{width:100%;border-collapse:collapse;font:.9rem/1.4 system-ui,sans-serif;margin-top:.5rem}
.ov-ref th,.ov-ref td{text-align:left;padding:.3rem .5rem;border-bottom:1px solid var(--border);vertical-align:top}
.ov-ref th{color:var(--muted);font-weight:600}
@media (max-width:480px){.ov-grid{grid-template-columns:1fr}}
@media (max-width:480px){.grid{grid-template-columns:1fr}}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
.contact-list{list-style:none;margin:.4rem 0 0;padding:0;font-family:system-ui,sans-serif;font-size:.95rem}
.contact-list li{margin:.3rem 0;overflow-wrap:anywhere}
.contact-list span{display:inline-block;min-width:4.5rem;color:var(--muted);font-weight:600}
footer a{color:var(--brown-soft)}
@media (prefers-color-scheme:dark){nav.jump .menu-btn .dots,.num{color:var(--muted)}}
.badge{display:inline-block;background:var(--brown-fill);color:#fff;border-radius:999px;padding:.05rem .6rem;font:700 .78rem/1.5 system-ui,sans-serif;letter-spacing:.05em;text-transform:uppercase;vertical-align:middle}
.num .badge{margin-left:.3rem}
nav.jump .links .badge{margin-left:.5rem}

section[aria-labelledby]{scroll-margin-top:.3rem}
#home,#about,#research,#publications,#teaching,#students,#cv,#contact{scroll-margin-top:.3rem}
.banner .wrap{padding-top:2.2rem;padding-bottom:2rem}
.quick{margin-top:1.1rem;grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}
.qcard{display:flex;flex-direction:column;gap:.2rem;padding:.8rem 1rem;background:var(--surface);border:1px solid var(--border);border-top:4px solid var(--brown);border-radius:8px;text-decoration:none;color:var(--text);box-shadow:var(--shadow);min-height:44px}
.qcard strong{color:var(--link);font-size:1.1rem}
.qcard span{font:.9rem/1.4 system-ui,sans-serif;color:var(--muted)}
.qcard:hover{background:var(--sky)}
.ov-card.placeholder{border-style:dashed;border-top-style:solid;border-top-color:var(--brown);max-width:46rem}
.lvl-nav{display:flex;flex-wrap:wrap;gap:.5rem;margin:.2rem 0 1rem;font:.92rem system-ui,sans-serif}
.lvl-nav a{display:inline-flex;align-items:center;min-height:44px;padding:.3rem .9rem;border:1.5px solid var(--navy);border-radius:999px;background:var(--btn-bg);color:var(--btn-text);text-decoration:none;font-weight:600}
.lvl-nav a:hover{background:var(--sky)}
.lvl-nav a.off{border-style:dashed;border-color:var(--off);color:var(--muted);font-weight:500}
.lvl-nav.sub a{min-height:40px;font-weight:500;border-radius:6px}
.level{margin-top:1.4rem;padding:1rem 1rem 1.2rem;background:var(--surface);border:1px solid var(--border);border-top:5px solid var(--navy);border-radius:10px;scroll-margin-top:3.5rem}
@media (prefers-color-scheme:dark){.level{background:#13203a}}
.level .disclaimer{margin:0 0 1rem;border:1px solid var(--brown);border-radius:6px}
h3.lvl{margin:.2rem 0 .6rem;font-size:1.5rem;color:var(--navy)}
.lvl-sub{font:600 .85rem system-ui,sans-serif;color:var(--muted);letter-spacing:.06em;text-transform:uppercase;margin-left:.4rem}
@media (prefers-color-scheme:dark){h3.lvl{color:#c7dcf8}}
h3.sub2{margin:2rem 0 .3rem;color:var(--navy);font-size:1.3rem;border-left:5px solid var(--brown);padding-left:.6rem}
@media (prefers-color-scheme:dark){h3.sub2{color:#c7dcf8}}
h4{font-size:1.2rem}
.card h4{margin:.1rem 0 .4rem;font-size:1.2rem;line-height:1.3;color:var(--text)}
.ov-card h4{margin:0 0 .5rem;font-size:1.15rem;color:var(--text)}
.ov-card>h4{color:var(--navy)}
.ov-sub h4{margin:0 0 .5rem;font:700 1.1rem Georgia,serif;color:var(--navy)}
@media (prefers-color-scheme:dark){.ov-sub h4,.ov-card>h4{color:#c7dcf8}}
.levels{margin-top:1.1rem}
#mechanics+.sec-sub+.grid,#thermal+.sec-sub+.grid{grid-template-columns:repeat(auto-fill,minmax(250px,1fr))}
.card .learn{font-size:.9rem}
.card .btn.practice{grid-column:1/-1}
.card h4{font-size:1.1rem}
.hero-title{margin:0 0 .3rem;font-size:1.6rem;color:var(--navy);line-height:1.2}
@media (prefers-color-scheme:dark){.hero-title{color:#c7dcf8}}
.statement{font-weight:400;font-size:1.1rem}
.hero-role{margin:.4rem 0 0}
.refs{margin:.4rem 0 0}.refs li{margin:.5rem 0}
.level-card{min-height:7rem}
@media (max-width:480px){.level{padding:.8rem .7rem 1rem}.quick{grid-template-columns:1fr 1fr}.qcard span{font-size:.82rem}}
.tl,.chips{margin:.4rem 0 0}
.tl li{margin:.5rem 0}
.chips{list-style:none;padding:0;display:flex;flex-wrap:wrap;gap:.4rem;font:.9rem/1.4 system-ui,sans-serif}
.chips li{margin:0;background:var(--sky);border-left:4px solid var(--brown);border-radius:6px;padding:.3rem .65rem}
#about .ov-grid,#research .ov-grid{margin-top:1.1rem}
#about>.ov-card .intro,#research>.ov-card .intro{max-width:46rem}
.ov-card ul.chips{padding-left:0}
.banner .areas{margin:.8rem 0 0;max-width:46rem;color:#e6eefb;font:600 .95rem/1.5 system-ui,sans-serif}
.hero{display:grid;gap:1.2rem;grid-template-columns:200px 1fr;align-items:start;margin-top:.8rem}
.photo{display:block;width:100%;height:auto;aspect-ratio:4/5;object-fit:cover;border:1px solid var(--border);border-radius:10px;background:var(--sky);box-shadow:var(--shadow)}
.statement{margin:0 0 .6rem;font-size:1.25rem;line-height:1.45;color:var(--navy);font-weight:700}
@media (prefers-color-scheme:dark){.statement{color:#c7dcf8}}
.hero .intro{max-width:none}
.links-row{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:1rem}
.links-row .btn{padding:.4rem 1rem}
.btn.dl{display:inline-flex}
.note{font:.9rem/1.45 system-ui,sans-serif;color:var(--muted)}
@media (max-width:600px){.hero{grid-template-columns:1fr}.photo{max-width:200px}}
.home-link{color:inherit;text-decoration:none}
.home-link:hover{text-decoration:underline}
.banner.slim .wrap{padding-top:1.1rem;padding-bottom:1rem}
.banner.slim h1{font-size:clamp(1.5rem,4vw,2rem);margin:.2rem 0 .1rem}
.banner.slim .course{font-size:1rem}
nav.jump a[aria-current="page"]{font-weight:700;color:var(--navy);text-decoration-thickness:3px;text-decoration-color:var(--brown)}
@media (prefers-color-scheme:dark){nav.jump a[aria-current="page"]{color:#fff}}
.hub{margin-top:1.4rem;grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}
.crumb{margin:0 0 .3rem;font:.9rem system-ui,sans-serif;color:var(--muted)}
.tree{margin:.4rem 0 1.2rem}
.tree ul{list-style:none;margin:.2rem 0 0;padding-left:1.2rem;border-left:2px solid var(--brown)}
.tree>ul{padding-left:0;border-left:0}
.tree li{margin:.35rem 0;font:.98rem/1.5 system-ui,sans-serif}
.tree a{display:inline-block;padding:.15rem 0}
section.l1{margin-top:1rem}
main .level{margin-top:.8rem}
@media (max-width:480px){.hub{grid-template-columns:1fr}}

.tag{font:600 .78rem system-ui,sans-serif;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);margin-left:.4rem}
.primary-card{border-top-width:6px;max-width:46rem}
.primary-card .body{padding:1.2rem 1.3rem 1.4rem}
.primary-card h4{font-size:1.9rem;margin:.1rem 0 0}
.pc-sub{margin:.1rem 0 .6rem;font-size:1.2rem;color:var(--muted)}
.primary-card .learn{font-size:1.02rem}
.secondary-card{border-top-width:4px;max-width:30rem}
.secondary-card .body{padding:.8rem 1rem 1rem}
.arrows{list-style:none;margin:.3rem 0 0;padding:0;display:grid;gap:.4rem;font:1rem/1.45 system-ui,sans-serif;max-width:34rem}
.arrows li{background:var(--surface);border:1px solid var(--border);border-left:4px solid var(--brown);border-radius:6px;padding:.4rem .7rem}
.fold{margin:1rem 0;background:var(--surface);border:1px solid var(--border);border-left:5px solid var(--brown);border-radius:8px;padding:.2rem 1rem;font-size:1rem}
.fold>summary{min-height:44px;display:flex;align-items:center;font:700 1.05rem system-ui,sans-serif;color:var(--navy)}
@media (prefers-color-scheme:dark){.fold>summary{color:#c7dcf8}}
.fold[open]>summary{border-bottom:1px solid var(--border);margin-bottom:.8rem}
.fold>section,.fold>.ov-card,.fold>.ov-grid{margin-bottom:1rem}

/* Stage 2: homepage landing */
.eyebrow{margin:0;font:700 .85rem/1.2 system-ui,sans-serif;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.role{margin:.2rem 0 .8rem;font-size:1.05rem;color:var(--muted)}
.ext-links{margin:.9rem 0 0;display:flex;flex-wrap:wrap;gap:.4rem 1.1rem;font:.95rem system-ui,sans-serif}
.paths{margin-top:1.8rem;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:1rem}
.path{display:flex;flex-direction:column;gap:.45rem;padding:1.1rem 1.1rem 1.2rem;background:var(--surface);border:1px solid var(--border);border-top:5px solid var(--brown);border-radius:8px;text-decoration:none;color:inherit;min-height:44px}
.path .num{font:700 .8rem system-ui,sans-serif;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.path strong{font-size:1.2rem;line-height:1.3;color:var(--link)}
.path span:not(.num):not(.go){font:.92rem/1.5 system-ui,sans-serif;color:var(--muted)}
.path .go{margin-top:auto;padding-top:.4rem;font:600 .95rem system-ui,sans-serif;color:var(--link)}
.path:hover{background:var(--sky)}
.home-sec{margin-top:2.4rem}
.sel{list-style:none;padding:0}
.sel li{display:grid;grid-template-columns:5.2rem 1fr;gap:.8rem;padding:.7rem 0;border-top:1px solid var(--border)}
.sel .yr{font:700 .9rem system-ui,sans-serif;color:var(--muted)}
.more{font-weight:600}
.shortcuts{grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:1rem}
.affil{margin:1.6rem 0 0;font:.9rem system-ui,sans-serif;color:var(--muted)}
@media (max-width:480px){.sel li{grid-template-columns:1fr;gap:.1rem}}

/* Stage 3: research */
.crumb-nav{margin:.2rem 0 1rem;font:.95rem system-ui,sans-serif}
.lead-card h4{font-size:1.35rem}
.area .num{margin:0 0 .2rem;font:700 .85rem system-ui,sans-serif;letter-spacing:.08em;color:var(--brown)}
.status{margin:0 0 .3rem;display:inline-block;font:700 .75rem system-ui,sans-serif;letter-spacing:.06em;text-transform:uppercase;padding:.15rem .5rem;border-radius:4px;background:var(--sky);border-left:4px solid var(--brown);color:var(--text,inherit)}
.status.past{border-left-color:var(--off);opacity:.85}

/* Stage 4: PHYS 143 portal */
.lvl-nav.sticky{position:sticky;top:var(--nav-h,3.4rem);z-index:5;background:var(--bg,var(--surface));padding:.4rem 0;margin:0 0 1rem;flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch}
.lvl-nav.sticky a{white-space:nowrap;flex:none}
.tbl-wrap{margin:.6rem 0 1.4rem}
table.lectures{width:100%;border-collapse:collapse;font:.95rem/1.5 system-ui,sans-serif}
table.lectures th,table.lectures td{padding:.7rem .6rem;border-top:1px solid var(--border);text-align:left;vertical-align:top}
table.lectures thead th{font-size:.8rem;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);border-top:0}
table.lectures .ln{font-size:1.1rem;color:var(--brown);width:3.5rem}
table.lectures .topic strong{font-size:1.02rem}
table.lectures .learn{margin:.25rem 0 .3rem;color:var(--muted)}
table.lectures .state{margin-left:.5rem;font:700 .76rem system-ui,sans-serif;letter-spacing:.06em;text-transform:uppercase;padding:.1rem .45rem;border-radius:4px;background:var(--sky);border-left:3px solid var(--off)}
table.lectures .state.ok{border-left-color:var(--brown)}
table.lectures .primary-cell{white-space:nowrap}
table.lectures .more-cell{line-height:1.9}
table.lectures .muted{color:var(--muted)}
table.lectures tr.soon{opacity:.85}
table.lectures details summary{cursor:pointer;color:var(--link)}
@media (max-width:760px){
table.lectures thead{position:absolute;left:-9999px}
table.lectures tr{display:block;padding:.8rem 0;border-top:1px solid var(--border)}
table.lectures th,table.lectures td{display:block;border:0;padding:.15rem 0;width:auto}
table.lectures .ln{display:inline-block}
table.lectures .primary-cell{margin:.4rem 0}
}
#mechanics,#thermal,#practice-qs,#course-info,#course-structure,table.lectures tr{scroll-margin-top:.8rem}

/* Stage 5 */
.pub-filter{display:flex;flex-wrap:wrap;gap:.5rem;margin:.6rem 0}
.pub-filter .btn{padding:.3rem .9rem;cursor:pointer;font:600 .92rem system-ui,sans-serif}
.pub-filter .btn[aria-pressed="true"]{background:var(--primary-bg);color:var(--primary-text);border-color:var(--primary-bg)}
[hidden]{display:none!important}
.foot-grid{display:grid;grid-template-columns:1.3fr 1fr 1fr;gap:1.2rem 2rem;align-items:start}
.foot-grid p{margin:.15rem 0}
.foot-name{font-weight:700;font-size:1.05rem}
.foot-grid ul{list-style:none;margin:0;padding:0}
.foot-grid li{margin:.2rem 0}
.foot-grid nav ul{columns:2}
.foot-note{margin:1.2rem 0 0;font-size:.88rem;opacity:.85}
.foot-ext.plain{list-style:none;padding:0;margin:.3rem 0 0}
.foot-ext.plain li{margin:.35rem 0}
.contact-list span{display:inline-block;min-width:4.5rem;color:var(--muted)}
@media (max-width:640px){.foot-grid{grid-template-columns:1fr}}
.ov-grid+.ov-card{margin-top:1rem}.contact-list{padding-left:0;list-style:none}

h3.h4{font-size:1.15rem;margin:0 0 .5rem;color:var(--text)}
.ov-card>h3.h4{color:var(--navy)}
.lead-card h3.h4{font-size:1.35rem}
@media (prefers-color-scheme:dark){.ov-card>h3.h4{color:#c7dcf8}.area .num,table.lectures .ln,.status{color:#e0b999}}
table.lectures tr.soon{opacity:1}
:root{--off:#6b7585}
@media (prefers-color-scheme:dark){:root{--off:#8d99ad}}
.foot-grid li a,.foot-grid p a{display:inline-block;padding:.2rem 0;min-height:24px}

/* Navigation: primary links first, utility links set apart */
@media (min-width:721px){
nav.jump .links{width:100%;align-items:center}
nav.jump .links a.util{font-size:.88rem;opacity:.9}
nav.jump .links a.util.first{margin-left:auto}
}
@media (max-width:720px){nav.jump.js .links a.util{font-size:.92rem;background:var(--bg)}nav.jump.js .links a.util.first{border-top:3px solid var(--border)}}
nav.jump a[aria-current]{font-weight:700}

/* Home: selected research */
.selected{margin-top:.8rem;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:1.4rem 2.2rem}
.sel-card{border-top:2px solid var(--border);padding-top:.7rem}
.sel-card h3.h4{margin:.15rem 0 .3rem;font-size:1.15rem;color:var(--navy)}
.sel-card p{margin:.2rem 0}
@media (prefers-color-scheme:dark){.sel-card h3.h4{color:#c7dcf8}}
@media (min-width:700px){.ov-grid.areas{grid-template-columns:repeat(2,1fr)}}

/* PHYS 143 weekly programme and lecture pages */
.week-group{margin:1.2rem 0 1.8rem}
h4.grp{margin:.2rem 0 0;font-size:1.15rem;color:var(--navy)}
@media (prefers-color-scheme:dark){h4.grp{color:#c7dcf8}}
ul.weeks{list-style:none;margin:.4rem 0 0;padding:0}
.week{display:grid;grid-template-columns:5.2rem 1fr auto;grid-template-areas:"wk wt wl" ". ws .";gap:.1rem 1rem;padding:.75rem 0;border-top:1px solid var(--border);font:1rem/1.5 system-ui,sans-serif;align-items:baseline}
.week .wk{grid-area:wk;font-weight:700;color:var(--brown)}
.week .wt{grid-area:wt;font-weight:600}
.week .wt a{font-size:1.05rem}
.week .ws{grid-area:ws;color:var(--muted);font-size:.93rem}
.week .wl{grid-area:wl;font-size:.95rem}
.week .state{margin-left:.6rem;font:700 .76rem system-ui,sans-serif;letter-spacing:.06em;text-transform:uppercase;padding:.1rem .45rem;border-radius:4px;background:var(--sky);border-left:3px solid var(--off)}
.week .state.ok{border-left-color:var(--brown)}
.week.soon .wt a{color:var(--muted)}
@media (max-width:600px){.week{grid-template-columns:1fr;grid-template-areas:"wk" "wt" "ws" "wl"}}
.lecture-actions{margin:1rem 0}
.fold .ov-card ul.res{margin:.4rem 0 0}
.fold .ov-card ul.res li{margin:.4rem 0}
.pager{display:flex;justify-content:space-between;align-items:center;gap:1rem;margin:2.2rem 0 0;padding-top:1rem;border-top:1px solid var(--border);font:600 1rem system-ui,sans-serif}
.pager a{display:inline-flex;align-items:center;min-height:44px;padding:.3rem .2rem}
.pager .toc{text-align:center}
@media (max-width:520px){.pager{font-size:.92rem;gap:.4rem}}
.pager a{white-space:nowrap}@media (max-width:520px){.pager{font-size:.85rem}}
@media (prefers-color-scheme:dark){.week .wk{color:#e0b999}}

/* ---- per-lecture practice quiz (assets/practice.js) ---- */
:root{--ok:#14663a;--ok-bg:#e3f4ea;--bad:#9b1c1c;--bad-bg:#fbe6e6}
@media (prefers-color-scheme:dark){:root{--ok:#8fe0b0;--ok-bg:#12372a;--bad:#ffb4b4;--bad-bg:#44181c}}
#quiz-app .row{display:flex;flex-wrap:wrap;gap:.6rem;margin-top:1rem}
#quiz-app .progress{font:600 .88rem system-ui,sans-serif;color:var(--muted);display:flex;justify-content:space-between;gap:1rem;margin:0 0 .4rem}
#quiz-app .bar{height:8px;background:var(--sky);border-radius:99px;overflow:hidden;margin-bottom:1rem}
#quiz-app .bar span{display:block;height:100%;background:var(--brown);width:0}
#quiz-app .qtype{display:inline-block;font:700 .75rem system-ui,sans-serif;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:0 0 .3rem}
#quiz-app .qtext{font-size:1.1rem;line-height:1.5;margin:0 0 .9rem;font-weight:700}
#quiz-app .opts{list-style:none;margin:0;padding:0;display:grid;gap:.6rem}
#quiz-app .opt{display:flex;gap:.7rem;align-items:flex-start;width:100%;text-align:left;border:1.5px solid var(--border);border-radius:8px;padding:.65rem .8rem;min-height:48px;background:var(--bg);color:var(--text);cursor:pointer;font:1rem/1.45 Georgia,serif}
#quiz-app .opt:hover:not([disabled]){border-color:var(--navy);background:var(--sky)}
@media (prefers-color-scheme:dark){#quiz-app .opt:hover:not([disabled]){border-color:var(--brown)}}
#quiz-app .opt .k{flex:none;display:inline-grid;place-items:center;width:1.7rem;height:1.7rem;border-radius:50%;background:var(--navy);color:#fff;font:700 .85rem system-ui,sans-serif}
@media (prefers-color-scheme:dark){#quiz-app .opt .k{background:var(--brown-fill);color:#fff}}
#quiz-app .opt .txt{flex:1}
#quiz-app .opt .tag{flex:none;font:700 .8rem system-ui,sans-serif;white-space:nowrap}
#quiz-app .opt[disabled]{cursor:default}
#quiz-app .opt.correct{border-color:var(--ok);background:var(--ok-bg);border-width:2.5px}
#quiz-app .opt.wrong{border-color:var(--bad);background:var(--bad-bg);border-style:dashed;border-width:2.5px}
#quiz-app .opt.correct .tag{color:var(--ok)}
#quiz-app .opt.wrong .tag{color:var(--bad)}
#quiz-app .opt.dim{opacity:.7}
#quiz-app .fb{margin-top:1rem;border-radius:8px;padding:.7rem .9rem;font:.97rem/1.55 Georgia,serif}
#quiz-app .fb.ok{background:var(--ok-bg);border-left:6px solid var(--ok)}
#quiz-app .fb.no{background:var(--bad-bg);border-left:6px solid var(--bad)}
#quiz-app .fb .head{font:700 1rem system-ui,sans-serif;margin:0 0 .3rem}
#quiz-app .fb.ok .head{color:var(--ok)}
#quiz-app .fb.no .head{color:var(--bad)}
#quiz-app .fb p{margin:.3rem 0}
#quiz-app .fb .ref{font:.85rem system-ui,sans-serif;color:var(--muted)}
#quiz-app .score{font-size:2.2rem;font-weight:700;margin:.2rem 0;color:var(--navy)}
@media (prefers-color-scheme:dark){#quiz-app .score{color:#c7dcf8}}
#quiz-app .review{margin:1rem 0 0;padding-left:1.2rem}
#quiz-app .review li{margin:.3rem 0}
#quiz-app .score{margin:.2rem 0}
#quiz-app .row{margin-top:1rem}

@media (max-width:420px){.pager{gap:.2rem;font-size:.8rem}.pager a{padding:.3rem 0}}

/* ---- lecture page quick-access buttons ---- */
.lecture-buttons{display:grid;grid-template-columns:repeat(4,1fr);gap:.75rem;margin:1.1rem 0 1.4rem}
.lecture-buttons .btn{min-height:64px;flex-direction:column;gap:.1rem;font-size:1.02rem;padding:.6rem .8rem;text-align:center}
.lecture-buttons .btn small{font:600 .78rem system-ui,sans-serif}
.btn.off{border-style:dashed;color:var(--muted);background:transparent;cursor:not-allowed;display:inline-flex;align-items:center;justify-content:center}
@media (max-width:700px){.lecture-buttons{grid-template-columns:1fr 1fr}.lecture-buttons .btn{min-height:72px}}
.week .wl{display:flex;flex-wrap:wrap;gap:.2rem .9rem}

.paths .path.sec{grid-column:1/-1;border-top-width:2px;flex-direction:row;flex-wrap:wrap;align-items:baseline;gap:.3rem 1.5rem;padding:.8rem 1.1rem}.paths .path.sec .path-links{display:flex;flex-wrap:wrap;gap:.2rem 1.2rem;list-style:none;margin:0;padding:0}
@media (min-width:760px){.paths{grid-template-columns:repeat(3,1fr)}}

@media (min-width:760px){.paths{grid-template-columns:repeat(2,1fr)}}
.path .path-go{margin:auto 0 0;padding-top:.4rem}
.status{margin:.1rem 0 .4rem}

dl.tech{margin:0;display:grid;grid-template-columns:max-content 1fr;gap:.45rem 1rem}dl.tech dt{font-weight:700}dl.tech dd{margin:0}@media (max-width:560px){dl.tech{grid-template-columns:1fr;gap:.1rem}dl.tech dd{margin-bottom:.5rem}}

/* ---- profile-card home ---- */
.profile{display:grid;grid-template-columns:230px 1fr;gap:2rem;align-items:start;margin-top:1.4rem}
.profile-side{position:sticky;top:calc(var(--nav-h,3.4rem) + 1rem)}
.profile-side .photo{max-width:230px}
.profile-side .name{margin:.9rem 0 0;font:700 1.25rem/1.25 Georgia,serif;color:var(--navy)}
@media (prefers-color-scheme:dark){.profile-side .name{color:#c7dcf8}}
.profile-side .role{margin:.2rem 0 .8rem;font-size:1rem}
.side-links{list-style:none;margin:0;padding:0;display:grid;gap:.1rem;font:.95rem system-ui,sans-serif}
.side-links a{display:inline-flex;align-items:center;min-height:36px}
.profile-main .statement{margin-top:0}
.profile-main .paths{margin-top:1.4rem}
.path-links{margin:.2rem 0 0;padding-left:1.1rem;font:.95rem/1.7 system-ui,sans-serif}
.path-links a{display:inline-block;padding:.1rem 0}
.profile-main .shortcuts{grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}
@media (max-width:760px){.profile{grid-template-columns:1fr;gap:1.2rem}.profile-side{position:static}.profile-side .photo{max-width:180px}}
@media (min-width:760px){.paths{grid-template-columns:repeat(2,1fr)}}

.home-links{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:1.4rem 1.6rem;margin-top:1.8rem}
.home-links .hl h3{margin:0 0 .3rem;font-size:1.1rem}
.home-links .hl ul{list-style:none;margin:0;padding:0;font:.98rem system-ui,sans-serif}
.home-links .hl a{display:inline-flex;align-items:center;min-height:36px}
@media (min-width:900px){.home-links{grid-template-columns:repeat(4,1fr)}}
.home-links .hl a{line-height:1.35;padding:.25rem 0}.home-links .hl h3{line-height:1.3}
/* dropdown menu */
nav.jump .dd{position:relative;display:inline-flex;align-items:center}
nav.jump .dd-btn{display:inline-flex;align-items:center;justify-content:center;min-width:28px;min-height:44px;padding:0;border:0;background:none;color:var(--brown);font-size:.85rem;cursor:pointer}
nav.jump .sub{display:none;position:absolute;left:0;top:100%;z-index:30;min-width:15rem;margin:0;padding:.3rem 0;list-style:none;background:var(--surface);border:1px solid var(--border);border-top:3px solid var(--brown);border-radius:0 0 6px 6px;box-shadow:0 8px 16px rgba(0,0,0,.18)}
nav.jump .dd:hover .sub,nav.jump .dd.open .sub,nav.jump .dd:has(:focus-visible) .sub{display:block}
nav.jump .sub a{display:flex;align-items:center;min-height:40px;padding:.3rem 1rem;text-decoration:none;white-space:nowrap}
nav.jump .sub a:hover{background:var(--sky)}
@media (max-width:720px){
nav.jump.js .dd{display:flex;flex-wrap:wrap;border-top:1px solid var(--border)}
nav.jump.js .dd>a:first-child{flex:1;border-top:0}
nav.jump.js .dd-btn{min-width:48px}
nav.jump.js .sub{position:static;width:100%;box-shadow:none;border:0;border-radius:0;background:var(--sky)}
nav.jump.js .dd:hover .sub{display:none}
nav.jump.js .dd.open .sub{display:block}
nav.jump.js .sub a{padding-left:2rem;border-top:1px solid var(--border);white-space:normal}
}
/* currently working on */
.working{margin-top:1.8rem}
.working h2{margin:0 0 .6rem;font-size:1.3rem}
.working-cols{display:grid;grid-template-columns:1fr;gap:1.2rem 2rem}
@media (min-width:700px){.working-cols{grid-template-columns:1fr 1fr}}
.working h3{margin:0 0 .3rem;font-size:1.05rem}
.working ul{margin:0;padding-left:1.1rem}
.working li{margin:.3rem 0}
.highlights{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.9rem;margin-top:1.4rem;align-items:stretch}
@media (max-width:359px){.highlights{grid-template-columns:1fr}}
@media (max-width:700px){.highlights .ov-card{padding:.8rem .8rem .9rem}.highlights .h4{font-size:1rem}.highlights .btn{width:100%;font-size:.85rem}}
.highlights .h4{margin:0 0 .4rem;font-size:1.15rem}
.highlights .btn{padding:.4rem 1rem}
.profile-side .role+.role{margin-top:-.6rem}
.highlights .ov-card{display:flex;flex-direction:column}.highlights .ov-card p:last-child{margin-top:auto;padding-top:.4rem}
.fig{margin:.8rem 0 .4rem}
.fig img{display:block;max-width:100%;height:auto;border:1px solid var(--border);border-radius:6px;background:#fff}
.fig figcaption{margin-top:.3rem;font:.85rem/1.4 system-ui,sans-serif;color:var(--muted)}
/* phone tap targets */
@media (max-width:720px){
.working li a,.working h3 a,.foot-grid li a,.side-links a,.week .wt a,.week .wl a,.sakai-link,ul.refs li>a{display:inline-flex;align-items:center;min-height:44px}
.foot-grid li{margin:0}
.home-link{display:inline-block;padding:.3rem 0}
.working li{margin:0}
}
@media (max-width:720px){.foot-ext a{display:inline-flex;align-items:center;min-height:44px}.foot-grid li a,.side-links a{padding-inline:.4rem;margin-inline:-.4rem}}
@media (max-width:720px){.ext-links a{display:inline-flex;align-items:center;min-height:44px;padding-inline:.2rem}}
@media (max-width:720px){footer li a{display:inline-flex;align-items:center;min-height:44px}}
/* phone: compact profile row */
@media (max-width:760px){
.profile{margin-top:.8rem;gap:.9rem}
.profile-side{display:grid;grid-template-columns:120px 1fr;column-gap:1rem;align-content:start;align-items:center}
.profile-side picture{grid-column:1;grid-row:1/span 3;display:block}.profile-side .photo{width:120px;height:120px;max-width:none;object-fit:cover;object-position:center;border-radius:12px}
.profile-side .name,.profile-side .role{grid-column:2;margin:0}
.profile-side .name{font-size:1.2rem;align-self:end}
.profile-side .role+.role{margin-top:0}
.profile-side .role:nth-of-type(2){align-self:start}
.profile-side .side-links{grid-column:1/-1;display:flex;flex-wrap:wrap;gap:0 .9rem;margin:.5rem 0 0;padding:0;list-style:none}
}

/* hero header */
.banner.masthead .wrap{padding-top:1.6rem;padding-bottom:1.5rem}
.banner.masthead h1{margin:0;font-size:clamp(1.1rem,3.6vw,1.4rem);line-height:1.2;letter-spacing:.03em;font-weight:600}
.mast-rule{display:block;height:2px;width:min(100%,24rem);margin:.6rem 0 .8rem;background:linear-gradient(90deg,#F2C9A0,rgba(242,201,160,.15));transform-origin:left}
.banner.masthead .mast-title{margin:0;max-width:none;font:600 clamp(1.4rem,6vw,2.3rem)/1.25 Georgia,serif;color:#fff}
.mast-title span{display:block}
.mast-title .l2{color:#dbe6f8;font-weight:400}
.mast-title strong{font-weight:700;color:#F2C9A0;background:linear-gradient(#F2C9A0,#F2C9A0) left bottom/100% 2px no-repeat;padding-bottom:.08em}
@media (prefers-reduced-motion:no-preference){
.banner.masthead h1{animation:mastUp .7s cubic-bezier(.2,.7,.2,1) both}
.mast-rule{animation:mastRule .9s .25s cubic-bezier(.2,.7,.2,1) both}
.mast-title .l1{animation:mastUp .7s .5s cubic-bezier(.2,.7,.2,1) both}
.mast-title .l2{animation:mastUp .7s .85s cubic-bezier(.2,.7,.2,1) both}
.mast-title strong{animation:mastLine .8s 1.35s ease-out both}
}
@keyframes mastUp{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
@keyframes mastRule{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@keyframes mastLine{from{background-size:0 2px}to{background-size:100% 2px}}
/* impact strip, fusion figure, call to action */
.stats{margin-top:1.6rem}
.stat-list{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.9rem;border-top:2px solid var(--brown-edge);border-bottom:1px solid var(--border);padding:1rem 0}
.stat-list li{display:flex;flex-direction:column;gap:.15rem}
.stat-n{font:700 clamp(1.9rem,6vw,2.6rem)/1 Georgia,serif;color:var(--navy);font-variant-numeric:tabular-nums}
@media (prefers-color-scheme:dark){.stat-n{color:#c7dcf8}}
.stat-l{font:.88rem/1.35 system-ui,sans-serif;color:var(--muted)}
@media (max-width:700px){.stat-list{grid-template-columns:1fr 1fr;gap:1rem .9rem}}
.fuse{display:block;width:100%;height:auto;max-height:84px;margin:0 0 .5rem;overflow:visible}
.fuse .n1,.fuse .n2{fill:var(--navy)}
.fuse .nf{fill:var(--brown-fill)}
.fuse .ring{fill:none;stroke:var(--brown-edge);stroke-width:1.5;opacity:.5}
.fuse .arr{stroke:var(--muted);stroke-width:2;stroke-dasharray:3 4;fill:none}
@media (prefers-color-scheme:dark){.fuse .n1,.fuse .n2{fill:#8fb4ee}.fuse .nf{fill:#d59a66}.fuse .ring{stroke:#d59a66}}
@media (prefers-reduced-motion:no-preference){
.fuse circle{transform-box:fill-box;transform-origin:center}
.fuse .arr{display:none}
.fuse .n1{animation:fuseL 7s ease-in-out infinite}
.fuse .n2{animation:fuseR 7s ease-in-out infinite}
.fuse .nf,.fuse .ring{animation:fuseF 7s ease-in-out infinite}
}
@keyframes fuseL{0%,15%{transform:none;opacity:1}42%{transform:translateX(46px);opacity:1}48%,100%{transform:translateX(46px);opacity:0}}
@keyframes fuseR{0%,15%{transform:none;opacity:1}42%{transform:translateX(-46px);opacity:1}48%,100%{transform:translateX(-46px);opacity:0}}
@keyframes fuseF{0%,42%{transform:scale(.4);opacity:0}52%{transform:scale(1.15);opacity:1}60%,88%{transform:scale(1);opacity:1}100%{transform:scale(1);opacity:0}}
.cta{margin-top:2rem;padding:1.3rem 1.4rem;border-radius:8px;background:linear-gradient(135deg,var(--navy-deep),var(--navy));color:#fff;border-left:6px solid var(--brown-edge)}
.cta h2{margin:0 0 .3rem;font-size:1.4rem;color:#fff;border:0;padding:0}
.cta p{margin:.3rem 0;color:#e6eefb}
.cta .cta-btns{display:flex;flex-wrap:wrap;gap:.7rem;margin-top:.9rem}
.cta .btn{background:#fff;color:var(--navy-deep);border-color:#fff;padding:.4rem 1.2rem}
.cta .btn.alt{background:transparent;color:#fff;border-color:#F2C9A0}
/* gentle reveal (classes are added by site.js only when motion is allowed) */
.rv{transform:translateY(18px);transition:transform .6s ease}
.rv.in{transform:none}
.fuse{max-height:64px}
/* current work and technical portfolio */
.cw-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1.2rem 1.6rem}
@media (max-width:900px){.cw-grid{grid-template-columns:1fr}}
.cw{border-top:2px solid var(--brown-edge);padding-top:.6rem}
.cw h3{margin:0 0 .3rem;font-size:1.1rem}
.cw p{margin:.3rem 0}
.cw p:last-child a{display:inline-flex;align-items:center;min-height:44px}
.working-cols.tech3{grid-template-columns:repeat(3,minmax(0,1fr))}
@media (max-width:900px){.working-cols.tech3{grid-template-columns:1fr}}
.tech-btn{margin:1rem 0 0}.tech-btn .btn{padding:.4rem 1.2rem}
@media (min-width:721px){nav.jump .links{gap:.2rem .9rem}nav.jump .dd-btn{min-width:22px}nav.jump .dd{gap:0}nav.jump .links a.util.first{margin-left:auto}}

.fig-row{display:grid;grid-template-columns:minmax(0,3fr) minmax(0,4fr);gap:1.2rem;align-items:start}
@media (max-width:760px){.fig-row{grid-template-columns:1fr}}
.fig-group{margin:1.4rem 0 0}
.fig-h{margin:0 0 .15rem;font-size:1.08rem;color:var(--navy)}
@media (prefers-color-scheme:dark){.fig-h{color:#c7dcf8}}
.fig-lead{margin:0 0 .2rem}
.fig-group .fig-row{grid-template-columns:repeat(2,minmax(0,1fr))}
.fig-group .fig-row .fig:only-child{max-width:34rem}
@media (max-width:760px){.fig-group .fig-row{grid-template-columns:1fr}}
.fig a.zoom{display:block;cursor:zoom-in}
.zoom-hint{display:inline}
dialog.lightbox{border:0;padding:0;background:transparent;max-width:100vw;max-height:100vh;width:100%;height:100%}
dialog.lightbox::backdrop{background:rgba(10,20,40,.85)}
.lightbox .lb-inner{position:relative;width:100%;height:100%;overflow:auto;padding:3rem .8rem 1rem;box-sizing:border-box;text-align:center}
.lightbox img{max-width:none;width:min(2072px,max(100%,900px));height:auto;background:#fff;border-radius:6px}
.lightbox .lb-close{position:fixed;top:.6rem;right:.8rem;min-width:44px;min-height:44px;padding:.3rem .9rem;border:2px solid #fff;border-radius:6px;background:var(--navy-deep);color:#fff;font:600 1rem system-ui,sans-serif;cursor:pointer}

/* Sticky menu: anchors and focused items stay clear of the pinned bar (--nav-h is set from the bar's height in site.js) */
html{scroll-padding-top:calc(var(--nav-h,3.4rem) + .6rem)}
nav.jump,nav.jump.js{position:sticky;top:0;z-index:40}
nav.jump .menu-close{display:none}
@media (max-width:720px){nav.jump.js .menu-close{display:flex;align-items:center;justify-content:center;gap:.5rem;width:100%;min-height:48px;border:0;border-top:3px solid var(--border);background:var(--bg);color:var(--link);font:600 .92rem system-ui,sans-serif;cursor:pointer}}
nav.jump .dd-btn span{display:inline-block;transition:transform .15s}
nav.jump .dd.open .dd-btn span,nav.jump .dd:hover .dd-btn span{transform:rotate(180deg)}
nav.jump.js.open .menu-btn .dots{font-size:0;letter-spacing:0}
nav.jump.js.open .menu-btn .dots::before{content:"Close \2715";font-size:.95rem;font-weight:600;color:var(--link)}
@media (prefers-reduced-motion:reduce){nav.jump .dd-btn span{transition:none}}
/* Header order: title lines first, the name small beneath (visual order only; the name stays the page h1) */
.banner.masthead .wrap,.banner.slim .wrap{display:flex;flex-direction:column;align-items:flex-start}
.banner.masthead .mast-title{order:1}
.banner.masthead .mast-rule{order:2;margin:.8rem 0 .55rem}
.banner.masthead h1,.banner.slim h1{order:3;margin:0;font:600 clamp(.82rem,2.5vw,.92rem)/1.3 system-ui,sans-serif;letter-spacing:.08em;color:#cdd9ee}
.banner.slim .course{order:1;margin:0 0 .35rem;font:600 clamp(1.05rem,3.8vw,1.4rem)/1.3 Georgia,serif;color:#fff}
.banner.slim h1{order:2}
.banner.masthead h1 .home-link,.banner.slim h1 .home-link{padding:.35rem 0}
/* Upcoming project teaser */
.ov-card.soon{position:relative;border-top:5px solid var(--brown);background:linear-gradient(135deg,var(--surface) 55%,var(--sky))}
.soon-badge{display:inline-flex;align-items:center;gap:.5rem;margin:0 0 .3rem;padding:.2rem .7rem;border-radius:999px;background:var(--navy);color:#fff;font:700 .78rem/1.4 system-ui,sans-serif;letter-spacing:.1em;text-transform:uppercase}
.soon-dot{width:.55rem;height:.55rem;border-radius:50%;background:#F2C9A0}
@media (prefers-reduced-motion:no-preference){.soon-dot{animation:soonPulse 2.2s ease-in-out infinite}}
@keyframes soonPulse{0%,100%{box-shadow:0 0 0 0 rgba(242,201,160,.7)}50%{box-shadow:0 0 0 .4rem rgba(242,201,160,0)}}
.ov-card.soon h4{margin:.2rem 0 0;font-size:1.5rem}
.soon-tag{margin:.1rem 0 .7rem;font-size:1.05rem;font-style:italic;color:var(--muted)}
@media (prefers-color-scheme:dark){.soon-badge{background:#2b4a7c}}
/* Home: slim coming-soon strip */
.home-soon{margin:1.2rem 0}
.soon-strip{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem 1rem;padding:.8rem 1rem;border:1px solid var(--border);border-left:6px solid var(--brown);border-radius:8px;background:linear-gradient(135deg,var(--surface) 60%,var(--sky));color:inherit;text-decoration:none;min-height:44px}
.soon-strip:hover,.soon-strip:focus-visible{border-color:var(--brown)}
.soon-strip .soon-badge{margin:0}
.soon-txt{display:flex;flex-direction:column;flex:1 1 14rem;font:.98rem/1.4 system-ui,sans-serif}
.soon-txt strong{font:700 1.1rem/1.3 Georgia,serif;color:var(--navy)}
.soon-txt span{color:var(--muted)}
.soon-go{font:600 .95rem system-ui,sans-serif;color:var(--link);text-decoration:underline}
@media (prefers-color-scheme:dark){.soon-txt strong{color:#c7dcf8}}
/* Home sections */

.profile-main>.highlights,.profile-main>.working,.profile-main>.home-teaching,.profile-main>.home-academic,.profile-main>.stats,.profile-main>.home-pubs{margin-top:2rem}
.highlights{display:block}
.hl-title{margin:0 0 .8rem}
.hl-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.9rem;align-items:stretch}
.highlights.three .hl-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
@media (max-width:900px){.highlights.three .hl-grid{grid-template-columns:1fr}}
@media (max-width:700px){.highlights .btn{width:100%;text-align:center}}
.hl-grid .ov-card{display:flex;flex-direction:column}.hl-grid .ov-card p:last-child{margin-top:auto;padding-top:.4rem}
.working.technical .ov-card h2{margin-top:0}
.home-teaching .chips{margin:.2rem 0 .8rem;flex-direction:column;gap:.35rem}
.home-teaching .chips li{border-radius:6px}
.stat-list li.stat-text{justify-content:center}
.stat-list li.stat-text .stat-l{font:700 1rem/1.35 Georgia,serif;color:var(--navy)}
@media (prefers-color-scheme:dark){.stat-list li.stat-text .stat-l{color:#c7dcf8}}
.stats .h3{margin:0 0 .6rem}
.home-pubs .refs.sel{list-style:none;padding:0}
.home-pubs .refs.sel li{display:grid;grid-template-columns:5.5rem 1fr;gap:.2rem .8rem;margin:.6rem 0}
.home-pubs .yr{font:700 .9rem system-ui,sans-serif;color:var(--brown)}
@media (max-width:560px){.home-pubs .refs.sel li{grid-template-columns:1fr}}
.home-pubs .more{font-weight:700}
@media (prefers-color-scheme:dark){.home-pubs .yr{color:#F2C9A0}}
/* Home: keep the coming-soon strip low-key */
.home-soon .soon-strip{background:var(--surface);border-left-width:3px;padding:.55rem .85rem;gap:.35rem .8rem}
.home-soon .soon-badge{background:transparent;color:var(--muted);border:1px solid var(--border);padding:.1rem .55rem;font-size:.7rem}
.home-soon .soon-dot{display:none}
.home-soon .soon-txt{font-size:.92rem}
.home-soon .soon-txt strong{font:600 1rem/1.3 system-ui,sans-serif;color:inherit}
.home-soon .soon-go{font-weight:400;font-size:.9rem}
/* Home header: the name stays in the page markup as the h1 for screen readers but is not shown (it appears in the profile block) */
.banner.masthead h1{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
.banner.masthead .mast-rule{margin:.8rem 0 0}
/* Home header: HD monogram badge in the place of the hidden name (site colours) */
.banner.masthead .wrap{display:flex;flex-direction:column;align-items:flex-start}
.banner.masthead .mast-title{order:1}
.banner.masthead .mast-rule{order:2}
.banner.masthead .wrap{position:relative}
.banner.masthead .monogram-container{position:absolute;top:1.6rem;right:1rem;padding:0;display:flex;align-items:center}
@media (max-width:400px){.banner.masthead .monogram-container{top:1.1rem}.monogram{width:36px;height:36px;font-size:.95rem}}
.monogram{width:48px;height:48px;border-radius:50%;background-color:var(--navy-deep);border:2px solid #F2C9A0;color:#F2C9A0;font-family:Georgia,'Playfair Display',serif;font-weight:700;font-size:1.1rem;letter-spacing:1px;display:flex;align-items:center;justify-content:center;text-transform:uppercase;text-decoration:none;box-shadow:0 2px 6px rgba(0,0,0,.15)}
@media (prefers-reduced-motion:no-preference){.monogram{transition:transform .2s ease,border-color .2s ease}}
.monogram:hover{transform:scale(1.05);border-color:#fff}
.monogram:focus-visible{outline:3px solid #fff;outline-offset:3px}
@media (max-width:400px){.monogram{width:36px;height:36px;font-size:.95rem}}
@media (max-width:380px){.monogram{width:32px;height:32px;font-size:.85rem}.banner.masthead .monogram-container{right:.75rem}}
/* Interaction states: hover and keyboard focus on buttons and card links (deep brown and gold) */
@media (prefers-reduced-motion:no-preference){.btn,.soon-strip,.cw,.chips li,.pub-link,.pdf-pair a{transition:background-color .15s,border-color .15s,box-shadow .15s,color .15s}}
.btn:hover{border-color:var(--brown-edge);box-shadow:0 2px 0 var(--brown-edge)}
.btn:active{box-shadow:none;transform:translateY(1px)}
.btn.primary:hover{background:var(--brown-edge);border-color:var(--brown-edge);color:#fff;filter:none}
.btn.off:hover{box-shadow:none;border-color:var(--off)}
.btn:focus-visible,.soon-strip:focus-visible{outline:3px solid var(--focus);outline-offset:3px}
.cta .btn:hover{background:#F2C9A0;border-color:#F2C9A0;color:var(--navy-deep);box-shadow:0 2px 0 rgba(0,0,0,.35)}
.cta .btn.alt:hover{background:rgba(242,201,160,.2);border-color:#F2C9A0;color:#fff}
.cta .btn:focus-visible{outline-color:#fff}
.ov-card a:not(.btn):hover,.cw a:hover,.working a:hover,.home-pubs a:hover,.refs a:hover{color:var(--brown-edge);text-decoration-thickness:2px}
.soon-strip:hover{box-shadow:0 2px 0 var(--brown-edge)}
.ov-card a:not(.btn):focus-visible,.cw a:focus-visible,.working a:focus-visible,.refs a:focus-visible{border-radius:3px}
@media (prefers-color-scheme:dark){
.btn:hover{border-color:#F2C9A0;box-shadow:0 2px 0 #F2C9A0}
.btn.primary:hover{background:#9a6038;border-color:#F2C9A0}
.ov-card a:not(.btn):hover,.cw a:hover,.working a:hover,.home-pubs a:hover,.refs a:hover{color:#F2C9A0}
.soon-strip:hover{box-shadow:0 2px 0 #F2C9A0}
}
/* Publication links and PDF preview/download pairs */
.pub-links{display:inline-flex;flex-wrap:wrap;gap:.4rem;margin-left:.4rem;vertical-align:baseline}
.pub-link{display:inline-flex;align-items:center;min-height:32px;padding:.1rem .6rem;border:1.5px solid var(--brown-edge);border-radius:999px;font:600 .82rem system-ui,sans-serif;text-decoration:none;color:var(--link)}
.pub-link:hover{background:var(--brown-edge);color:#fff}
@media (prefers-color-scheme:dark){.pub-link{border-color:#F2C9A0}.pub-link:hover{background:#F2C9A0;color:#16294b}}
.pdf-pair{display:inline-flex;flex-wrap:wrap;align-items:center;gap:.35rem}
.pdf-pair .pl{margin-right:.1rem}
.pdf-pair a{display:inline-flex;align-items:center;min-height:32px;padding:.05rem .6rem;border:1.5px solid var(--brown-edge);border-radius:6px;font:600 .82rem system-ui,sans-serif;text-decoration:none}
.pdf-pair a:hover{background:var(--brown-edge);color:#fff}
@media (prefers-color-scheme:dark){.pdf-pair a{border-color:#F2C9A0}.pdf-pair a:hover{background:#F2C9A0;color:#16294b}}
.week .wl{display:flex;flex-wrap:wrap;gap:.5rem 1rem;align-items:center}
.outline{margin:0 0 1rem}
.lecture-buttons .res{display:flex;flex-direction:column;gap:.35rem;padding:.55rem .6rem .6rem;border:1px solid var(--border);border-radius:8px;background:var(--surface)}
.res-l{font:700 .95rem system-ui,sans-serif;color:var(--text)}
.res-b{display:grid;grid-template-columns:1fr 1fr;gap:.4rem}
.lecture-buttons .res .btn{min-height:44px;font-size:.92rem;padding:.3rem .4rem;flex-direction:row}
@media (max-width:700px){.lecture-buttons .res .btn{min-height:44px}}
/* Equations (KaTeX, Projects page only) */
details.eqs{margin:.6rem 0 1rem;font-size:1rem}
details.eqs>summary{min-height:44px;display:flex;align-items:center;font:600 .95rem system-ui,sans-serif;color:var(--link)}
.eqs-in{border-left:3px solid var(--brown-edge);padding:.2rem 0 .2rem .9rem}
.eqs-in h5{margin:.3rem 0 .6rem;font:700 1rem system-ui,sans-serif}
.eq-item{margin:0 0 1rem}
.eq{overflow-x:auto;overflow-y:hidden;max-width:100%;padding:.2rem 0;-webkit-overflow-scrolling:touch}
.eq .katex-display{margin:.3rem 0;text-align:left}
.eq .katex-display>.katex{text-align:left}
.eq .katex{font-size:1.08em}
.eq .tex:not(:has(.katex)){font:.85rem ui-monospace,monospace;white-space:pre-wrap}
.eq-text{margin:.15rem 0 0;font-size:.95rem;color:var(--muted,inherit)}
.ov-grid>*,.ov-card,.eqs,.eqs-in,.eq-item{min-width:0}
/* Superheavy page and linked research card */
.eq-red{color:#b3261e}.eq-blue{color:#1d4ed8}
@media (prefers-color-scheme:dark){.eq-red{color:#ff9d92}.eq-blue{color:#9cbcff}}
:root[data-theme="dark"] .eq-red{color:#ff9d92}:root[data-theme="dark"] .eq-blue{color:#9cbcff}
.link-card{position:relative}
.link-card .card-link{text-decoration:none;color:inherit}
.link-card .card-link::after{content:"";position:absolute;inset:0;border-radius:inherit}
.link-card .area-eq{position:relative;z-index:1}
.link-card .area-eq .katex{font-size:.95em}
.link-card .more{margin:.5rem 0 0;font:600 .9rem system-ui,sans-serif;color:var(--link)}
.link-card:hover{border-color:var(--brown-edge);box-shadow:0 2px 0 var(--brown-edge)}
.link-card:hover .more,.link-card:focus-within .more{text-decoration:underline}
.link-card:has(.card-link:focus-visible){outline:3px solid var(--focus);outline-offset:3px}
.link-card .card-link:focus-visible{outline:none}
.steps{list-style:none;margin:.4rem 0 1rem;padding:0;display:grid;gap:.6rem}
.step{border-left:5px solid var(--border);padding:.45rem .8rem;background:var(--surface);border-radius:0 6px 6px 0}
.step-capture{border-left-color:#444}.step-formation{border-left-color:#b3261e}.step-survival{border-left-color:#1d4ed8}
@media (prefers-color-scheme:dark){.step-capture{border-left-color:#bbb}.step-formation{border-left-color:#ff9d92}.step-survival{border-left-color:#9cbcff}}
ul.plain{margin:.4rem 0 1rem;padding-left:1.2rem}ul.plain li{margin:.45rem 0}
.refs p{margin:0}
.area.link-card .card-link{display:inline-block;min-height:44px;line-height:44px;padding:0}
.fig .credit{display:block;margin-top:.2rem;font-size:.85em;opacity:.85}
/* Figures with wrapped text: natural proportions, modest width, never upscaled */
.fig-wrap{display:flow-root;margin:.4rem 0 1rem}
.fig-wrap .fig{width:min(var(--fwp,46%),var(--fw,420px),var(--fmax,440px));margin:.2rem 0 .8rem}
.fig-wrap.fw-right .fig{float:right;margin-left:1.4rem}
.fig-wrap.fw-left .fig{float:left;margin-right:1.4rem}
.fig-wrap .fig img{width:100%;height:auto}
.fig-wrap>p:first-of-type{margin-top:0}
@media (max-width:700px){.fig-wrap .fig,.fig-wrap.fw-right .fig,.fig-wrap.fw-left .fig{float:none;width:100%;max-width:var(--fw,420px);margin:.4rem 0 .8rem}}
.eq-label{margin:.5rem 0 .2rem;font:600 .95rem system-ui,sans-serif;color:var(--muted)}
.link-card .area-eq{overflow-x:auto;max-width:100%}
@media (max-width:900px){.link-card .area-eq .katex{font-size:.8em}}
.fig-pair{display:grid;grid-template-columns:repeat(2,minmax(0,340px));gap:1.2rem 1.6rem;align-items:start;margin:.8rem 0 .2rem}
.fig-pair .fig{margin:0;width:100%}
@media (max-width:700px){.fig-pair{grid-template-columns:minmax(0,1fr)}.fig-pair .fig{max-width:var(--fw,420px)}}
.fig-wrap .fig figcaption{font-size:.8rem}
.fig-solo{margin:1rem 0}.fig-solo .fig{max-width:min(100%,760px);margin:0}
.card-links{margin:.6rem 0 0}.card-links .pub-links{margin-left:0}
.back{margin:1.2rem 0 0;font:600 .95rem system-ui,sans-serif}

/* Previous research: compact cards with a summary panel beneath */
[data-render="research-previous"]{display:grid;grid-template-columns:repeat(var(--n,3),minmax(0,1fr));gap:1rem;align-items:stretch}
.prev{order:var(--i)}
.sum-panel{grid-column:1/-1;order:10;border-left:4px solid var(--brown-edge)}
.sum-panel[hidden]{display:none}
.sum-head{display:flex;justify-content:space-between;gap:1rem;align-items:flex-start}
.sum-head h4{margin:.1rem 0 .3rem}
.sum-close,.sum-btn{font:600 .92rem system-ui,sans-serif;color:var(--link);background:none;border:1.5px solid var(--brown-edge);border-radius:6px;min-height:44px;padding:.2rem .8rem;cursor:pointer}
.sum-btn{border:0;padding:.2rem 0;text-align:left}
.sum-btn:hover,.sum-close:hover{text-decoration:underline}
.sum-btn[aria-expanded="true"] .chev{display:inline-block;transform:rotate(180deg)}
.prev.open{border-color:var(--brown-edge);box-shadow:0 2px 0 var(--brown-edge)}
.prev .more{margin:.4rem 0 0}
.sum-sub{margin:.9rem 0 .2rem;font:700 1rem system-ui,sans-serif}
.prev.link-card{cursor:pointer}
.prev .sum-btn::after{content:"";position:absolute;inset:0}
@media (max-width:900px){[data-render="research-previous"]{grid-template-columns:minmax(0,1fr)}.prev{order:calc(var(--i)*2)}.sum-panel{order:calc(var(--i)*2 + 1)}}
.prev:has(.sum-btn:focus-visible){outline:3px solid var(--focus);outline-offset:3px}.prev .sum-btn:focus-visible{outline:none}

/* figures in project pages, research question cards */
.fig{margin:1.2rem 0 .4rem;max-width:46rem}
.fig img{display:block;width:100%;height:auto;border:1px solid var(--border);border-radius:10px}
.fig figcaption{margin-top:.45rem;font:.85rem/1.45 system-ui,sans-serif;color:var(--muted)}
.ov-card.q .num{margin-bottom:.2rem}

/* Home: hero with research figure, research questions, link cards */
.fh-hero{display:grid;gap:1.2rem;grid-template-columns:1fr}
.fh-title{margin:0 0 .4rem;padding:0;border:0;font-size:clamp(1.6rem,3.4vw,2.2rem);line-height:1.15;color:var(--navy)}
@media (prefers-color-scheme:dark){.fh-title{color:#c7dcf8}}
.fh-sub{margin:0 0 .8rem;font:600 .95rem/1.5 system-ui,sans-serif;color:var(--brown)}
@media (prefers-color-scheme:dark){.fh-sub{color:#e0b999}}
.fh-fig{margin:0}
.fh-fig img{display:block;width:100%;height:auto;border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow)}
.fh-fig figcaption{margin-top:.4rem;font:.85rem/1.45 system-ui,sans-serif;color:var(--muted)}
.fh-research{margin-top:1.6rem;background:var(--surface);border:1px solid var(--border);border-top:5px solid var(--navy);border-radius:10px;padding:.3rem 1.2rem 1rem}
.fh-research h2{margin-top:.9rem}
.fh-questions{list-style:none;margin:.6rem 0 .8rem;padding:0;display:grid;gap:.5rem}
.fh-questions li{border-left:4px solid var(--brown);padding:.15rem 0 .15rem .8rem}
.fh-questions a{text-decoration:none}.fh-questions a:hover{text-decoration:underline}
.fh-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:.9rem;margin-top:1.4rem}
.fh-card{display:flex;flex-direction:column;gap:.2rem;padding:.8rem 1rem;background:var(--surface);border:1px solid var(--border);border-top:4px solid var(--brown);border-radius:8px;text-decoration:none;color:var(--text);box-shadow:var(--shadow)}
.fh-card strong{color:var(--link);font-size:1.05rem}
.fh-card span{font:.9rem/1.4 system-ui,sans-serif;color:var(--muted)}
.fh-card:hover{background:var(--sky)}

/* Home: opening questions */
.fh-curious{list-style:none;margin:0 0 1.4rem;padding:0;display:grid;gap:.5rem}
.fh-curious li{border-left:5px solid var(--brown);padding:.1rem 0 .1rem .9rem}
.fh-curious a{font-size:clamp(1.25rem,2.8vw,1.7rem);line-height:1.25;text-decoration:none;color:var(--navy);font-weight:700}
.fh-curious a:hover{text-decoration:underline}
@media (prefers-color-scheme:dark){.fh-curious a{color:#c7dcf8}}
.fh-hero{margin-top:.2rem}
.fh-kw{margin:.2rem 0 .9rem;font:600 .92rem/1.5 system-ui,sans-serif;color:var(--brown)}
@media (prefers-color-scheme:dark){.fh-kw{color:#e0b999}}
.fh-synth{margin-top:1.6rem;background:var(--surface);border:1px solid var(--border);border-top:5px solid var(--navy);border-radius:10px;padding:.3rem 1.2rem 1rem}
.fh-synth h2{margin-top:.9rem}
.fh-eq{margin:.6rem 0;overflow-x:auto}
ul.rq{margin:.3rem 0 .6rem}

/* Welcome and highlight cards */
.fh-blocks{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:.9rem;margin-top:1.4rem}
.fh-block h3,.fh-block h4{margin:0 0 .6rem;padding-bottom:.35rem;border-bottom:2px solid var(--brown);font-size:1.1rem}
.fh-block ul{margin:.2rem 0 0;padding-left:1.1rem}
.fh-block p{margin:.3rem 0}
.fh-block dt{font-weight:700;margin-top:.5rem}.fh-block dd{margin:0}
.fh-blocks{grid-template-columns:1fr}
.fh-blocks:first-child{margin-top:0}
.fh-hero{margin-bottom:1.6rem}
.fh-hero .fh-curious{margin-bottom:0}
.fh-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.9rem;align-items:stretch}
.fh-row>div{display:flex}.fh-row>div>.fh-block{flex:1}
@media (max-width:700px){.fh-row{grid-template-columns:1fr}}

/* Homepage cards: dark body, blue header band, soft gold border (palette from the homepage checklist) */
.fh-blocks .fh-block,.fh-cards .fh-card,.home-soon .soon-strip{background:#1A2645;color:#D7DDE8;border:1px solid #D6B07C;overflow:hidden;box-shadow:none;padding:0}
.fh-blocks .fh-block h3{margin:0;padding:.55rem 1.1rem;background:#2A3F73;color:#F4F1EA;border:0;font-size:1.05rem}
.fh-blocks .fh-block p,.fh-blocks .fh-block ul{margin-left:1.1rem;margin-right:1.1rem;color:#D7DDE8}
.fh-blocks .fh-block p{margin-top:.7rem}
.fh-blocks .fh-block p:last-child{margin-bottom:1rem}
.fh-blocks .fh-block ul{margin-top:.6rem;margin-bottom:1rem;padding-left:1.1rem}
.fh-blocks .fh-block li{margin:.35rem 0}
.fh-blocks .fh-block a,.home-soon .soon-go{color:#F4F1EA;text-decoration-color:#D6B07C}
.fh-blocks>div{margin-bottom:.9rem}.fh-blocks>.fh-row{margin-bottom:0}
.fh-vision p{font-size:1.05rem}
.fh-cards .fh-card{gap:0}
.fh-cards .fh-card strong{display:block;padding:.55rem 1rem;background:#2A3F73;color:#F4F1EA;font-size:1.02rem}
.fh-cards .fh-card span{display:block;padding:.7rem 1rem .9rem;color:#D7DDE8}
.fh-cards .fh-card:hover{background:#22305a}
.home-soon .soon-strip{padding:.6rem .9rem;margin-top:.9rem}
.home-soon .soon-strip strong{color:#F4F1EA}
.home-soon .soon-strip .soon-txt>span{color:#D7DDE8}
.home-soon .soon-badge{background:#2A3F73;color:#F4F1EA;border-color:#D6B07C}
.home-soon .soon-go{font-weight:700}
.fh-cards{margin-top:.9rem}
.fh-cards{grid-template-columns:repeat(2,minmax(0,1fr))}
@media (min-width:1100px){.fh-cards{grid-template-columns:repeat(4,minmax(0,1fr))}}
@media (max-width:480px){.fh-cards{grid-template-columns:1fr}}
.rq-sub{margin:.4rem 0 .6rem;font-size:1.05rem}
.eq-line{margin:.4rem 0}
.fh-block h4.fh-sub-h{margin:.9rem 1.1rem 0;padding-top:.7rem;border-top:1px solid #2A3F73;color:#F4F1EA;font-size:1.02rem}
.fh-vision p{margin-bottom:0}
.fh-vision ul{margin-top:.4rem}

/* Research page hierarchy and spacing */
.lead-card{margin-bottom:1.6rem}
.lead-card>h3.h4{font-size:1.35rem;line-height:1.3;color:var(--navy);margin-bottom:.7rem}
@media (prefers-color-scheme:dark){.lead-card>h3.h4{color:#c7dcf8}}
.sub-under h3.sub2{font-size:1.1rem;margin:1.6rem 0 .5rem;border-left-width:4px}
ul.tags{margin:.2rem 0 1rem}
h3.sub2+.intro{margin-top:.4rem}

/* ---- Link style: no underline on navigation-type links; clear hover, focus and tap states ---- */
a{transition:color .15s,background-color .15s,box-shadow .15s,transform .15s}
nav.jump a,footer a,.profile-side a,.side-links a,.ext-links a,.crumb a,.crumb-nav a,a.more,.home-soon a,.fh-cards a,.fh-blocks a,.chips a,.lvl-nav a,.sub a,.path-links a,.card-link,.tree a,.pager a,.btn{text-decoration:none}
nav.jump a:hover,footer a:hover,.profile-side a:hover,.side-links a:hover,.ext-links a:hover,.crumb a:hover,.crumb-nav a:hover,a.more:hover,.fh-blocks li a:hover,.tree a:hover,.pager a:hover{background:var(--sky);color:var(--navy);border-radius:4px}
@media (prefers-color-scheme:dark){nav.jump a:hover,footer a:hover,.profile-side a:hover,.side-links a:hover,.ext-links a:hover,.crumb a:hover,.crumb-nav a:hover,a.more:hover,.fh-blocks li a:hover,.tree a:hover,.pager a:hover{background:#2A3F73;color:#F4F1EA}}
nav.jump a[aria-current="page"]{text-decoration:none;border-bottom:3px solid var(--brown-edge)}
.fh-blocks li a,.profile-side a,.side-links a{display:inline-block;padding:.15rem .35rem;margin-left:-.35rem}
.fh-cards .fh-card,.ov-card.link-card,.home-soon .soon-strip{transition:transform .15s,box-shadow .15s,background-color .15s,border-color .15s}
.fh-cards .fh-card:hover,.fh-cards .fh-card:focus-visible,.home-soon .soon-strip:hover,.home-soon .soon-strip:focus-visible,.ov-card.link-card:hover{transform:translateY(-2px);box-shadow:0 6px 14px rgba(0,0,0,.28)}
.fh-cards .fh-card:hover{border-color:#F4F1EA}
.home-soon .soon-strip:hover{background:#22305a}
/* running text keeps a quiet underline, thickened on hover */
.ov-card p a,.intro a,.note a,main li a:not(.btn){text-decoration-thickness:1px;text-underline-offset:.18em;text-decoration-color:currentColor}
.ov-card p a:hover,.intro a:hover,.note a:hover{text-decoration-thickness:2px}
.fh-blocks li a,.fh-blocks p a,.fh-vision a{text-decoration:none}
/* keyboard focus: always visible */
a:focus-visible,button:focus-visible,.btn:focus-visible,summary:focus-visible{outline:3px solid #D6B07C;outline-offset:3px;border-radius:4px}
/* touch: larger targets */
@media (pointer:coarse){
nav.jump .links a,.sub a,footer li a,.profile-side li a,.fh-blocks li a,.crumb a{display:inline-flex;align-items:center;min-height:44px}
.fh-cards .fh-card:hover{transform:none}
}
@media (prefers-reduced-motion:reduce){a,.fh-cards .fh-card,.ov-card.link-card,.home-soon .soon-strip{transition:none}.fh-cards .fh-card:hover,.home-soon .soon-strip:hover,.ov-card.link-card:hover{transform:none}}
.fh-blocks li a,.fh-blocks p a{color:#E3C99D}
.fh-blocks li a:hover{color:#F4F1EA}
/* phone: lecture resource buttons never force the page wider */
.lecture-buttons>*{min-width:0}
.lecture-buttons .btn{overflow-wrap:anywhere}
@media (max-width:700px){.lecture-buttons{grid-template-columns:repeat(2,minmax(0,1fr))}.res-b{grid-template-columns:minmax(0,1fr)}}
/* related pages row at the foot of main pages */
.related{margin:2.2rem 0 0;padding-top:1rem;border-top:1px solid var(--border)}
.related h3{margin:0 0 .5rem;font:700 .8rem system-ui,sans-serif;letter-spacing:.07em;text-transform:uppercase;color:var(--muted)}
.related ul{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:.5rem}
.related a{display:inline-flex;align-items:center;min-height:44px;padding:.3rem .9rem;border:1px solid var(--border);border-radius:999px;background:var(--surface);text-decoration:none;font:.95rem system-ui,sans-serif}
.related a:hover{background:var(--sky);border-color:var(--brown-edge)}
@media (prefers-color-scheme:dark){.related a:hover{background:#2A3F73;color:#F4F1EA}}
.earlier-item{margin-top:1rem}
.earlier-item .status{display:block;margin-bottom:.6rem}
/* framing question under each main section heading */
.sec-q{margin:-.1rem 0 .9rem;font-style:italic;color:var(--muted)}
h3.sub2+.sec-q{margin-top:-.1rem}

/* practice pages: quiet report link and note */
.fb .report{margin:.7rem 0 0;font:.85rem/1.4 system-ui,sans-serif}
.fb .report a{color:var(--muted);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:.18em}
.fb .report a:hover,.fb .report a:focus-visible{color:var(--link);text-decoration-thickness:2px}
.quiz-note{margin:1rem 0 0;max-width:46rem}

/* Header logo: horizontal mark on wide screens, compact mark on phones */
.banner .wrap{position:relative}
.brand-logo{position:absolute;right:1rem;top:50%;transform:translateY(-50%);display:block;line-height:0;border-radius:6px;transition:opacity .15s}
.brand-logo img{display:block;height:56px;width:auto}
.brand-logo:hover{opacity:.85}
.brand-logo:focus-visible{outline:3px solid #D6B07C;outline-offset:4px}
.banner.slim .brand-logo img{height:46px}
@media (min-width:701px){.banner h1,.banner .areas,.banner .course{padding-right:280px}}
@media (max-width:700px){.brand-logo img{height:40px;width:40px}.banner.slim .brand-logo img{height:34px;width:34px}.banner h1{padding-right:56px}}

/* Homepage header: one quiet line under the headline */
.banner.masthead .mast-tag{order:3;margin:0;font:400 .92rem/1.4 Georgia,'Times New Roman',serif;letter-spacing:.02em;color:rgba(244,241,234,.82)}
@media (min-width:701px){.banner.masthead .mast-tag{padding-right:280px}}
@media (max-width:700px){.banner.masthead .mast-tag{font-size:.85rem;padding-right:56px}}

/* PhyAnalytics GH: stand-alone page header and footer */
.banner.standalone .wrap{display:block;padding-top:1.6rem;padding-bottom:1.5rem}
.banner.standalone h1{margin:0;font:600 clamp(1.7rem,6vw,2.4rem)/1.2 Georgia,'Times New Roman',serif;letter-spacing:0;color:#fff}
.banner.standalone .tagline{margin:.45rem 0 0;font:400 1.02rem/1.45 Georgia,'Times New Roman',serif;color:rgba(244,241,234,.86)}
.status-line{margin:1.2rem 0 .9rem}
.standalone-foot{border-top:4px solid var(--brown-edge);background:var(--navy-deep);color:#cdd9ee;font:.9rem/1.6 system-ui,sans-serif}
.standalone-foot .wrap{padding-top:1.1rem;padding-bottom:1.1rem}
.standalone-foot ul{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:.4rem 1.5rem}
.standalone-foot a{color:var(--brown-soft);text-decoration:none}
.standalone-foot a:hover{text-decoration:underline}

/* ---- Phone optimisation (widths up to 700px) ---- */
@media (max-width:700px){
  /* header: the compact logo sits at the top right, clear of the gold rule and the tagline */
  .brand-logo{top:1rem;transform:none;padding:2px}
  .banner.slim .brand-logo{top:.8rem}
  .brand-logo img,.banner.slim .brand-logo img{height:40px;width:40px}
  .banner.masthead .mast-rule{width:calc(100% - 56px)}
  /* profile: photo on the left, role and links filling the space beside it */
  .profile-side{grid-template-columns:112px 1fr;column-gap:1rem;row-gap:.1rem;align-items:start}
  .profile-side picture{grid-row:1/span 3}
  .profile-side .photo{width:112px;height:112px}
  .profile-side .role{grid-column:2;align-self:end;margin:0 0 .2rem}
  .profile-side .side-links{grid-column:2;grid-row:2/span 2;display:flex;flex-wrap:wrap;gap:0 .9rem;align-content:start;margin:0;padding:0;list-style:none}
  .profile-side .side-links li{margin:0}
  .profile-side .side-links a{display:inline-flex;align-items:center;min-height:40px}
  /* cards: slightly smaller text and tighter padding for narrow screens */
  .fh-blocks .fh-block p,.fh-blocks .fh-block li{font-size:1rem;line-height:1.55}
  .fh-blocks .fh-block h3{padding:.5rem .9rem}
  .fh-blocks .fh-block p,.fh-blocks .fh-block ul{margin-left:.9rem;margin-right:.9rem}
  /* tap targets for links outside running text */
  .pub-link,.fb .report a,figcaption a,.credit a,ol.references a,.refs a.pub-link{display:inline-flex;align-items:center;min-height:40px;padding:0 .15rem}
  .fb .report a{min-height:44px}
}
@media (max-width:700px){.banner .areas,.banner .mast-title,.banner .course{padding-right:56px}}

/* Header band: title and logo only; the name stays in the markup for screen readers */
.banner.slim h1{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
.banner.slim .course{margin:0}
.banner.slim .wrap{padding-top:1.15rem;padding-bottom:1.15rem;min-height:3.6rem;display:flex;flex-direction:column;justify-content:center}
@media (max-width:700px){.banner.slim .wrap{padding-top:.9rem;padding-bottom:.9rem;min-height:3.2rem}.banner.slim .course{padding-right:56px}}

/* Report button on the action row */
a.btn.report-btn{border-color:#D6B07C;color:#D6B07C;background:transparent;gap:.4rem;padding:.4rem .9rem;margin-left:auto;text-decoration:none}
a.btn.report-btn:hover{background:rgba(214,176,124,.14);color:#F4F1EA}
a.btn.report-btn:focus-visible{outline:3px solid #F4F1EA;outline-offset:3px}
@media (max-width:700px){a.btn.report-btn{margin-left:0}}

/* Mock exam */
#quiz-app .opt.sel{border-color:var(--navy);background:var(--sky);border-width:2.5px}
@media (prefers-color-scheme:dark){#quiz-app .opt.sel{border-color:#D6B07C;background:rgba(214,176,124,.12)}}
#quiz-app .opt.sel .tag{color:var(--link)}
.mock-rules{margin:.4rem 0 1rem;padding-left:1.2rem}.mock-rules li{margin:.4rem 0}
.mock-bar{position:sticky;top:var(--nav-h,3.4rem);z-index:6;display:flex;align-items:center;gap:.9rem;flex-wrap:wrap;padding:.55rem .8rem;margin:-.2rem 0 1rem;background:var(--surface);border:1.5px solid var(--border);border-radius:8px;font:600 .9rem system-ui,sans-serif}
.mock-bar .mock-lbl{color:var(--muted)}
.mock-timer{font:700 1.35rem/1 ui-monospace,Menlo,Consolas,monospace;font-variant-numeric:tabular-nums;color:var(--link)}
.mock-timer.low{color:#ff9d8f}
.mock-count{color:var(--muted);margin-right:auto}
.mock-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(2.6rem,1fr));gap:.4rem;margin-top:1.2rem}
.mock-cell{min-height:44px;border:1.5px solid var(--border);border-radius:6px;background:transparent;color:inherit;font:600 .9rem system-ui,sans-serif;cursor:pointer}
.mock-cell.done{background:var(--sky);border-color:var(--navy)}
.mock-cell.cur{outline:3px solid #D6B07C;outline-offset:1px}
.mock-cell:hover{border-color:#D6B07C}
.mock-confirm{border:1.5px solid #D6B07C;border-radius:8px;padding:.7rem .9rem;margin:1rem 0 0}
.mock-hint{font:.85rem system-ui,sans-serif;margin-top:.8rem}
.mock-tablewrap{overflow-x:auto}
.mock-table{border-collapse:collapse;width:100%;max-width:34rem;font:.95rem system-ui,sans-serif}
.mock-table th,.mock-table td{padding:.4rem .6rem;border-bottom:1px solid var(--border);text-align:left}
.mock-table td{text-align:right;width:5.5rem}
ol.mock-review{list-style:none;padding:0;margin:1rem 0 0}
ol.mock-review>li{border-left:6px solid var(--border);padding:.5rem .9rem;margin:0 0 1rem;border-radius:8px;background:var(--surface)}
ol.mock-review>li.ok{border-left-color:var(--ok)}
ol.mock-review>li.no{border-left-color:var(--bad)}
ol.mock-review p{margin:.3rem 0}
ol.mock-review .ref{font:.85rem system-ui,sans-serif;color:var(--muted)}
ol.mock-review a.btn.report-btn{margin-left:0}
@media (max-width:700px){.mock-timer{font-size:1.2rem}.mock-bar{gap:.5rem .8rem}.mock-submit{margin-left:auto}}

/* Optional student ID box */
.quiz-track input{font:1rem system-ui,sans-serif;min-height:44px;padding:.3rem .6rem;border:1.5px solid var(--border);border-radius:6px;background:var(--surface);color:inherit;width:12rem;max-width:100%}
.quiz-track input:focus-visible{outline:3px solid #D6B07C;outline-offset:2px}
.quiz-track .btn{margin:.2rem .2rem .2rem 0}
.quiz-track .track-note{margin:.5rem 0 0}.quiz-track .track-state{margin:.3rem 0 0;font-weight:600;min-height:1.2em}

/* Mock exam: featured card, jump line and menu entry */
.mock-feature{margin:1.6rem 0 0;padding:1.4rem 1.5rem;border:2px solid #D6B07C;border-radius:12px;background:linear-gradient(135deg,#16294b,#1A2645);box-shadow:0 0 0 4px rgba(214,176,124,.12)}
.mock-feature .mf-kicker{margin:0;font:700 .8rem system-ui,sans-serif;letter-spacing:.12em;text-transform:uppercase;color:#D6B07C}
.mock-feature .mf-title{margin:.2rem 0 .5rem;font:700 clamp(1.7rem,5vw,2.3rem)/1.15 Georgia,serif;color:#F4F1EA}
.mock-feature .mf-text{margin:0 0 .8rem;max-width:44rem;color:#D7DDE8}
.mock-feature .mf-meta{display:flex;flex-wrap:wrap;gap:.5rem;margin:0 0 1rem;padding:0}
.mock-feature .mf-meta span{border:1px solid rgba(214,176,124,.6);border-radius:99px;padding:.2rem .7rem;font:600 .85rem system-ui,sans-serif;color:#F4F1EA}
.mock-feature .mf-btn{min-height:48px;padding:.5rem 1.4rem;font-size:1.05rem;background:#D6B07C;border-color:#D6B07C;color:#16294b}
.mock-feature .mf-btn:hover{background:#e6c391;filter:none}
.mock-feature .mf-btn:focus-visible{outline:3px solid #F4F1EA;outline-offset:3px}
.mock-jump{margin:0 0 1rem}
.mock-jump a{display:flex;align-items:center;min-height:44px;padding:.4rem .9rem;border:1.5px solid #D6B07C;border-radius:8px;color:#F4F1EA;text-decoration:none;background:rgba(214,176,124,.1)}
.mock-jump a:hover,.mock-jump a:focus-visible{background:rgba(214,176,124,.22)}
nav.jump a[href="mock-exam.html"]{color:#D6B07C;font-weight:700}
.na-cta{margin:1rem 0 0;padding:.6rem .85rem;border-left:3px solid var(--brown);background:var(--surface);font:.92rem/1.5 system-ui,sans-serif;color:var(--muted)}
.na-cta a{font-weight:600}
