@font-face{font-family:Geist;src:url('fonts/Geist-Regular.ttf') format('truetype');font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:Geist;src:url('fonts/Geist-Medium.ttf') format('truetype');font-weight:500;font-style:normal;font-display:swap}
@font-face{font-family:'Instrument Serif';src:url('fonts/InstrumentSerif-Regular.ttf') format('truetype');font-weight:400;font-style:normal;font-display:swap}

:root{
  --daylight:0;
  --paper:calc(255 * var(--daylight));
  --ink:242;
  --muted:184;
  --line:113;
  --edge:clamp(32px,6.667vw,120px);
  --book-teal:#00aa90;
  --ease-out:cubic-bezier(.23,1,.32,1);
  --header-height:72px;
  color-scheme:dark;
  font-family:Geist,Arial,sans-serif;
  font-synthesis:none;
  -webkit-font-smoothing:antialiased;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth;scrollbar-color:#666 #161616;scroll-padding-top:calc(var(--header-height) + 12px)}
html[data-theme=light]{color-scheme:light;scrollbar-color:#888 #f0f0f0}
body{margin:0;background:rgb(var(--paper),var(--paper),var(--paper));color:rgb(var(--ink),var(--ink),var(--ink))}
a{color:inherit;text-decoration:none;text-underline-offset:5px}
a:hover{text-decoration:underline}
button{font:inherit;color:inherit}
button,a{-webkit-tap-highlight-color:transparent}
button:focus-visible,a:focus-visible{outline:1px solid currentColor;outline-offset:7px}
::selection{background:#9e9e9e;color:#000}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
.skip-link{position:fixed;top:18px;left:20px;padding:12px;background:#fff;color:#000;z-index:30;transform:translateY(-200%)}
.skip-link:focus{transform:none}
.hero{height:max(760px,100svh);max-height:1100px;min-height:760px;position:relative;isolation:isolate;overflow:hidden}
.header{height:var(--header-height);position:fixed;inset:0 0 auto;z-index:20;padding:0 var(--edge) 0 calc(var(--edge) + 32px);display:flex;align-items:center;justify-content:space-between;pointer-events:none;animation:nav-arrive 600ms var(--ease-out) both}
.header::before{content:none}
.header.is-scrolled::before{opacity:.96}
.header>a,.header nav{pointer-events:auto}
@keyframes nav-arrive{from{opacity:0;transform:translateY(-24px)}to{opacity:1;transform:translateY(0)}}
.monogram{font-family:'Instrument Serif',Georgia,serif;font-size:34px;font-weight:400;line-height:1;letter-spacing:-.025em}
.header nav{display:flex;gap:34px;font-size:14px;align-items:center}
main{outline:none}
.intro{position:absolute;left:calc(var(--edge) + 32px);top:calc(50% - 156px);width:520px;z-index:3}
h1{font-family:'Instrument Serif',Georgia,serif;font-weight:400;font-size:96px;line-height:1.2;letter-spacing:-.025em;margin:0 0 28px;text-wrap:balance}
.intro p{font-size:20px;line-height:1.6;max-width:430px;color:rgb(var(--muted),var(--muted),var(--muted));margin:0}
.work-link{display:inline-flex;align-items:center;gap:22px;margin-top:38px;font-size:14px;font-weight:500;min-height:32px}
.work-link svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.4;transition:transform 180ms ease}
.work-link:hover svg{transform:translateX(4px)}
.portrait-anchor{position:absolute;right:var(--edge);bottom:0;width:min(41.667vw,650px);aspect-ratio:1275/1234;z-index:1;isolation:isolate}
.portrait{position:relative;width:100%;aspect-ratio:1275/1234;transform-origin:top left}
.portrait img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;display:block;user-select:none;-webkit-user-drag:none}
.portrait-source{
  filter:grayscale(1) brightness(calc(.76 + .24 * var(--daylight))) contrast(calc(1.12 - .12 * var(--daylight)));
  opacity:calc(1 - var(--daylight) * var(--daylight));
}
.portrait-source{mask-image:linear-gradient(to bottom,#000 69%,transparent 100%)}
.portrait-daylight{opacity:calc(var(--daylight) * var(--daylight))}
#portrait-canvas{display:none;width:100%;height:100%}
.portrait.has-relighting #portrait-canvas{display:block}
.portrait.has-relighting .portrait-source,.portrait.has-relighting .portrait-daylight{opacity:0}
/* Preserve the dark fade; uploaded hair stays fully visible in light-off mode.
   Applying this to the shared node also covers the no-WebGL fallback. */
@media(max-width:700px){
 .portrait{mask-image:linear-gradient(to bottom,#000 50%,rgba(0,0,0,calc(.93 + .07 * var(--daylight))) 60%,rgba(0,0,0,calc(.65 + .35 * var(--daylight))) 72%,rgba(0,0,0,calc(.25 + .75 * var(--daylight))) 84%,rgba(0,0,0,var(--daylight)) 97%);-webkit-mask-image:linear-gradient(to bottom,#000 50%,rgba(0,0,0,calc(.93 + .07 * var(--daylight))) 60%,rgba(0,0,0,calc(.65 + .35 * var(--daylight))) 72%,rgba(0,0,0,calc(.25 + .75 * var(--daylight))) 84%,rgba(0,0,0,var(--daylight)) 97%)}
 /* The shader owns the fade. Avoid a second mask/compositing surface in Safari. */
 .portrait.has-relighting{mask-image:none;-webkit-mask-image:none}
 .portrait.has-relighting .portrait-source,.portrait.has-relighting .portrait-daylight{display:none}
}
.lighting-rig{position:absolute;left:calc(var(--edge) + 64px);top:4px;width:120px;height:110px;z-index:6;pointer-events:none}
.fixture{position:absolute;left:24px;top:0;width:80px;height:58px;overflow:visible}
.lamp-arm{fill:none;stroke:#6c6c6c;stroke-width:2}
.lamp-glass{opacity:calc(1 - var(--daylight))}
.cord-drawing{position:absolute;inset:0;width:120px;height:270px;overflow:visible;fill:none;stroke-linecap:round}
#cord-line{stroke:rgb(var(--line),var(--line),var(--line));stroke-width:1.25}
#cord-shadow{stroke:#000;stroke-opacity:.25;stroke-width:2}
.cord-handle{position:absolute;left:20px;top:44px;width:56px;height:56px;padding:0;border:0;background:none;pointer-events:auto;cursor:grab;touch-action:none;user-select:none;border-radius:50%;display:grid;place-items:center}
.cord-handle:active{cursor:grabbing}
.cord-handle:disabled{cursor:wait}
.cord-weight{display:block;width:7px;height:21px;border-radius:4px;background:linear-gradient(90deg,#353535,#a8a8a8 43%,#d2d2d2 53%,#606060 79%,#242424);box-shadow:2px 3px 5px #0004}
.cord-handle:focus-visible{outline-offset:0}
.cord-hint{position:absolute;left:72px;top:64px;width:150px;font-size:11px;line-height:16px;opacity:0;color:rgb(var(--muted),var(--muted),var(--muted));transition:opacity 150ms ease;white-space:nowrap}
.lighting-rig:has(.cord-handle:hover) .cord-hint,.lighting-rig:has(.cord-handle:focus-visible) .cord-hint{opacity:1}
.lighting-rig.is-dragging .cord-hint{opacity:0}
.beam{position:fixed;inset:0;width:100%;height:100%;z-index:1;pointer-events:none;opacity:calc((1 - var(--daylight)) * var(--beam-strength,1))}
.dust-grain{fill:#fff;animation:dust-drift var(--drift-time) ease-in-out infinite alternate;animation-delay:var(--drift-delay)}
.dust-paused .dust-grain{animation-play-state:paused}
/* HTML dust layer over the SVG beam: same box, opacity and z-order (.beam). */
.beam-dust{transform-origin:0 0}
.beam-dust .dust-mote,.beam-dust .dust-wake{position:absolute;left:0;top:0}
.beam-dust .dust-grain{position:absolute;left:calc(var(--r) * -1px);top:calc(var(--r) * -1px);width:calc(var(--r) * 2px);height:calc(var(--r) * 2px);border-radius:50%;background:#fff}
@keyframes dust-drift{
  from{transform:translate(0,0);opacity:.35}
  50%{opacity:1}
  to{transform:translate(var(--drift-x),var(--drift-y));opacity:.45}
}
.asset-notice{position:absolute;bottom:20px;left:var(--edge);font-size:13px;z-index:7}
.asset-notice button{border:0;padding:0 0 2px;background:none;text-decoration:underline;cursor:pointer}
.reading{max-width:1184px;margin:0 auto;padding:70px 0 90px}
.reading section{display:grid;grid-template-columns:1fr 1.2fr;gap:80px;padding:80px 0;border-top:1px solid rgb(var(--line),var(--line),var(--line));scroll-margin-top:40px}
h2{font:400 48px/1.1 'Instrument Serif',Georgia,serif;letter-spacing:-.02em;margin:0}
h3{font:400 30px/1.2 'Instrument Serif',Georgia,serif;margin:32px 0 14px}
h3:first-child{margin-top:0}
.reading p{color:rgb(var(--muted),var(--muted),var(--muted));font-size:16px;line-height:1.8;margin:0 0 20px}
.contact-link{display:inline-block;margin-top:8px;font-size:14px;text-decoration:underline}
.contact-link svg{display:inline-block;width:14px;height:14px;vertical-align:middle;fill:none;stroke:currentColor;stroke-width:1.3;margin-left:6px}

@media(min-width:1600px){.header{padding-left:calc(50% - 592px)}.intro{left:calc(50% - 592px)}.portrait-anchor{right:calc(50% - 624px)}}
@media(max-width:1200px){
  .header{padding-left:var(--edge)}
  .intro{left:var(--edge);width:45%}
  h1{font-size:clamp(64px,7.2vw,88px)}
  .intro p{font-size:18px;max-width:360px}
  .portrait-anchor{right:24px;width:48vw}
  .reading{margin:0 var(--edge)}
}
/* Portrait tablets keep Home in one viewport. The shared portrait/book node
   stays bottom-anchored; only its layout box changes, never the artwork. */
@media(min-width:701px) and (max-width:1100px) and (orientation:portrait){
  .hero{height:100svh;min-height:760px;max-height:none}
  .intro{top:clamp(160px,18svh,246px);width:min(60%,520px)}
  h1{font-size:clamp(72px,8vw,88px)}
  .intro p{max-width:430px}
  .portrait-anchor{right:var(--edge);width:min(66vw,680px)}
}
@media(min-width:701px) and (max-width:1366px) and (pointer:coarse){
  .header nav>a,.resume-menu>summary{min-height:44px;display:flex;align-items:center}
}
@media(max-width:700px){
  :root{--edge:24px;--header-height:56px}
  .hero{height:100svh;min-height:568px;max-height:none}
  .header{align-items:center}
  .header nav{gap:14px;font-size:12px}
  .header nav>a[href="#work"],.header nav>a[href^="mailto:"]{display:none}
  .monogram{font-size:32px}
  .lighting-rig{left:66px;top:3px;transform:scale(.8);transform-origin:top left}
  .intro{left:24px;right:24px;top:104px;width:auto}
  h1{font-size:64px;line-height:1.07;margin-bottom:22px}
  .intro p{font-size:16px;line-height:1.65;max-width:330px}
  .work-link{font-size:13px;margin-top:22px}
  .portrait-anchor{right:calc(50% - 20px);transform:translateX(50%);width:min(100vw,440px)}
  .reading{padding-top:20px;padding-bottom:32px}
  .reading section{grid-template-columns:1fr;gap:24px;padding:46px 0}
  h2{font-size:40px}h3{font-size:28px}
}

/* A single editorial spread. Colour comes from the supplied book artwork. */
.publications{max-width:1184px;margin:0 auto;padding:64px 0 0;scroll-margin-top:0}
#publications{scroll-margin-top:0}
.publication-heading{display:flex;justify-content:space-between;align-items:baseline;border-top:1px solid rgb(var(--line),var(--line),var(--line));padding-top:32px}
.eyebrow{font-size:12px;line-height:1.6;color:rgb(var(--muted),var(--muted),var(--muted))}
.featured-publication{display:grid;grid-template-columns:1.2fr 1fr;gap:80px;align-items:start;padding:68px 0 76px}
.book-column{padding-top:8px;grid-column:2;grid-row:1}
.publication-copy{grid-column:1;grid-row:1}
.book-slot{width:min(100%,340px);aspect-ratio:976/1500;margin:0 auto;position:relative}
.book-slot-space{width:min(100%,340px);aspect-ratio:976/1500;margin:0 auto}
.book-static{display:block;width:100%;height:auto;box-shadow:0 22px 30px -16px #0007}
.book-static[hidden]{display:none}
.book-cover-notice{font-size:12px;line-height:1.6;text-align:center}
.book-cover-notice button{border:0;background:none;text-decoration:underline;cursor:pointer;padding:8px}
.eyebrow{margin:0 0 22px;letter-spacing:.09em;text-transform:uppercase;font-size:10px}
.publication-copy h3{font:400 clamp(32px,3.2vw,46px)/1.08 'Instrument Serif',Georgia,serif;letter-spacing:-.02em;margin:0;max-width:560px;text-wrap:balance}
.publication-copy h3 em{font-style:normal;display:block}
.book-byline{font-size:13px;margin:22px 0 34px;color:rgb(var(--muted),var(--muted),var(--muted))}
.book-introduction,.publication-entry p:not(.eyebrow){font-size:14px;line-height:1.8;color:rgb(var(--muted),var(--muted),var(--muted))}
.book-introduction{margin:0;max-width:480px}
.book-introduction p{margin:0 0 12px}
.book-introduction p:last-child{margin-bottom:0}
.book-introduction strong{font-weight:600;color:rgb(var(--ink),var(--ink),var(--ink))}
.contributed-publication .book-introduction{margin-top:20px}
.landscape-cover{display:block;width:100%;height:100%;object-fit:contain;box-shadow:0 22px 30px -16px #0007}
.contact-links{display:flex;flex-direction:column;align-items:flex-start;gap:16px}
.contact-linkedin{display:inline-flex;align-items:center;gap:16px;min-height:44px;font-size:16px}
.publisher-link{display:inline-flex;align-items:center;gap:38px;font-size:13px;padding:8px 0;margin:24px 0 32px;text-decoration:none;border:0}
.publisher-link span[aria-hidden]{font-size:20px}
.publication-entry{display:grid;grid-template-columns:1fr 1.2fr;gap:80px;padding:36px 0;border-top:1px solid rgb(var(--line),var(--line),var(--line))}
.publication-entry .eyebrow{padding-top:8px}
.publication-entry h3{margin:0 0 12px}
.publication-entry p{margin:0}

/* Fixed only while transferring the hero portrait. All surfaces turn together;
   no opacity on the 3D parent, which would flatten the book. */
.book-flight{position:fixed;left:0;top:0;z-index:4;pointer-events:none;perspective:1600px;perspective-origin:50% 50%}
.book-flight[hidden]{display:none}
.book-turn{width:100%;height:100%;position:relative;transform-style:preserve-3d;transform-origin:center center -9px}
.book-back,.book-front{position:absolute;inset:0;backface-visibility:hidden;-webkit-backface-visibility:hidden}
.book-back{transform:translateZ(0);transform-style:preserve-3d}
.back-paper{position:absolute;inset:0;background:var(--book-teal);border:1px solid #ffffff30;box-shadow:inset 4px 0 8px #00000012}
.back-photo-frame{position:absolute;left:23%;top:8%;width:54%;aspect-ratio:1275/1234;background:rgb(var(--paper),var(--paper),var(--paper));border:1px solid #ffffffb3}
.back-lettering{position:absolute;inset:0;color:#082c29;container-type:inline-size}
.back-description{position:absolute;top:48%;left:9%;right:9%;font-size:min(12px,4.2cqw);line-height:1.5;margin:0}
.book-back .portrait{position:absolute;top:0;left:0}
.book-front{transform:translateZ(-18px) rotateY(180deg);box-shadow:0 24px 36px -18px #0009}
.book-front img{width:100%;height:100%;display:block;object-fit:cover}
.book-front::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,#0002,transparent 2%,#fff2 3%,transparent 5%);pointer-events:none}
@media(max-width:700px),(min-width:701px) and (max-width:1366px) and (pointer:coarse){
 /* A flat portrait needs no book backfaces. Restore depth only at the reveal.
    Touch tablets need the same Safari compositing safeguard as phones. */
 .book-flight.is-portrait-only{perspective:none}
 .book-flight.is-portrait-only .book-turn,.book-flight.is-portrait-only .book-back{transform-style:flat}
 .book-flight.is-portrait-only .book-front,.book-flight.is-portrait-only .back-paper,.book-flight.is-portrait-only .back-photo-frame,.book-flight.is-portrait-only .back-lettering,.book-flight.is-portrait-only .book-spine,.book-flight.is-portrait-only .book-pages{visibility:hidden}
}
.book-spine{position:absolute;left:-9px;top:0;width:18px;height:100%;background:var(--book-teal);transform:translateZ(-9px) rotateY(-90deg);backface-visibility:hidden;display:flex;align-items:center;justify-content:center;color:#082c29}
.book-spine span{writing-mode:vertical-rl;font-size:9px;letter-spacing:.04em;white-space:nowrap}
.book-pages{position:absolute;right:-8px;top:2px;width:16px;height:calc(100% - 4px);background:repeating-linear-gradient(90deg,#e5e2d8 0 1px,#bdbbae 1px 2px);transform:translateZ(-9px) rotateY(90deg);backface-visibility:hidden}
.book-transition-active .book-static{visibility:hidden}
@media(max-width:1200px){
  .publications{margin:0 var(--edge)}
  .featured-publication,.publication-entry{gap:48px}
  .book-slot{width:min(100%,300px)}
}
@media(max-width:700px){
  .publications{padding-top:32px}
  .publication-heading{padding-top:24px}
  .featured-publication{grid-template-columns:1fr;gap:38px;padding:36px 0 48px}
  .book-column{grid-column:1;grid-row:1}
  .publication-copy{grid-column:1;grid-row:2}
  .book-slot{width:min(68vw,260px)}
  .publication-copy h3{font-size:46px;max-width:420px}
  .book-byline{margin:18px 0 28px}
  .publication-entry{grid-template-columns:1fr;gap:14px;padding:28px 0}
  .publication-entry .eyebrow{padding:0}
}
html[data-motion=reduced] .book-transition-active .book-static{visibility:visible}html[data-motion=reduced] .book-flight{display:none}

html[data-motion=reduced] .dust-grain{animation:none;opacity:.5}html[data-motion=reduced]{scroll-behavior:auto}html[data-motion=reduced] .work-link svg,html[data-motion=reduced] .cord-hint{transition:none}html[data-motion=reduced] .work-link:hover svg{transform:none}


/* Native résumé disclosure: links retain their normal keyboard behavior. */
.resume-menu{position:relative}
.resume-menu summary{list-style:none;cursor:pointer;min-height:44px;display:flex;align-items:center;gap:6px}
.resume-menu summary::-webkit-details-marker{display:none}
.resume-menu summary:focus-visible{outline:1px solid currentColor;outline-offset:4px}
.resume-menu summary span{font-size:14px;line-height:1}
.resume-panel{position:absolute;right:0;top:100%;width:190px;padding:8px;background:rgb(var(--paper),var(--paper),var(--paper));border:1px solid rgb(var(--line),var(--line),var(--line));box-shadow:0 12px 32px #0002;transform-origin:top right}
.resume-panel a,.resume-panel button{display:flex;width:100%;min-height:44px;padding:10px 12px;align-items:center;justify-content:space-between;gap:20px;border:0;background:none;font-size:13px;text-align:left;cursor:pointer}
.resume-panel [hidden]{display:none}
.resume-panel a:focus-visible,.resume-panel button:focus-visible{outline-offset:-3px}
.resume-panel a:hover,.resume-panel button:hover{background:rgba(128,128,128,.15);text-decoration:none}
.resume-status{margin:0 12px;font-size:12px;line-height:1.5;color:rgb(var(--muted),var(--muted),var(--muted))}
.resume-status:not(:empty){margin:8px 12px 12px}
.back-paper,.back-lettering,.book-front img,.book-spine,.book-pages{filter:grayscale(1)}
@media(max-width:360px){.header nav{gap:10px;font-size:11px}.resume-menu summary{gap:3px}}
html[data-motion=reduced] .header{animation:none}

/* Shared fixed studio light; content stays in front of the beam. */
.hero,.publications,.work-atlas,.reading{position:relative;z-index:2}
.header .lighting-rig{pointer-events:none}
.header .cord-handle{pointer-events:auto}
.book-light-overlay{position:absolute;inset:0;z-index:3;pointer-events:none;opacity:0}
.section-sticky{position:sticky;top:var(--header-height);z-index:8;background:rgb(var(--paper),var(--paper),var(--paper));align-self:start;padding:14px 0 16px}
.publication-heading.section-sticky{padding-top:16px}
.reading section>h2.section-sticky{top:calc(var(--header-height) + 8px)}
.slide-line{display:block}
.line-reader{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
@media(max-width:700px){.section-sticky{padding:10px 0 12px}.publication-heading.section-sticky{padding-top:12px}}

.publications{z-index:auto}
.featured-publication,.publication-entry{position:relative;z-index:2}

.line-reader{user-select:none}
/* Keep hidden reading copies inside their horizontally scrolling slide. */
.publication-slide{position:relative}

/* Remove structural rules; retain focus, tab and disclosure affordances. */
.header::before,.publication-heading,.publication-entry,.reading section{border:0}
.section-sticky,.atlas-chapter h3{background:transparent}
.section-sticky>h2,h2.section-sticky,.atlas-chapter h3{transform-origin:left top;transition:transform 240ms var(--ease-out),color 240ms ease}
.section-sticky.is-pinned>h2,h2.section-sticky.is-pinned{transform:scale(.65);color:rgb(var(--muted),var(--muted),var(--muted))}
.atlas-chapter h3.is-pinned{transform:scale(.72);color:rgb(var(--muted),var(--muted),var(--muted))}
.book-static-light{position:absolute;inset:0;pointer-events:none;opacity:0}
.book-landed .book-static{visibility:visible}
.book-transition-active:not(.book-landed) .book-static-light,.book-transition-active:not(.book-landed) .book-slot::after{visibility:hidden}
.book-slot::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,#0002,transparent 2%,#fff2 3%,transparent 5%);pointer-events:none}
.publication-placeholder{padding:60px 0;display:grid;grid-template-columns:1.2fr 1fr;align-items:center;gap:60px}
.publication-placeholder h3{font:400 clamp(36px,4.2vw,60px)/1.05 'Instrument Serif',Georgia,serif;margin:0 0 24px}
.publication-placeholder p:not(.eyebrow){font-size:14px;color:rgb(var(--muted),var(--muted),var(--muted))}
.publication-number{font:400 clamp(100px,20vw,260px)/1 'Instrument Serif',Georgia,serif;color:rgb(var(--line),var(--line),var(--line));text-align:center;opacity:.55}
.publication-controls[hidden]{display:none}
.publication-controls{display:flex;align-items:center;justify-content:space-between;padding:8px 0 12px}
.publication-controls>div{display:flex;gap:12px}
.publication-controls button{width:48px;height:48px;display:grid;place-items:center;border:0;background:none;cursor:pointer}
.publication-controls button:disabled{opacity:.25;cursor:default}
.publication-controls svg{width:26px;height:26px;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round;transition:transform 180ms var(--ease-out)}
.publication-count{font-size:12px;color:rgb(var(--muted),var(--muted),var(--muted));font-variant-numeric:tabular-nums}
.publications.is-carousel{padding-top:0}
.is-carousel .publication-pin{position:sticky;top:var(--header-height);height:calc(100svh - var(--header-height));display:grid;grid-template-rows:auto minmax(0,1fr) auto}
.is-carousel .publication-heading{position:relative;top:auto;padding:16px 0;z-index:8}
.is-carousel .publication-viewport{overflow:hidden;min-width:0;min-height:0;container-type:size}
.is-carousel .publication-track{display:flex;height:100%}
.is-carousel .publication-slide{flex:0 0 100%;width:100%;min-width:0;height:100%;overflow-y:auto;overscroll-behavior-x:contain;scrollbar-width:thin}
.is-carousel .featured-publication{padding:20px 0 24px;gap:clamp(24px,4vw,64px);grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);align-items:start}
.is-carousel :is(.book-slot,.book-slot-space){width:min(100%,340px,calc((100cqh - 56px)*976/1500))}
.is-carousel .publication-entry{display:flex;flex-direction:column;justify-content:center;gap:16px;padding:32px 0}
.is-carousel .publication-entry>div{max-width:680px}
.is-carousel .publication-entry h3{font-size:clamp(38px,4.2vw,60px);line-height:1.1}
.is-carousel .publication-placeholder{padding:32px 0}
.publications.carousel-reduced{height:auto!important}
.carousel-reduced .publication-pin{position:relative;top:auto}
.carousel-reduced .publication-viewport{overflow-x:auto;scroll-snap-type:x mandatory}
.carousel-reduced .publication-slide{scroll-snap-align:start;scroll-snap-stop:always}
@media(hover:hover) and (pointer:fine){
 .publication-next:not(:disabled):hover svg{transform:translateX(5px)}
 .publication-previous:not(:disabled):hover svg{transform:translateX(-5px)}
}
@media(max-width:700px){
 .is-carousel .publication-heading{padding:10px 0}
 .is-carousel .featured-publication{padding:8px 0;gap:16px;display:block}
 .is-carousel .book-column{padding:0;margin-bottom:16px}
 .is-carousel :is(.book-slot,.book-slot-space){width:clamp(64px,calc((100svh - 470px)*.4),120px)}
 .is-carousel .publication-copy h3{font-size:28px;line-height:1.08}
 .is-carousel .eyebrow{margin-bottom:12px}
 .is-carousel .book-byline{margin:12px 0 14px;font-size:12px}
 .is-carousel .book-introduction{font-size:13px;line-height:1.65}
 .is-carousel .publisher-link{margin:10px 0;font-size:12px;min-height:40px;padding:4px 0}
 .publication-placeholder{grid-template-columns:1fr;gap:20px}
 .publication-number{text-align:left;font-size:140px}
}
html[data-motion=reduced] .section-sticky>h2,html[data-motion=reduced] h2.section-sticky,html[data-motion=reduced] .atlas-chapter h3,html[data-motion=reduced] .publication-controls svg{transition:none}

.publication-cover-stage{position:absolute;z-index:3;pointer-events:none}
.is-carousel .publication-cover-stage .book-slot{width:100%;height:100%;margin:0}
.publication-cover-stage .book-next{position:absolute;inset:0;display:block;width:100%;height:100%;object-fit:contain;background:rgb(var(--paper),var(--paper),var(--paper));opacity:0}
.publication-cover-stage .book-next[hidden]{display:none}
.publication-cover-stage .book-cover-notice{pointer-events:auto}
.has-stationary-covers .secondary-book-slot{visibility:hidden}

@media(max-width:700px){
 .is-carousel .book-column{margin-bottom:6px}
 .is-carousel .book-byline{margin:8px 0 10px}
 .is-carousel .eyebrow{margin-bottom:8px}
 .is-carousel .publisher-link{margin:6px 0}
 .is-carousel .book-introduction{line-height:1.55}
}

/* The book title shares its first row with the thumbnail on mobile. */
@media(max-width:700px){
 .is-carousel .featured-publication .book-column{float:inline-end;width:72px;margin-block:0 8px;margin-inline:16px 0}
 .is-carousel :is(.book-slot,.book-slot-space){width:72px}
 .is-carousel .publication-copy>.eyebrow,.is-carousel .publication-copy>h3{margin-inline-end:88px}
 .is-carousel .book-introduction{clear:both;padding-top:8px;line-height:1.45}
 .is-carousel .book-introduction p{margin-bottom:8px}
 .is-carousel .book-introduction p:last-child{margin-bottom:0}
 .is-carousel .publisher-link{display:flex;width:fit-content}
 .is-carousel .contributed-publication .book-introduction{margin-top:0}
}
@media(max-width:700px) and (max-height:740px){
 .is-carousel .publication-heading{padding:6px 0}
 .is-carousel .publication-heading h2{font-size:28px;line-height:1.1;transform:none}
 .is-carousel .publication-controls{padding:4px 0}
 .is-carousel .publication-controls button{width:44px;height:44px}
 .is-carousel .featured-publication .book-column{width:64px}
 .is-carousel :is(.book-slot,.book-slot-space){width:64px}
 .is-carousel .publication-copy>.eyebrow,.is-carousel .publication-copy>h3{margin-inline-end:80px}
 .is-carousel .publication-copy h3{font-size:26px}
}

/* Phones with room: a larger cover sits on the right, where the lamp's beam
   reaches it at an angle. The title shares its row on the left (its size eases
   down so "Nuclear Power in Asia" keeps one line), and the text starts below
   the cover across the full measure. The carousel script sizes the cover: it
   measures the text stacked (.is-fitting-cover), gives the cover the height
   left over, and caps it so the title column stays wide enough. */
@media(max-width:700px){
 .has-large-cover.is-fitting-cover.is-carousel .featured-publication .book-column{float:none;width:auto;margin:0 0 18px}
 .has-large-cover.is-fitting-cover.is-carousel .publication-copy>.eyebrow,.has-large-cover.is-fitting-cover.is-carousel .publication-copy>h3{margin-inline-end:0}
 .has-large-cover.is-fitting-cover.is-carousel .book-introduction{clear:none}
 .has-large-cover:not(.is-fitting-cover).is-carousel .featured-publication .book-column{float:inline-end;width:var(--publication-cover-width);margin:0;margin-inline-start:20px}
 .has-large-cover:not(.is-fitting-cover).is-carousel :is(.book-slot-space,.secondary-book-slot){width:var(--publication-cover-width);height:var(--publication-cover-height);margin:0}
 .has-large-cover:not(.is-fitting-cover).is-carousel .publication-copy>.eyebrow{margin:0 0 8px}
 .has-large-cover:not(.is-fitting-cover).is-carousel .publication-copy>h3{margin:0;font-size:clamp(24px,calc((100cqw - var(--publication-cover-width) - 20px) / 7),28px)}
 .has-large-cover:not(.is-fitting-cover).is-carousel .book-introduction{clear:both;margin:0;padding-top:20px}
 .has-large-cover:not(.is-fitting-cover).is-carousel .publisher-link{margin:12px 0 0}
}

/* The studio light paints over page objects, with its control above the beam. */
.header{z-index:60}
.skip-link{z-index:61}
.beam{z-index:55;pointer-events:none}
.lighting-rig{z-index:62}
@media(max-width:700px){.header nav>a[href="#contact"]{display:none}}

/* One navigation tree, disclosed on small screens without hiding the lamp. */
.nav-toggle{display:none}
@media(max-width:700px){
 .header.has-mobile-navigation .nav-toggle:not([hidden]){display:grid;place-items:center;position:relative;width:44px;height:44px;padding:0;border:0;background:none;cursor:pointer;pointer-events:auto;margin-right:-10px}
 .nav-toggle span{position:absolute;left:12px;top:17px;width:20px;height:1px;background:currentColor;transition:transform 180ms var(--ease-out)}
 .nav-toggle span+span{top:25px}
 .nav-toggle[aria-expanded=true] span:first-child{transform:translateY(4px) rotate(45deg)}
 .nav-toggle[aria-expanded=true] span:last-child{transform:translateY(-4px) rotate(-45deg)}
 .header.has-mobile-navigation nav{position:absolute;top:calc(var(--header-height) + 12px);left:24px;right:24px;display:flex;flex-direction:column;align-items:stretch;gap:4px;padding:20px 24px;max-height:calc(100svh - var(--header-height) - 40px);overflow-y:auto;overscroll-behavior:contain;background:rgb(var(--paper),var(--paper),var(--paper));box-shadow:0 18px 48px #0004;font-size:18px;opacity:0;visibility:hidden;pointer-events:none;transform:translateY(-8px) scale(.98);transform-origin:top right;transition:opacity 180ms var(--ease-out),transform 220ms var(--ease-out),visibility 0s 220ms}
 .header.has-mobile-navigation.nav-open nav{opacity:1;visibility:visible;pointer-events:auto;transform:none;transition-delay:0s}
 .header.has-mobile-navigation nav>a{display:flex;align-items:center;min-height:44px}
 .header.has-mobile-navigation .resume-menu summary{font-size:18px}
 .header.has-mobile-navigation .resume-panel{position:static;width:100%;padding:4px 0 0;border:0;box-shadow:none}
 .header.has-mobile-navigation .resume-panel a,.header.has-mobile-navigation .resume-panel button{padding-left:0;padding-right:0;font-size:14px}
}
@media (max-width:700px){html[data-motion=reduced] .header.has-mobile-navigation nav{transform:none;transition:opacity 120ms linear,visibility 0s 120ms}html[data-motion=reduced] .header.has-mobile-navigation.nav-open nav{transition-delay:0s}html[data-motion=reduced] .nav-toggle span{transition:none}
}

/* Fit the reading spread to its actual pane, including short desktop windows.
   Keep native overflow available for enlarged type rather than clipping copy. */
@container (min-width:600px) and (max-height:560px){
 .is-carousel .featured-publication{padding-block:12px;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr)}
 .is-carousel .eyebrow{margin-block-end:12px}
 .is-carousel .book-byline{margin-block:12px 16px}
 .is-carousel .book-introduction{line-height:1.55}
 .is-carousel .book-introduction p{margin-block-end:8px}
 .is-carousel .publisher-link{margin-block:12px 0;min-height:40px}
}
.is-carousel .publication-copy{min-inline-size:0;overflow-wrap:anywhere}
@container (min-width:600px) and (max-height:410px){
 .is-carousel .featured-publication{padding-block:8px}
 .is-carousel .book-introduction p{margin-block-end:6px}
 .is-carousel .publication-copy h3{font-size:30px}
 .is-carousel .book-introduction{line-height:1.5}
 .is-carousel .eyebrow{margin-block-end:8px}
 .is-carousel .book-byline{margin-block:8px 12px}
 .is-carousel .publisher-link{margin-block:8px 0}
}

@media(min-width:701px){.is-carousel .book-introduction{margin-block-start:12px}}

[dir="rtl"] .publication-controls svg{scale:-1 1}
