.photo-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:34px 24px;align-items:start}.photo-grid .photo-wide{grid-column:1/-1}.photo-item{margin:0;min-width:0}.photo-open{position:relative;display:block;cursor:zoom-in}.photo-open img{display:block;width:100%;height:auto;background:#f5f5f5}.photo-expand{position:absolute;right:14px;bottom:14px;padding:8px 11px;background:#fff;color:#1d211e;font-size:12px;line-height:1.3;opacity:0;transition:opacity .15s}.photo-open:hover .photo-expand,.photo-open:focus-visible .photo-expand{opacity:1}.photo-item figcaption{font-size:13px;line-height:1.6;color:var(--muted);margin-top:12px}.photo-attribution{display:block;font-size:12px;margin-top:2px}.education-photos{grid-template-columns:repeat(3,minmax(0,1fr))}dialog.photo-lightbox{position:fixed;width:calc(100vw - 32px);height:calc(100dvh - 32px);max-width:none;max-height:none;margin:auto;padding:0;border:0;background:#111;color:#fff;overflow:hidden;box-shadow:none}dialog.photo-lightbox::backdrop{background:#000e;backdrop-filter:none}.photo-lightbox .photo-lightbox-inner{display:grid;grid-template-rows:auto minmax(0,1fr) auto;height:100%;padding:18px 24px;gap:12px}.photo-lightbox .photo-lightbox-top{display:flex;justify-content:space-between;align-items:center;gap:20px;font-size:13px}.photo-lightbox h2{font-size:14px;font-weight:400;letter-spacing:0;margin:0;line-height:1.5}.photo-lightbox button{background:none;color:#fff;border:0;font:inherit;padding:10px;min-height:44px;cursor:pointer}.photo-lightbox button:hover{text-decoration:underline;text-underline-offset:4px}.photo-lightbox .photo-stage{display:grid;place-items:center;min-height:0;position:relative}.photo-lightbox .photo-stage img{position:absolute;inset:0;max-width:100%;max-height:100%;width:100%;height:100%;object-fit:contain;touch-action:pan-y pinch-zoom}.photo-lightbox .photo-load-error{position:absolute;background:#111e;padding:20px;line-height:1.6;font-size:14px}.photo-lightbox .photo-load-error a{text-decoration:underline}.photo-lightbox .photo-lightbox-bottom{display:grid;grid-template-columns:100px 1fr 100px;align-items:center;gap:16px;font-size:14px}.photo-lightbox .photo-caption{text-align:center;line-height:1.5;margin:0}.photo-lightbox .photo-credit{color:#bbb;font-size:12px;display:block;margin:4px 0 0}.photo-lightbox .photo-next{justify-self:end}.photo-lightbox .photo-prev{justify-self:start}.photo-lightbox .photo-counter{font-variant-numeric:tabular-nums;color:#bbb;font-size:12px;margin-left:12px}
@media(max-width:680px){.photo-grid,.education-photos{grid-template-columns:1fr;gap:28px}.photo-expand{display:none}.photo-item figcaption{font-size:12px}.photo-lightbox .photo-lightbox-inner{padding:10px 12px;gap:8px}dialog.photo-lightbox{width:100vw;height:100dvh;margin:0}.photo-lightbox .photo-lightbox-bottom{grid-template-columns:72px 1fr 72px;gap:4px;font-size:12px}.photo-lightbox .photo-caption{font-size:12px}.photo-lightbox .photo-credit{font-size:11px}.photo-lightbox .photo-counter{margin-left:6px}}

.photo-lightbox .photo-lightbox-bottom.photo-single{grid-template-columns:minmax(0,1fr)}
.photo-lightbox .photo-single .photo-caption{max-width:760px;justify-self:center}

.education-photos .photo-open img{aspect-ratio:3/2;object-fit:cover}

/* Loading: the page's own copy of the image stands in, blurred, until the full image arrives. */
/* Hidden at once when leaving an image; faded in only on arrival. */
.photo-lightbox .photo-stage .photo-full:not(.is-loaded){opacity:0;transition:none}
/* A ready image swaps in at once; one that had to wait fades in with a quadratic ease-out, slowing into its end. */
.photo-lightbox .photo-stage .photo-full.is-loaded{opacity:1}
.photo-lightbox .photo-stage .photo-full.is-loaded.photo-fade{transition:opacity .35s cubic-bezier(.25,.46,.45,.94)}
.photo-lightbox .photo-stage .photo-placeholder{filter:blur(6px);pointer-events:none}
.photo-lightbox:not(.photo-is-loading) .photo-placeholder{display:none}
.photo-lightbox .photo-loading{position:absolute;left:50%;bottom:12px;transform:translateX(-50%);display:flex;align-items:center;gap:8px;margin:0;padding:6px 12px;border-radius:999px;background:#000b;color:#ddd;font-size:12px;line-height:1.4;white-space:nowrap;opacity:0;animation:photo-loading-in .2s .4s forwards}
.photo-lightbox .photo-loading[hidden]{display:none}
.photo-spinner{width:11px;height:11px;border:1.5px solid #fff4;border-top-color:#fff;border-radius:50%;animation:photo-spin .8s linear infinite}
@keyframes photo-loading-in{to{opacity:1}}
@keyframes photo-spin{to{transform:rotate(360deg)}}
@media(prefers-reduced-motion:reduce){.photo-spinner{animation:none}.photo-lightbox .photo-stage .photo-full{transition:none}}
