:root{--paper:#f6f6f1;--ink:#173238;--accent:#96734f}html{scroll-padding-top:105px;scroll-snap-type:y proximity}.site-header{position:sticky;top:0;z-index:30;max-width:none;padding:22px max(30px,calc((100vw - 1180px)/2));background:rgba(246,246,241,.96);backdrop-filter:blur(16px);border-bottom:1px solid #17323818}.landscape{margin:0;max-width:none;height:calc(100svh - 100px);min-height:440px;scroll-snap-align:start;scroll-margin-top:99px}.landscape>img{object-fit:cover}.landscape-shade{background:linear-gradient(90deg,rgba(8,30,34,.65),rgba(8,30,34,.1) 85%),linear-gradient(0deg,rgba(8,30,34,.7),transparent 45%)}.landscape-copy{left:max(30px,calc((100vw - 1080px)/2));top:34%}.landscape-copy .discovery-title{font:clamp(42px,6vw,88px)/1.1 var(--serif);letter-spacing:-1.8px;max-width:850px}.landscape-copy .discovery-title em{display:block}.landscape figcaption{bottom:28px;left:max(30px,calc((100vw - 1080px)/2));right:max(30px,calc((100vw - 1080px)/2))}.scroll-cue{position:absolute;left:max(30px,calc((100vw - 1080px)/2));bottom:105px;font-size:12px;letter-spacing:1.5px;text-decoration:none;color:white}.main-layout{position:relative;background:var(--paper);max-width:1180px;margin:0 auto;padding:90px 40px;scroll-snap-align:start;scroll-margin-top:95px;min-height:90svh;gap:70px}.page-heading{padding-bottom:35px}.page-heading h1{font-size:clamp(44px,5vw,72px)}.profile-card{background:#e8ece7}.closing{scroll-snap-align:start;padding:85px 24px;background:#173238;color:#faf9f6}.closing p{color:#c4d0cb}.closing h2{font-size:42px}.closing a{color:#ead7b8}.academic-content>h2{scroll-margin-top:125px}.reveal-ready .page-heading,.reveal-ready .profile-card,.reveal-ready .side-block,.reveal-ready .closing>*{opacity:0;transform:translateY(30px);transition:opacity .65s ease,transform .65s ease}.reveal-ready .is-visible{opacity:1;transform:translateY(0)}body.page-leaving #main{opacity:.2;transform:translateY(-12px);transition:opacity .16s,transform .16s}.page-heading,.profile-card,.side-block{will-change:auto}@media(max-width:1000px){.site-header{padding:18px 25px}.main-layout{gap:35px;padding:60px 25px}}@media(max-width:700px){html{scroll-snap-type:none;scroll-padding-top:95px}.site-header{padding:18px 20px}.landscape{height:72svh;min-height:390px;margin:0}.landscape-copy{left:25px;top:30%}.landscape-copy .discovery-title{font-size:clamp(37px,9vw,58px)}.landscape figcaption{left:25px;right:20px}.scroll-cue{left:25px;bottom:115px}.main-layout{padding:50px 22px;min-height:0}.closing h2{font-size:32px}.site-header nav.open{max-height:40svh;overflow:auto}}@media(prefers-reduced-motion:reduce){html{scroll-snap-type:none;scroll-behavior:auto}.reveal-ready .page-heading,.reveal-ready .profile-card,.reveal-ready .side-block,.reveal-ready .closing>*{opacity:1;transform:none;transition:none}body.page-leaving #main{opacity:1;transform:none}}

/* The source photographs are wide panoramas: preserve their framing and native detail. */
.landscape{height:auto;min-height:0;aspect-ratio:5/2;max-width:2048px;margin:0 auto;background:#122b31}
.landscape>img{position:absolute;inset:0;object-fit:contain}
.landscape-copy{top:22%}
.landscape-copy .discovery-title{font-size:clamp(38px,4.5vw,72px)}
.landscape-shade{background:linear-gradient(90deg,rgba(8,30,34,.32),transparent 72%),linear-gradient(0deg,rgba(8,30,34,.65),transparent 28%)}
.scroll-cue{bottom:85px}
@media(max-width:700px){.landscape{height:360px;aspect-ratio:auto}.landscape>img{object-fit:contain}.landscape-copy{top:22px;left:22px}.landscape-copy .discovery-title{font-size:31px}.landscape-copy .discovery-title em{display:inline}.landscape figcaption{bottom:15px}.scroll-cue{bottom:76px;font-size:10px}}

/* Academic content refinements. */
.landscape-copy{top:14%}
.landscape-copy .discovery-title{font-size:clamp(32px,4vw,64px);line-height:1.08}
.academic-content .links-heading{font-size:32px;line-height:1.25;margin:46px 0 23px;padding-bottom:14px;border-bottom:1px solid var(--line)}
.academic-content .erasmus-table td:last-child{text-align:right;width:45%;padding-right:0}
.academic-content .erasmus-table td:first-child{width:50%}
.package-feature{border-top:1px solid var(--line);margin-top:35px;padding-top:25px}
.package-heading{display:flex;flex-wrap:wrap;gap:12px 20px;align-items:center;margin-bottom:28px}
.academic-content .package-heading h2{font-size:36px;line-height:1.2;margin:0;letter-spacing:-.6px}
.package-heading h2 a{text-decoration:none;color:var(--ink)}
.package-heading>img{height:20px;width:auto;max-width:130px}
.package-layout{display:grid;grid-template-columns:130px minmax(0,1fr);align-items:start;gap:28px}
.package-logo{display:block;padding-top:4px}.package-logo img{display:block;width:130px;height:auto}
.academic-content .package-description h3{font:23px/1.3 var(--serif);margin:0 0 15px}
.package-description p{margin:0 0 16px}.package-resources{display:flex;flex-wrap:wrap;gap:8px 17px;font-size:12px}
.package-repositories{margin:30px 0}.package-repositories>div{display:grid;grid-template-columns:65px minmax(0,1fr);border-top:1px solid var(--line);padding:5px 0;gap:10px}.package-repositories dt{font-weight:650}.package-repositories dd{margin:0;display:flex;flex-wrap:wrap;align-items:center;gap:10px 16px}.package-repositories img{width:auto;height:20px}
.regulation-source{font-size:12px;color:var(--muted);margin-top:35px}
@media(max-width:700px){.landscape-copy{top:16px}.landscape-copy .discovery-title{font-size:31px}.academic-content .links-heading{font-size:28px}.academic-content .erasmus-table{display:table;table-layout:fixed}.academic-content .erasmus-table td{min-width:0;overflow-wrap:anywhere}.academic-content .erasmus-table h1{font-size:15px}.academic-content .package-heading h2{font-size:30px}.package-layout{grid-template-columns:85px minmax(0,1fr);gap:18px}.package-logo img{width:85px}.academic-content .package-description h3{font-size:20px}}

.landscape-copy .discovery-title em{display:inline}

/* Match the research section headings while retaining a semantic page heading. */
.page-heading h1.research-title{font:28px/1.25 var(--serif);letter-spacing:normal}

.page-heading .page-subtitle{font-size:14px;line-height:1.5;color:var(--muted);margin:8px 0 0;letter-spacing:.3px}

.page-heading h1.course-title{font-size:clamp(28px,3vw,40px);line-height:1.2;letter-spacing:-.5px}

/* Match the 18px heading-to-list spacing of the other research sections. */
.page-heading.research-heading{padding-bottom:0;margin-bottom:18px;border-bottom:0}
.page-heading.research-heading h1{margin-bottom:0}
.research-heading + .academic-content > ol:first-child{margin-top:0}

.social-links{display:flex;justify-content:center;align-items:center;gap:18px;margin-top:24px}.social-icon{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;border:1px solid #c4d0cb80;border-radius:50%;color:#ead7b8}.social-icon svg{width:22px;height:22px}.social-links a:hover{background:#ead7b8;color:#173238;border-color:#ead7b8}

.portrait{object-position:center top}

/* A gentle zoom inside the existing rectangular portrait frame. */
.portrait-frame{width:100%;height:230px;overflow:hidden;margin-bottom:25px}
.portrait-frame .portrait{display:block;width:100%;height:100%;margin:0;object-fit:cover;object-position:center top;transform:scale(1.10);transform-origin:50% 25%}
@media(max-width:700px){.portrait-frame{grid-row:1/7;height:150px;margin:0}}
@media(max-width:400px){.portrait-frame{height:230px;margin-bottom:22px}}

/* Keep the original 4:5 portrait proportions at every screen size. */
.portrait-frame{height:auto;aspect-ratio:4/5}
.portrait-frame .portrait{position:absolute;inset:0;width:100%;height:100%}
.portrait-frame{position:relative}
@media(max-width:700px){.portrait-frame{height:auto;aspect-ratio:4/5;align-self:start}}
@media(max-width:400px){.portrait-frame{height:auto;aspect-ratio:4/5}}

.page-heading.links-page-heading{padding-bottom:0;margin-bottom:18px;border-bottom:0}
.page-heading.links-page-heading h1{margin-bottom:0}

.monogram span{color:#c62828}

.identity-text{position:relative;top:5px}
.identity-dot{color:#c62828}

.monogram{position:relative;top:-4px}

/* Manual profile carousel: same original portrait proportions, no auto rotation. */
.portrait-carousel{margin-bottom:25px;min-width:0}
.portrait-carousel .portrait-frame{margin:0}
.portrait-selectors{display:flex;gap:7px;margin-top:3px}
.portrait-selectors[hidden]{display:none}
.portrait-strip{position:relative;flex:1;min-width:0;height:28px;padding:0;border:0;background:transparent;border-radius:2px}
.portrait-strip::after{content:"";position:absolute;left:0;right:0;top:12px;height:4px;border-radius:2px;background:#17323835;transition:background .15s}
.portrait-strip[aria-pressed="true"]::after{background:var(--accent)}
.portrait-strip:hover::after{background:var(--ink)}
.portrait-strip:focus-visible{outline:2px solid var(--ink);outline-offset:1px}
.portrait-carousel .portrait[data-profile-alternate]{transform:none;object-position:center top}
.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
@media(max-width:700px){.portrait-carousel{grid-row:1/7;margin-bottom:0;align-self:start}.portrait-carousel .portrait-frame{grid-row:auto}}
@media(max-width:400px){.portrait-carousel{margin-bottom:22px}}

.page-heading.software-page-heading{padding-bottom:0;margin-bottom:18px;border-bottom:0}
.page-heading.software-page-heading h1{margin-bottom:0}
.software-page-heading + .academic-content > p:first-child{margin-top:0}

.academic-content .about-list{list-style:disc;padding-left:20px;margin:0 0 24px}
.academic-content .about-list li{padding-left:5px;margin-bottom:2px}
.academic-content .about-list li::marker{color:var(--accent);font-size:.85em}

.breadcrumb-monogram{text-transform:none;color:#000;font-size:110%}
.breadcrumb-dot{color:#c62828;font-weight:900}

/* Resource pages share the same body typography as About, Research and Software. */
.academic-content .resource-content{font:14px/1.7 -apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}
.academic-content .resource-content h2,.academic-content .resource-content .links-heading{font:28px/1.25 var(--serif);letter-spacing:normal;margin:34px 0 18px;padding:0;border:0}
.academic-content .resource-content table{font:inherit;width:100%;margin:0 0 22px}
.academic-content .resource-content td{font:inherit;padding:11px 12px 11px 0;vertical-align:top;border-bottom:1px solid var(--line)}
.academic-content .resource-content td:last-child{padding-right:0}
.academic-content .resource-content td a{font:inherit;color:var(--ink);text-decoration:none}
.academic-content .resource-content td a:hover{color:var(--accent);text-decoration:underline;text-underline-offset:4px}
.academic-content .resource-content td b{font-weight:600}
.academic-content .teaching-resources td:first-child{white-space:nowrap}
.academic-content .resource-content .erasmus-table td:last-child{text-align:right}
.academic-content .identifier-table{width:auto;font:inherit}
.academic-content .identifier-table td{padding:1px 18px 1px 0;line-height:1.7}
@media(max-width:700px){.academic-content .resource-content table{display:table;table-layout:fixed}.academic-content .resource-content td{min-width:0;overflow-wrap:anywhere;padding:9px 8px 9px 0}.academic-content .teaching-resources td:first-child{white-space:normal;width:24%}.academic-content .identifier-table{display:table}}

/* Compact resource rows with shared copper identifiers and teal destinations. */
.academic-content .resource-content table td{padding:5px 12px 5px 0;line-height:1.5}
.academic-content .resource-content table td:first-child a{color:#874329;font-weight:600}
.academic-content .resource-content table td:not(:first-child) a{color:#18616a;text-decoration:underline;text-decoration-color:#18616a55;text-underline-offset:3px}
.academic-content .resource-content table td a:hover{color:#622d1c;text-decoration:underline;text-decoration-color:currentColor}
.academic-content .teaching-resources .course-code{width:95px;white-space:nowrap}
.academic-content .teaching-resources .sis-link{width:65px}
.academic-content .teaching-resources .sis-link a{font-size:11px;color:var(--muted);text-decoration:none}
.academic-content .teaching-resources .course-name a{font-weight:500}
@media(max-width:700px){.academic-content .resource-content table td{padding:5px 8px 5px 0}.academic-content .teaching-resources .course-code{width:82px}.academic-content .teaching-resources .sis-link{width:50px}}

/* Align sidebar sections with the profile card's 23px text inset. */
aside > .side-block{padding-left:23px;padding-right:23px}

/* Separate teaching sections while keeping individual course rows compact. */
.academic-content .teaching-resources h2.teaching-section-break{margin-top:64px}
.photography-intro p{margin:0 0 20px}
.photography-intro .photography-copyright{padding:17px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);font-size:12px;color:var(--muted)}
.photography-copyright strong{color:var(--ink)}

.academic-content h2.research-section-break{margin-top:64px}

.academic-content .resource-content h2.links-section-break{margin-top:64px}
.academic-content .links-resources table.erasmus-table{margin-bottom:12px}
.academic-content .links-resources table.erasmus-table td{padding-top:3px;padding-bottom:3px}

/* Preserve complete portrait photographs within uniform landscape grid boxes. */
.album-photo-grid .gallery-item img{display:block;width:100%;aspect-ratio:3/2;height:auto;object-fit:contain;object-position:center;background:#e6e6df}

.page-heading h1.album-title{font-size:clamp(36px,4vw,56px);line-height:1.15}

/* Individual photographs use the full content width and their natural proportions. */
.academic-content .photo-view{display:block;width:100%;height:auto;max-height:none;aspect-ratio:auto;background:transparent}

.academic-content a.button.full-resolution-button{background-color:var(--accent);color:var(--ink)}
.academic-content a.button.full-resolution-button:hover,.academic-content a.button.full-resolution-button:focus-visible{background-color:var(--ink);color:var(--accent)}

.album-photo-grid .photo-number{display:flex;align-items:baseline;gap:4px;margin-top:8px;font-variant-numeric:tabular-nums}
.photo-number-current{font-size:15px;font-weight:700;color:var(--ink)}
.photo-number-total{font-size:12px;color:var(--muted)}

.photo-stage{display:block;scroll-margin-top:10px}
