/* A restrained shared editorial layer across the existing layouts. */
:root{--editorial-rule:#354143;--editorial-text:#d7e0e0;--editorial-accent:#a7d8e2}
main h1,main h2{text-wrap:balance}
.eyebrow,.overline{color:var(--editorial-accent)}
.section-head{align-items:end}
.photo button img,.project-card img{transition:transform .35s ease,filter .35s ease}
@media(hover:hover){.photo button:hover img,.photo button:focus-visible img{filter:brightness(1.07)}.project-card:hover img{filter:brightness(1.05)}}
.photo button:focus-visible,.project-card:focus-visible{outline:3px solid #a8dce4;outline-offset:4px}
@media(prefers-reduced-motion:reduce){.photo button img,.project-card img{transition:none}.project-card:hover img{transform:none}}
/* The live status must not reserve space before there is a message. */
.contact-links .copy-status:empty{display:none}
/* YouTube requires embedded players to be at least 200 by 200 CSS pixels. */
.video-grid iframe{min-height:200px}
.hero-copy h1.chinese-name{letter-spacing:.04em;white-space:nowrap;font-size:clamp(50px,7vw,112px)}
@media(max-width:700px){.hero-copy h1.chinese-name{font-size:clamp(50px,13vw,82px)}}
