@font-face {
  font-family: Editorial;
  src: url('BodoniModa-Variable.woff2') format('woff2'), url('BodoniModa-Variable.ttf') format('truetype');
  font-weight: 400 900;
  font-display: swap;
}
:root {
  color-scheme: dark;
  --bg: #0b0c10;
  --surface: #14151b;
  --text: #f3f0e9;
  --muted: #aaa9b3;
  --line: #30313a;
  --lavender: #c7b8f2;
  --peach: #efb5a8;
  --ice: #b9dfe7;
  --spectrum: linear-gradient(105deg, #f0c4b1 0%, #d6bbdf 42%, #bdbef3 72%, #badfe3 100%);
  --gutter: clamp(20px, 3.2vw, 64px);
  --ease: cubic-bezier(.22, 1, .36, 1);
  /* One easing family, four durations: colour, micro transforms, rises and fades, title lines. */
  --t1: .2s; --t2: .4s; --t3: .7s; --t4: 1s;
}
* { box-sizing: border-box; }
html { scroll-behavior: smooth; scroll-padding-top: 24px; background: var(--bg); }
body {
  margin: 0; background: var(--bg); color: var(--text);
  font-family: Arial, Helvetica, sans-serif; -webkit-font-smoothing: antialiased;
}
a { color: inherit; text-decoration: none; }
button { font: inherit; color: inherit; cursor: pointer; }
a, button, summary { -webkit-tap-highlight-color: transparent; }
a:focus-visible, button:focus-visible, summary:focus-visible {
  outline: 2px solid var(--ice); outline-offset: 6px; border-radius: 2px;
}
::selection { background: #695180; color: #fff; }
h1, h2, h3, p { margin: 0; }
img, video { display: block; width: 100%; height: auto; }
em { font-family: Editorial, Georgia, serif; font-weight: 400; font-style: italic; letter-spacing: -.04em; }
main { padding: 0 var(--gutter); }
.header {
  display: flex; align-items: center; gap: 32px; height: 84px;
  margin: 0 var(--gutter); border-bottom: 1px solid var(--line);
}
.wordmark { display: inline-flex; align-items: center; min-height: 44px; font-weight: 500; letter-spacing: -1px; white-space: nowrap; }
.header .wordmark { font-size: 23px; }
.signature-dot {
  display: inline-block; overflow: hidden; color: transparent;
  vertical-align: 3px; width: 6px; height: 6px; margin-left: 7px;
  border-radius: 50%; background: var(--spectrum); box-shadow: 0 0 13px #c7b8f23b; transition: box-shadow var(--t2) var(--ease);
}
.header nav { display: flex; gap: 30px; margin-left: auto; }
.header nav a {
  display: inline-flex; align-items: center; gap: 8px; min-height: 44px;
  font-size: 13px; color: var(--muted); position: relative;
}
.header nav a[aria-current] { color: var(--text); }
.header nav a[aria-current]::after {
  content: ''; position: absolute; bottom: 4px; left: 0; right: 0;
  height: 1px; background: var(--spectrum);
}
.languages { display: flex; align-items: center; margin-left: 26px; font-size: 13px; }
.languages a { display: grid; place-items: center; min-width: 44px; min-height: 44px; color: var(--muted); }
.languages a[lang=en] { place-items: center end; }
.languages a[lang=ja] { place-items: center start; }
.languages [aria-current] { color: var(--text); text-decoration: underline; text-underline-offset: 5px; }
.languages > span { color: var(--muted); padding: 0 8px; }
/* Home opening: full-bleed loop, header floating over it, the rest of the page slides over the hero like a curtain. */
.home main { padding: 0; }
.home .page { position: relative; z-index: 1; background: var(--bg); padding: 0 var(--gutter); }
.home .header {
  position: absolute; top: 0; left: var(--gutter); right: var(--gutter); z-index: 3; margin: 0;
  border-bottom-color: #f3f0e929; animation: fade var(--t3) var(--ease) .3s both;
}
.home .header nav a, .home .languages a, .home .languages > span { color: #d9d6df; }
.home .header nav a[aria-current], .home .languages [aria-current] { color: var(--text); }
/* 56 px short of the viewport so the "Selected work" bar shows at the fold: the content is the scroll cue.
   The hero scrolls away with the page (Rémy turned down the sticky curtain). */
.hero {
  position: relative; height: calc(100vh - 56px); height: calc(100svh - 56px); min-height: 620px; max-height: 1240px;
  display: flex; align-items: flex-end; padding: 0 var(--gutter) clamp(72px, 9vh, 96px);
  overflow: clip; isolation: isolate; background: var(--bg);
}
.hero-media { position: absolute; inset: 0; z-index: -3; transform-origin: 50% 60%; animation: hero-zoom 2.4s var(--ease) both; }
.hero-media img, .hero-media video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: 50% 55%; }
.hero-media video { opacity: 0; transition: opacity var(--t3) var(--ease); }
.hero-media video.is-playing { opacity: 1; }
.hero::before {
  content: ''; position: absolute; inset: 0; z-index: -1; pointer-events: none;
  background:
    linear-gradient(0deg, #0b0c10e6 0%, #0b0c10a6 28%, #0b0c104d 52%, transparent 70%),
    linear-gradient(180deg, #0b0c1099 0, transparent 160px),
    radial-gradient(ellipse 70% 80% at 0% 100%, #0b0c1080, transparent 70%);
}
/* Static grain hides banding in the dark gradients and softens the upscaled video. */
.hero::after {
  content: ''; position: absolute; inset: 0; z-index: -1; pointer-events: none; opacity: .07; mix-blend-mode: soft-light;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}
.hero-veil { position: absolute; inset: 0; z-index: 1; pointer-events: none; background: var(--bg); opacity: 0; animation: hero-veil 1.4s var(--ease) both; }
/* The hero sits on the page's 12-column grid: lead and "Now showing" share column 8 with the second card below. */
.hero-content { position: relative; z-index: 2; width: 100%; display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); column-gap: 26px; align-items: end; }
.hero-main { grid-column: 1 / 8; }
.hero .intro-aside { grid-column: 8 / -1; justify-self: start; max-width: 32em; }
.hero .eyebrow { color: #d9d6df; animation: rise var(--t3) var(--ease) .3s both; }
.hero h1 { font-size: clamp(56px, 7.2vw, 128px); font-weight: 400; line-height: .98; letter-spacing: -.055em; margin-top: 17px; }
.hero h1 .line { display: block; overflow: hidden; padding-bottom: .14em; margin-bottom: -.14em; }
.hero h1 .line > * { display: inline-block; animation: line-up var(--t4) var(--ease) .45s both; }
.hero h1 em {
  line-height: 1.12; padding-right: .08em; font-weight: 500;
  background: var(--spectrum); background-clip: text; -webkit-background-clip: text; color: transparent;
  background-size: 155% 100%; animation: line-up var(--t4) var(--ease) .57s both, em-sweep 2.4s var(--ease) 1s both;
}
.hero .intro-aside, .hero-strip { animation: rise var(--t3) var(--ease) .6s both; }
.hero .intro-aside p { color: #d9d6df; font-size: 17px; line-height: 1.6; }
.hero-strip {
  grid-column: 1 / -1; display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); column-gap: 26px; align-items: end;
  margin-top: clamp(28px, 4vh, 48px); padding-top: 18px; border-top: 1px solid #f3f0e929;
}
.hero-proof { grid-column: 1 / 8; font-size: 13px; line-height: 1.5; color: #d9d6df; }
.proof-label { display: block; font-size: 11px; letter-spacing: .12em; text-transform: uppercase; color: var(--muted); margin-bottom: 6px; }
.hero-proof ul { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 0 10px; }
.hero-proof li { white-space: nowrap; }
.hero-proof li + li::before { content: '·'; margin-right: 10px; color: var(--muted); }
.hero-now { grid-column: 8 / -1; justify-self: start; position: relative; display: inline-flex; align-items: center; gap: 14px; min-height: 44px; font-size: 13px; white-space: nowrap; }
.hero-now-label { color: var(--muted); font-size: 11px; letter-spacing: .12em; text-transform: uppercase; }
.hero-now-title { display: inline-flex; align-items: baseline; gap: 10px; }
.hero-now > span:last-of-type { transition: transform var(--t2) var(--ease), color var(--t1) var(--ease); }
.hero-progress { position: absolute; left: 0; right: 0; bottom: 2px; height: 1px; background: var(--spectrum); transform: scaleX(var(--p, 0)); transform-origin: left; }
@keyframes hero-veil { from { opacity: 1; } to { opacity: 0; } }
@keyframes hero-zoom { from { transform: scale(1.06); } to { transform: none; } }
@keyframes fade { from { opacity: 0; } to { opacity: 1; } }
@keyframes rise { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: none; } }
@keyframes line-up { from { transform: translateY(105%); } to { transform: none; } }
@keyframes em-sweep { from { background-position: 0% 50%; } to { background-position: 100% 50%; } }
/* Once-only entrances after the fold, set by the observer in app.js; without JS everything is simply visible. */
.section-bar { position: relative; border-top: 0; }
.section-bar::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 1px; background: var(--line); transform-origin: left; }
html.js .section-bar::before { transform: scaleX(0); transition: transform var(--t4) var(--ease); }
html.js .section-bar > * { opacity: 0; transform: translateY(8px); transition: opacity var(--t3) var(--ease), transform var(--t3) var(--ease); }
html.js .section-bar > span { transition-delay: .12s; }
html.js .section-bar.is-in::before { transform: none; }
html.js .section-bar.is-in > * { opacity: 1; transform: none; }
html.js .project .caption { opacity: 0; transform: translateY(8px); transition: opacity var(--t3) var(--ease), transform var(--t3) var(--ease); }
html.js .project.is-in .caption { opacity: 1; transform: none; }
/* Scroll-driven layers: a progressive enhancement, the plain curtain remains without support. */
@supports (animation-timeline: scroll()) {
  @keyframes hero-scroll-media { to { transform: scale(1.08); } }
  @keyframes hero-scroll-text { to { transform: translateY(-8vh); opacity: 0; } }
  @keyframes card-open { from { clip-path: inset(10% 0 0 0 round 3px); } to { clip-path: inset(0 round 3px); } }
  @keyframes card-settle { from { transform: scale(1.08); } to { transform: none; } }
  .hero-media img, .hero-media video { animation: hero-scroll-media linear both; animation-timeline: scroll(root); animation-range: 0 100vh; }
  .hero-content { animation: hero-scroll-text linear both; animation-timeline: scroll(root); animation-range: 0 60vh; }
  .work-grid .media { animation: card-open var(--ease) both; animation-timeline: view(); animation-range: entry 0% entry 60%; }
  .work-grid .media > img, .work-grid .media > video { animation: card-settle var(--ease) both; animation-timeline: view(); animation-range: entry 0% entry 60%; }
}
.eyebrow { text-transform: uppercase; font-size: 11px; letter-spacing: .12em; line-height: 1.6; font-weight: 400; color: var(--muted); }
.live-dot { display: inline-block; width: 12px; height: 1px; background: var(--lavender); margin-right: 10px; vertical-align: 4px; }
.intro-aside { padding-bottom: 9px; }
.intro-aside p { font-size: 15px; line-height: 1.6; color: var(--muted); }
.text-link {
  display: inline-flex; gap: 28px; align-items: center; font-size: 13px;
  min-height: 44px; padding: 12px 0 8px; border-bottom: 1px solid #7c7c86;
  transition: color var(--t1) var(--ease), border-color var(--t1) var(--ease);
}
.text-link span { transition: transform var(--t2) var(--ease); }
.section-bar { padding: 18px 0 23px; display: flex; justify-content: space-between; align-items: center; gap: 15px; }
.section-bar h2, .section-bar > span { font-size: 11px; font-weight: 400; letter-spacing: .12em; text-transform: uppercase; }
.section-bar > span { color: var(--muted); }
.work-grid { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); column-gap: 26px; row-gap: 64px; }
.project { min-width: 0; --project-accent: var(--lavender); }
.project[data-tags^=animation] { --project-accent: var(--ice); }
.project[data-tags^=motion] { --project-accent: var(--peach); }
/* Home rhythm after the hero: 7/5, mirrored 5/7, a 21:9 band as a breath, then 6/6. */
.home-grid .project { grid-column: span 6; }
.home-grid .project:nth-child(1), .home-grid .project:nth-child(4) { grid-column: span 7; }
.home-grid .project:nth-child(2), .home-grid .project:nth-child(3) { grid-column: span 5; }
.home-grid .project:nth-child(5) { grid-column: span 12; margin-block: 32px; }
.media { background: var(--surface); position: relative; overflow: hidden; aspect-ratio: 16/9; isolation: isolate; border-radius: 3px; transition: opacity var(--t2) var(--ease) .12s; }
.media img, .media video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: scale var(--t4) var(--ease); }
.media video { opacity: 0; transition: opacity var(--t2) var(--ease), scale var(--t4) var(--ease); }
.media video.is-playing { opacity: 1; }
.media.portrait { aspect-ratio: 4/5; background: var(--surface); }
.media.portrait img, .media.portrait video { object-fit: contain; }
.home-grid .project:nth-child(-n+4) .media { aspect-ratio: 16/10; }
/* The 5-column cards take 9/8 so each asymmetric pair shares one caption line. */
.home-grid .project:nth-child(2) .media, .home-grid .project:nth-child(3) .media { aspect-ratio: 9/8; }
.home-grid .project:nth-child(5) .media { aspect-ratio: 21/9; }
.project-link { display: block; position: relative; }
.project-link::after {
  content: ''; position: absolute; bottom: -12px; left: 0; width: 70px; height: 1px;
  background: linear-gradient(90deg, var(--project-accent), transparent);
  opacity: 0; transform: scaleX(.3); transform-origin: left;
  transition: opacity .35s, transform .45s var(--ease);
}
.caption { display: flex; justify-content: space-between; align-items: baseline; padding-top: 16px; gap: 18px; }
.caption-main { display: grid; grid-template-columns: 22px 1fr; gap: 10px; align-items: baseline; }
.caption-index { color: var(--muted); font-size: 11px; font-variant-numeric: tabular-nums; transition: color var(--t1) var(--ease); }
.caption h3 { font-size: 17px; font-weight: 400; letter-spacing: -.015em; line-height: 1.35; }
.caption p { font-size: 13px; line-height: 1.5; color: var(--muted); margin-top: 4px; }
.project-arrow {
  font-size: 20px; line-height: 1.4; color: var(--muted); min-width: 26px; text-align: right;
  transition: transform var(--t2) var(--ease), color var(--t1) var(--ease);
}
.project-link:focus-visible::after { opacity: 1; transform: scaleX(1); }
.project-link:focus-visible .project-arrow, .project-link:focus-visible .caption-index { color: var(--project-accent); }
.all-link {
  display: flex; justify-content: space-between; align-items: center; border-top: 1px solid var(--line);
  border-bottom: 1px solid var(--line); font-size: 21px; letter-spacing: -.025em;
  margin-top: 64px; padding: 26px 0; transition: color var(--t1) var(--ease);
}
.all-link span { font-size: 28px; transition: transform var(--t2) var(--ease); }
/* Portrait on columns 1 to 4, copy from column 8: the same axis as the hero lead and the second card. */
.about-spread { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); column-gap: 26px; padding: 116px 0; }
.portrait-wrap { position: relative; align-self: start; grid-column: 1 / 5; }
.portrait-wrap img { aspect-ratio: 4/5; object-fit: cover; object-position: 50% 40%; border-radius: 3px; }
.portrait-wrap > span { font-size: 13px; display: block; margin-top: 15px; color: var(--muted); }
.about-copy { align-self: center; grid-column: 8 / -1; }
.about-copy h2 { font-size: clamp(36px, 4.15vw, 70px); font-weight: 400; line-height: 1.14; letter-spacing: -.045em; margin: 22px 0; }
.about-copy > p:not(.eyebrow) { font-size: 17px; line-height: 1.6; max-width: 560px; margin: 16px 0; color: #c4c2cb; }
.about-copy .text-link { margin-top: 16px; }
.home .portrait-wrap { max-width: 360px; }
.home .portrait-wrap img { aspect-ratio: 1; }
.practice { border-top: 1px solid var(--line); margin-top: 32px; padding-top: 27px; }
.practice h3 { font-size: 12px; letter-spacing: .06em; margin-bottom: 24px; font-weight: 400; color: var(--muted); }
.practice a { font-size: 18px; text-decoration: underline; text-underline-offset: 6px; }
.practice p { margin: 10px 0 25px; font-size: 15px; line-height: 1.7; color: var(--muted); }
footer { background: #0d0e13; padding: 44px var(--gutter) 90px; border-top: 1px solid var(--line); position: relative; isolation: isolate; overflow: hidden; }
footer::before {
  content: ''; position: absolute; z-index: -1; pointer-events: none; width: min(800px, 80vw); height: 460px;
  right: -10%; top: -110px; background: radial-gradient(ellipse at center, #ab6f9323, #736ea81a 34%, transparent 69%);
}
.contact-top { display: flex; justify-content: space-between; gap: 20px; }
.contact-top > p:last-child { font-size: 13px; color: var(--muted); }
footer h2 { font-size: clamp(64px, 8.5vw, 144px); font-weight: 400; letter-spacing: -.055em; line-height: 1.16; margin: 28px 0 24px; }
footer h2 em { background: var(--spectrum); background-clip: text; -webkit-background-clip: text; color: transparent; }
.contact-row { display: flex; align-items: flex-end; flex-wrap: wrap; gap: 14px 36px; }
.email { font-size: clamp(20px, 2.6vw, 44px); display: inline-flex; gap: 36px; letter-spacing: -.025em; max-width: 100%; overflow-wrap: anywhere; border-bottom: 1px solid #7c7c86; padding: 0 0 12px; cursor: pointer; }
.email > span:last-child { transition: transform var(--t2) var(--ease), color var(--t1) var(--ease); }
.copy-email { border: 1px solid #565562; border-radius: 5px; background: transparent; color: var(--muted); font-size: 13px; min-height: 44px; padding: 10px 16px; margin-bottom: 6px; transition: color var(--t1) var(--ease), border-color var(--t1) var(--ease); }
.copy-email[hidden] { display: none; }
.copy-status { font-size: 13px; color: var(--lavender); min-height: 44px; display: inline-flex; align-items: center; margin-bottom: 6px; }
.footer-bottom { border-top: 1px solid var(--line); margin-top: 62px; padding-top: 20px; display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); column-gap: 26px; align-items: center; font-size: 13px; color: var(--muted); }
.footer-bottom > p { grid-column: 1 / 8; }
.footer-bottom > .pdf-link { grid-column: 8 / 11; text-decoration: underline; text-underline-offset: 5px; }
.footer-bottom > div { grid-column: 11 / -1; display: flex; gap: 24px; justify-content: flex-end; }
.footer-bottom a { display: inline-flex; align-items: center; min-height: 44px; }
/* Icon-only motion control: a 44 px circle with its name for assistive tech, so it covers as little work as possible. */
.motion-control {
  position: fixed; z-index: 20; right: 20px; bottom: 18px; width: 44px; height: 44px; padding: 0; border: 1px solid #3a3a46;
  border-radius: 50%; background: #16161ecc; color: #e7e4ee; font-size: 13px; display: flex; justify-content: center; align-items: center;
  box-shadow: 0 4px 20px #0003; transition: border-color var(--t1) var(--ease), background var(--t1) var(--ease);
}
.motion-control[hidden], .filters[hidden], .project[hidden] { display: none; }
.skip { position: fixed; top: -80px; left: 20px; padding: 16px; background: #25212d; color: var(--text); z-index: 100; }
.skip:focus { top: 15px; }
.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; }
.page-heading { padding: 56px 0 40px; }
.page-heading h1 { font-size: clamp(56px, 7.2vw, 128px); font-weight: 400; line-height: .98; letter-spacing: -.055em; margin: 16px 0 20px; }
.page-heading > p:last-child:not(.eyebrow) { font-size: 17px; color: var(--muted); line-height: 1.6; }
.filters { display: flex; gap: 32px; flex-wrap: wrap; border-top: 1px solid var(--line); padding: 16px 0 27px; }
.filters button { padding: 10px 0; border: 0; border-bottom: 1px solid transparent; background: transparent; font-size: 13px; min-height: 44px; color: var(--muted); transition: color var(--t1) var(--ease); }
.filters button[aria-pressed=true] { color: var(--text); border-bottom-color: var(--lavender); }
sup { font-size: 11px; margin-left: 5px; vertical-align: 4px; color: var(--muted); }
/* The count stays for assistive tech (role=status); the filter superscripts already show it. */
.result-count { position: absolute; width: 1px; height: 1px; padding: 0; margin: 0; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; }
.archive-grid .project { grid-column: span 4; }
.archive-grid .media { aspect-ratio: 4/3; }
.collection { padding-bottom: 100px; }
.about-page .page-heading { padding-bottom: 0; }
.about-page .about-spread { padding-top: 42px; }
.project-heading { padding: 30px 0 28px; }
.project-title { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); column-gap: 26px; align-items: baseline; padding-top: 30px; }
.project-title h1 { grid-column: 1 / 8; font-size: clamp(42px, 5.8vw, 88px); font-weight: 400; line-height: 1.1; letter-spacing: -.045em; overflow-wrap: anywhere; }
.project-title > p { grid-column: 8 / -1; font-size: 13px; line-height: 1.6; color: var(--muted); }
.project-hero .media { aspect-ratio: 16/9; background: var(--bg); }
.project-hero .media img, .project-hero .media video { object-fit: contain; }
.project-hero .portrait { aspect-ratio: 9/16; max-width: 620px; margin-inline: auto; }
/* Sources under 1000 px wide are shown at a size that never upscales them past what they hold. */
.project-hero .lowres { max-width: 820px; margin-inline: auto; }
.project-description { display: grid; grid-template-columns: 1fr 2fr; gap: 8%; padding: 60px 0; }
.discipline { font-size: 13px; color: var(--muted); line-height: 1.6; margin-top: 15px; }
.project-description > div > p:not(.eyebrow):not(.discipline) { font-size: 19px; line-height: 1.55; max-width: 720px; color: #d4d1da; }
.credits { margin-top: 28px; border-top: 1px solid var(--line); }
.credits summary, .film-player summary { list-style: none; display: flex; justify-content: space-between; align-items: center; gap: 20px; cursor: pointer; font-size: 13px; padding: 21px 0; min-height: 44px; }
summary::-webkit-details-marker { display: none; }
.credits summary::after, .film-player summary::after { content: '+'; font-size: 22px; font-weight: 300; color: var(--lavender); }
details[open] > summary::after { content: '−'; }
.credits p { font-size: 13px; line-height: 1.6; padding-bottom: 22px; white-space: pre-line; color: var(--muted); }
.extra-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 26px; padding-bottom: 50px; }
.extra-grid img { height: 100%; object-fit: cover; border-radius: 3px; }
.original-gallery { margin: 0 0 30px; }
.original-gallery img { height: auto; object-fit: contain; }
.film-player { margin: 26px 0 0; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); }
.film-player video { max-height: 70vh; background: var(--bg); margin-bottom: 25px; }
.next-project { padding: 40px 0 85px; margin-left: calc((100% + 26px) * 5 / 12); }
.next-project > .eyebrow { margin-bottom: 18px; }
html[lang=ja] body { font-family: Arial, 'Hiragino Kaku Gothic ProN', 'Yu Gothic', sans-serif; }
html[lang=ja] h1, html[lang=ja] h2, html[lang=ja] em { letter-spacing: -.04em; }
html[lang=ja] em { font-family: 'Hiragino Mincho ProN', 'Yu Mincho', serif; font-style: normal; }
html[lang=ja] .hero h1 { font-size: clamp(44px, 5.6vw, 96px); line-height: 1.2; }
html[lang=ja] .proof-label, html[lang=ja] .hero-now-label, html[lang=ja] .section-bar h2, html[lang=ja] .section-bar > span { letter-spacing: .04em; }
html[lang=ja] .intro-aside p, html[lang=ja] .about-copy > p:not(.eyebrow), html[lang=ja] .project-description > div > p:not(.eyebrow):not(.discipline) { line-height: 1.85; }
html[lang=ja] .eyebrow { letter-spacing: .04em; }
html[lang=ja] .intro-aside { max-width: 380px; }
html[lang=ja] .intro-aside p { font-size: 15px; }
html[lang=ja] .caption p { line-height: 1.85; }
@media (hover: hover) and (pointer: fine) {
  .hero-now:hover { color: var(--lavender); }
  .hero-now:hover > span:last-of-type { transform: translate(3px, -3px); color: var(--peach); }
  /* One card in focus: the others step back, the active media breathes inside its frame, nothing moves in the layout.
     The 120 ms restore delay keeps a pointer crossing a gutter from flashing the row. */
  .work-grid:has(.project-link:is(:hover, :focus-visible)) .project:not(:has(.project-link:is(:hover, :focus-visible))) .media { opacity: .55; transition-delay: 0s; }
  .project-link:is(:hover, :focus-visible) .media { transition-delay: 0s; }
  .project-link:is(:hover, :focus-visible) .media > img, .project-link:is(:hover, :focus-visible) .media > video { scale: 1.035; }
  .header nav a:hover, .footer-bottom a:hover, .filters button:hover { color: var(--text); }
  .header .wordmark:hover .signature-dot { box-shadow: 0 0 19px #c7b8f278; }
  .project-link:hover .project-arrow { transform: translate(3px, -3px); color: var(--project-accent); }
  .project-link:hover .caption-index { color: var(--project-accent); }
  .project-link:hover::after { opacity: 1; transform: scaleX(1); }
  .text-link:hover { color: var(--ice); border-color: var(--ice); }
  .text-link:hover span { transform: translateY(3px); }
  .all-link:hover { color: var(--lavender); }
  .all-link:hover span, .email:hover > span:last-child { transform: translate(3px, -3px); color: var(--peach); }
  .copy-email:hover { color: var(--text); border-color: var(--lavender); }
  .motion-control:hover { border-color: var(--lavender); background: #25212d; }
  .credits summary:hover, .film-player summary:hover { color: var(--ice); }
}
@media (min-width: 1800px) {
  main, footer, .hero, .home .page { padding-inline: max(var(--gutter), calc((100vw - 1740px)/2)); }
  .header { margin-inline: max(var(--gutter), calc((100vw - 1740px)/2)); }
  .home main { padding-inline: 0; }
  .home .header { left: max(var(--gutter), calc((100vw - 1740px)/2)); right: max(var(--gutter), calc((100vw - 1740px)/2)); }
}
@media (max-width: 1024px) {
  .header { height: 78px; gap: 24px; }
  .header nav { gap: 22px; }
  .languages { margin-left: 0; }
  .hero-content, .hero-strip { column-gap: 20px; }
  .hero-main, .hero-proof { grid-column: 1 / 9; }
  .hero .intro-aside, .hero-now { grid-column: 9 / -1; }
  .hero h1 { font-size: 7.4vw; }
  .hero .intro-aside p { font-size: 15px; }
  .work-grid { gap: 48px 20px; }
  .archive-grid .project { grid-column: span 6; }
  .about-spread { column-gap: 20px; padding: 90px 0; }
  .about-copy { grid-column: 7 / -1; }
  .about-copy > p:not(.eyebrow) { font-size: 16px; }
}
@media (max-width: 680px) {
  .header { height: auto; min-height: 100px; display: grid; grid-template-columns: 1fr auto; gap: 0 10px; padding: 5px 0; }
  .header .wordmark { font-size: 22px; }
  .header nav { grid-row: 2; grid-column: 1/-1; justify-content: flex-start; gap: 28px; margin: 0; }
  .header nav a { font-size: 13px; }
  .header nav a[aria-current]::after { bottom: 3px; }
  .languages { grid-column: 2; grid-row: 1; }
  .hero { height: min(88svh, 760px); min-height: 560px; padding-bottom: 22px; }
  .hero::before {
    background:
      linear-gradient(0deg, #0b0c10e6 0%, #0b0c10b3 30%, #0b0c1033 58%, transparent 72%),
      linear-gradient(180deg, #0b0c10a6 0, transparent 200px);
  }
  .hero-media img, .hero-media video { object-position: 40% 50%; }
  .hero-content { display: block; }
  .eyebrow { font-size: 11px; }
  .hero h1 { font-size: clamp(42px, 12.3vw, 64px); letter-spacing: -.04em; margin-top: 17px; line-height: 1; }
  .intro-aside { margin-top: 14px; max-width: 100%; width: 100%; padding: 0; }
  .hero .intro-aside p { font-size: 16px; line-height: 1.5; }
  .hero-strip { display: block; margin-top: 16px; padding-top: 14px; }
  .hero-proof ul { display: block; }
  .hero-proof li { display: block; }
  .hero-proof li + li::before { content: none; }
  .hero-now { margin-top: 8px; white-space: normal; }
  .section-bar { flex-wrap: wrap; gap: 4px 16px; }
  .section-bar h2 { white-space: nowrap; }
  .section-bar { padding: 16px 0 18px; }
  .section-bar h2, .section-bar > span { font-size: 11px; }
  .work-grid { grid-template-columns: 1fr; row-gap: 34px; }
  .home-grid .project:nth-child(n), .archive-grid .project { grid-column: 1; margin-block: 0; }
  .home-grid .project:nth-child(n) .media, .archive-grid .media { aspect-ratio: 16/10; }
  .caption { padding-top: 14px; }
  .caption h3 { font-size: 17px; }
  .caption p { font-size: 12px; }
  .caption-main { grid-template-columns: 18px 1fr; gap: 8px; }
  .all-link { margin-top: 40px; padding: 20px 0; font-size: 19px; }
  .about-spread { grid-template-columns: 1fr; gap: 34px; padding: 66px 0; }
  .portrait-wrap, .about-copy { grid-column: auto; }
  .portrait-wrap { max-width: 80%; }
  .home .portrait-wrap { max-width: 65%; }
  .portrait-wrap img { aspect-ratio: 1; }
  .about-copy h2 { font-size: 39px; margin: 20px 0; }
  .about-copy > p:not(.eyebrow) { font-size: 16px; }
  footer { padding-top: 33px; }
  .contact-top { display: block; }
  .contact-top > p:last-child { margin-top: 12px; }
  footer h2 { font-size: clamp(55px, 14vw, 86px); margin: 25px 0; }
  .email { font-size: clamp(18px, 4.8vw, 28px); gap: 17px; letter-spacing: -.02em; }
  .footer-bottom { display: flex; margin-top: 43px; flex-wrap: wrap; justify-content: space-between; gap: 12px 20px; }
  .footer-bottom > div { width: 100%; justify-content: flex-start; }
  .motion-control { right: 12px; bottom: max(12px, env(safe-area-inset-bottom)); }
  .page-heading { padding: 34px 0 26px; }
  .page-heading h1 { font-size: 62px; margin: 15px 0; letter-spacing: -.045em; }
  .page-heading > p:last-child:not(.eyebrow) { font-size: 15px; }
  .filters { gap: 7px 22px; padding: 12px 0 25px; }
  .project-heading { padding-top: 23px; }
  .project-title { display: block; padding-top: 23px; }
  .project-title h1 { font-size: 40px; letter-spacing: -.035em; }
  .project-title > p { margin-top: 16px; }
  .about-copy h2 { letter-spacing: -.035em; }
  footer h2 { letter-spacing: -.045em; }
  .project-description { grid-template-columns: 1fr; gap: 27px; padding: 36px 0; }
  .project-description > div > p:not(.eyebrow):not(.discipline) { font-size: 17px; }
  .extra-grid { grid-template-columns: 1fr; gap: 18px; padding-bottom: 35px; }
  .next-project { margin-left: 0; padding: 25px 0 65px; }
  .about-page .about-spread { padding-top: 24px; }
  html[lang=ja] .hero h1 { font-size: clamp(36px, 9.5vw, 57px); line-height: 1.25; }
  html[lang=ja] .intro-aside p { font-size: 14px; }
  html[lang=ja] .about-copy h2 { font-size: 35px; }
  html[lang=ja] footer h2 { font-size: clamp(35px, 9.5vw, 57px); }
}
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { animation: none !important; transition: none !important; }
}
@media (forced-colors: active) {
  .hero h1 em, footer h2 em { background: none; color: CanvasText; }
  .project-link::after, .hero::before, .hero::after, .hero-veil, footer::before { display: none; }
  .header nav a[aria-current] { text-decoration: underline; }
}
