/* ─────────────────────────────────────────────
   RYOMANIA — refined personal site
   Tone: monochrome, cinematic, minimal
   ───────────────────────────────────────────── */

:root{
  /* Palette is overridden by Tweaks via [data-palette] attribute on <html> */
  --bg: #f3efe6;          /* kinari / unbleached paper */
  --bg-soft: #ebe6da;
  --ink: #15110d;
  --ink-soft: #4a443c;
  --ink-faint: #8d867a;
  --line: rgba(21,17,13,.16);
  --line-faint: rgba(21,17,13,.08);
  --accent: #15110d;
  --reverse: #f3efe6;

  --grid-gutter: clamp(20px, 4vw, 56px);
  --pad-x: clamp(20px, 5vw, 72px);
  --max: 1440px;

  --f-jp-serif: "Shippori Mincho B1", "Hiragino Mincho ProN", "Yu Mincho", serif;
  --f-jp-sans:  "Noto Sans JP", "Hiragino Sans", "Yu Gothic", sans-serif;
  --f-en-serif: "Bodoni Moda", "Cormorant Garamond", serif;
  --f-en-disp:  "Bodoni Moda", serif;
  --f-mono:     "IBM Plex Mono", ui-monospace, monospace;
}

/* Palette variants ----------------------------------------------------- */
html[data-palette="mono"]{
  --bg:#f4f3ef; --bg-soft:#e9e7e1; --ink:#0a0a0a; --ink-soft:#3a3a38; --ink-faint:#8e8d88;
  --line:rgba(10,10,10,.16); --line-faint:rgba(10,10,10,.07); --accent:#0a0a0a; --reverse:#f4f3ef;
}
html[data-palette="sumi"]{
  --bg:#f1ece1; --bg-soft:#e3dccc; --ink:#1a130d; --ink-soft:#4d4136; --ink-faint:#8c8273;
  --line:rgba(26,19,13,.18); --line-faint:rgba(26,19,13,.08);
  --accent:#8e2417; --reverse:#f1ece1;
}
html[data-palette="dark"]{
  --bg:#0c0b0a; --bg-soft:#16140f; --ink:#ece4d3; --ink-soft:#a59f8e; --ink-faint:#6a6558;
  --line:rgba(236,228,211,.16); --line-faint:rgba(236,228,211,.07);
  --accent:#c5a368; --reverse:#0c0b0a;
}
html[data-palette="warm"]{
  --bg:#ece3d3; --bg-soft:#dfd4bf; --ink:#1d1812; --ink-soft:#4f463a; --ink-faint:#8a7f6d;
  --line:rgba(29,24,18,.18); --line-faint:rgba(29,24,18,.08);
  --accent:#6a4a2c; --reverse:#ece3d3;
}

*,*::before,*::after{box-sizing:border-box}
html,body{margin:0;padding:0;background:var(--bg);color:var(--ink);}
body{
  font-family:var(--f-jp-sans);
  font-weight:400;
  line-height:1.6;
  letter-spacing:.01em;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
  font-feature-settings:"palt";
  overflow-x:hidden;
  transition:background-color .6s ease, color .6s ease;
}

img{display:block;max-width:100%;height:auto}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer}

/* Custom cursor removed — using native cursor */
.cursor-dot,.cursor-ring{display:none !important}

/* Top nav -------------------------------------------------------------- */
.nav{
  position:fixed; top:0; left:0; right:0; z-index:50;
  display:flex; align-items:center; justify-content:space-between;
  padding:18px var(--pad-x);
  font-family:var(--f-mono); font-size:11px; letter-spacing:.18em; text-transform:uppercase;
  color:var(--ink);
  mix-blend-mode:difference;
}
.nav .brand{
  font-family:var(--f-en-disp); font-style:italic; font-weight:500; font-size:18px;
  letter-spacing:.04em; text-transform:none; color:#fff;
}
.nav-links{ display:flex; gap:22px; align-items:center; color:#fff }
.nav-links a{position:relative;}
.nav-links a::after{
  content:""; position:absolute; left:0; right:0; bottom:-6px; height:1px;
  background:currentColor; transform:scaleX(0); transform-origin:left; transition:transform .35s ease;
}
.nav-links a:hover::after{ transform:scaleX(1) }
.nav-right{ display:flex; gap:18px; align-items:center; color:#fff }
.lang-toggle{ display:flex; gap:0; align-items:center; }
.lang-toggle button{
  font:inherit; padding:4px 8px; color:rgba(255,255,255,.5); transition:color .3s ease;
}
.lang-toggle button.on{ color:#fff }
.lang-toggle .sep{ opacity:.4; padding:0 2px; }

/* Section primitives --------------------------------------------------- */
section{
  position:relative;
  padding:clamp(80px, 12vh, 160px) var(--pad-x);
  max-width:var(--max);
  margin:0 auto;
}
.eyebrow{
  font-family:var(--f-mono); font-size:11px; letter-spacing:.24em; text-transform:uppercase;
  color:var(--ink-faint);
}
.eyebrow .dash{display:inline-block;width:24px;height:1px;background:currentColor;vertical-align:middle;margin-right:10px}
.section-head{
  display:flex; align-items:baseline; justify-content:space-between; gap:24px;
  padding-bottom:32px; margin-bottom:48px; border-bottom:1px solid var(--line);
}
.section-head h2{
  font-family:var(--f-jp-serif); font-weight:500; font-size:clamp(28px,3.4vw,42px);
  margin:0; letter-spacing:.04em;
}
.section-head .en{
  font-family:var(--f-en-serif); font-style:italic; font-weight:400;
  font-size:clamp(14px,1.2vw,18px); color:var(--ink-faint); letter-spacing:.06em;
}
.section-num{
  font-family:var(--f-mono); font-size:11px; letter-spacing:.2em; color:var(--ink-faint);
}

/* Scroll reveal -------------------------------------------------------- */
.reveal{ opacity:0; transform:translateY(28px); transition:opacity 1.1s ease, transform 1.1s ease; }
.reveal.in{ opacity:1; transform:none; }
.reveal.delay-1{ transition-delay:.08s } .reveal.delay-2{ transition-delay:.16s }
.reveal.delay-3{ transition-delay:.24s } .reveal.delay-4{ transition-delay:.32s }

/* SplitText — character-staggered reveal --------------------------------- */
.split{ display:inline-block; }
.split .ch{
  display:inline-block;
  opacity:0;
  transform:translateY(.7em);
  transition: opacity .8s cubic-bezier(.2,.7,.2,1), transform .9s cubic-bezier(.2,.75,.2,1);
  will-change:transform,opacity;
}
.split.in .ch,
.reveal.in .split .ch,
.in > .split .ch{ opacity:1; transform:none; }
.split .ch.space{ width:.32em; }
.split.from-tilt .ch{ transform:translateY(.8em) rotate(6deg); transform-origin:0 100%; }
.split.from-tilt.in .ch,
.reveal.in .split.from-tilt .ch{ transform:none; }
.split.from-blur .ch{ filter:blur(8px); }
.split.from-blur.in .ch,
.reveal.in .split.from-blur .ch{ filter:blur(0); }
.split.from-clip .ch{ clip-path:inset(0 0 100% 0); transform:translateY(0); opacity:1;}
.split.from-clip.in .ch,
.reveal.in .split.from-clip .ch{ clip-path:inset(0 0 0 0); }
/* vertical mode for writing-mode:vertical-rl */
.split.vert .ch{ display:block; transform:translateX(.6em); }
.split.vert.in .ch,
.reveal.in .split.vert .ch{ transform:none; }

/* Letter-wave hover (nav links, footer links) ---------------------------- */
.wave{ display:inline-flex; }
.wave .ch{
  display:inline-block; transition:transform .45s cubic-bezier(.2,.8,.2,1);
}
.wave .ch.space{ width:.32em }
a:hover > .wave .ch, button:hover > .wave .ch{
  transform:translateY(-2px);
}
a > .wave .ch, button > .wave .ch{
  transition-delay: calc(var(--i, 0) * 18ms);
}

/* Type that "breathes" — used on the cinematic hero name */
.breathe{
  animation: breathe 7s ease-in-out infinite;
  display:inline-block;
}
@keyframes breathe{
  0%,100%{ letter-spacing:.06em; }
  50%   { letter-spacing:.10em; }
}

/* Slow drift for the section eyebrow dash */
.eyebrow .dash{ animation: dashGrow 1.4s ease forwards .2s; transform:scaleX(0); transform-origin:left;}
.reveal.in .eyebrow .dash, .in .eyebrow .dash{ transform:scaleX(1) }
@keyframes dashGrow{ from{transform:scaleX(0)} to{transform:scaleX(1)} }

/* Pullquote ticker — scrolls horizontally with the tagline ---------------- */
.pullquote{
  margin: clamp(80px, 12vh, 140px) 0 0;
  border-top:1px solid var(--line);
  border-bottom:1px solid var(--line);
  padding: 24px 0;
  overflow:hidden;
  white-space:nowrap;
}
.pullquote .track{
  display:inline-flex; gap: 2.5em; align-items:center;
  font-family:var(--f-jp-serif); font-size:clamp(26px,3.4vw,46px); letter-spacing:.06em;
  animation: pullScroll 36s linear infinite;
}
.pullquote .track .dot{ color:var(--accent); font-family:var(--f-en-disp); font-style:italic; }
.pullquote.en .track{ font-family:var(--f-en-disp); font-style:italic; letter-spacing:.02em; }
@keyframes pullScroll{ from{transform:translateX(0)} to{transform:translateX(-50%)} }

/* Hero-D marquee gets a 2nd row drifting opposite direction */
.hero-D .marquee.reverse .inner{ animation-direction:reverse; animation-duration:32s; opacity:.5; font-size:.6em;}

/* Lang crossfade ------------------------------------------------------- */
.lang{display:inline-block; transition:opacity .35s ease, transform .35s ease;}
.lang.hide{opacity:0; transform:translateY(-4px); position:absolute;pointer-events:none;}

/* ─────────────────  HERO  ───────────────── */
.hero{
  position:relative; max-width:none; padding:0; margin:0;
  height:100vh; min-height:680px; overflow:hidden;
  color:#fff;
}
.hero-img{
  position:absolute; inset:0; background:#111 center/cover no-repeat;
  filter:grayscale(.15) contrast(1.05);
}
.hero-img::after{
  content:""; position:absolute; inset:0;
  background:linear-gradient(180deg, rgba(0,0,0,.45) 0%, rgba(0,0,0,.15) 35%, rgba(0,0,0,.55) 100%);
}
.hero-grain::before{
  content:""; position:absolute; inset:0; pointer-events:none; opacity:.06; mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='180' height='180'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2'/><feColorMatrix values='0 0 0 0 1  0 0 0 0 1  0 0 0 0 1  0 0 0 .8 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");
}

/* Hero A — fullbleed cinematic */
.hero-A .hero-meta{
  position:absolute; left:var(--pad-x); right:var(--pad-x); bottom:8vh;
  display:flex; align-items:flex-end; justify-content:space-between; gap:32px;
}
.hero-A .name-jp{
  font-family:var(--f-jp-serif); font-weight:500;
  font-size:clamp(64px, 11vw, 180px); line-height:.95; letter-spacing:.06em; margin:0;
}
.hero-A .name-en{
  font-family:var(--f-en-disp); font-style:italic; font-weight:400;
  font-size:clamp(14px,1.1vw,16px); letter-spacing:.5em; text-transform:uppercase;
  margin-top:18px; color:rgba(255,255,255,.85);
}
.hero-A .right-col{
  text-align:right; font-family:var(--f-mono); font-size:11px; letter-spacing:.22em;
  text-transform:uppercase; color:rgba(255,255,255,.75); line-height:2;
}
.hero-A .right-col .role{ display:block; font-family:var(--f-en-serif); font-style:italic;
  text-transform:none; font-size:18px; letter-spacing:.04em; color:#fff; margin-bottom:8px;}

/* Hero B — split with vertical typography */
.hero-B{ display:grid; grid-template-columns:1fr 1fr; }
.hero-B .hero-img{ position:relative; inset:auto; }
.hero-B .hero-img::after{ background:linear-gradient(90deg, rgba(0,0,0,.5), transparent 60%) }
.hero-B .text-side{
  position:relative; background:var(--bg); color:var(--ink); display:flex; align-items:center;
  padding:var(--pad-x);
}
.hero-B .vertical{
  writing-mode:vertical-rl; text-orientation:upright;
  font-family:var(--f-jp-serif); font-weight:500;
  font-size:clamp(48px,7vw,108px); letter-spacing:.12em; line-height:1.05;
  margin:0;
}
.hero-B .stack{ display:flex; align-items:flex-start; gap:48px; }
.hero-B .meta-col{ display:flex; flex-direction:column; gap:24px; padding-top:40px; min-width:0;}
.hero-B .meta-col .en{
  font-family:var(--f-en-disp); font-style:italic; font-size:clamp(18px,2vw,28px);
  letter-spacing:.04em; line-height:1.1;
}
.hero-B .meta-col .role{
  font-family:var(--f-mono); font-size:11px; letter-spacing:.24em; text-transform:uppercase;
  color:var(--ink-faint);
}
.hero-B .meta-col .bio{
  font-size:13px; line-height:1.9; color:var(--ink-soft); max-width:32ch;
}

/* Hero C — matted frame */
.hero-C{ background:var(--bg); }
.hero-C .frame{
  position:absolute; inset:8vh var(--pad-x); display:flex; gap:0;
}
.hero-C .frame-img{
  flex:0 0 56%; background:#111 center/cover no-repeat;
  filter:grayscale(.15) contrast(1.05);
}
.hero-C .frame-text{
  flex:1; padding:24px 0 24px 48px; display:flex; flex-direction:column; justify-content:space-between;
  color:var(--ink);
}
.hero-C .topline{
  font-family:var(--f-mono); font-size:11px; letter-spacing:.24em; text-transform:uppercase;
  color:var(--ink-faint);
}
.hero-C h1{
  font-family:var(--f-jp-serif); font-weight:500; font-size:clamp(40px,5.5vw,76px);
  line-height:1.05; margin:24px 0 12px; letter-spacing:.04em;
}
.hero-C .h1-en{
  font-family:var(--f-en-disp); font-style:italic; font-size:clamp(18px,1.6vw,24px);
  letter-spacing:.08em; color:var(--ink-soft);
}
.hero-C .credits{
  font-family:var(--f-mono); font-size:10.5px; letter-spacing:.18em; text-transform:uppercase;
  color:var(--ink-faint); line-height:2.2;
  border-top:1px solid var(--line); padding-top:20px;
}
.hero-C .credits span{ display:inline-block; padding-right:16px; margin-right:16px; border-right:1px solid var(--line);}
.hero-C .credits span:last-child{ border-right:0 }

/* Hero D — index card / kinetic */
.hero-D{ background:var(--bg); color:var(--ink); display:grid; grid-template-columns:340px 1fr;}
.hero-D .left-port{
  position:relative; margin:8vh 0 8vh var(--pad-x); border:1px solid var(--line);
  background:#111 center/cover no-repeat; filter:grayscale(.1);
}
.hero-D .left-port::after{
  content:""; position:absolute; left:0; right:0; bottom:-1px; height:60%;
  background:linear-gradient(180deg, transparent, rgba(0,0,0,.4));
}
.hero-D .left-port .tag{
  position:absolute; left:12px; top:12px; font-family:var(--f-mono); font-size:10px;
  letter-spacing:.2em; color:#fff; background:rgba(0,0,0,.4); padding:6px 10px;
}
.hero-D .left-port .tag2{ position:absolute; left:12px; bottom:12px; color:#fff; font-family:var(--f-en-serif);
  font-style:italic; font-size:18px; letter-spacing:.04em;}
.hero-D .right-kin{
  padding:8vh var(--pad-x) 8vh 48px; display:flex; flex-direction:column; justify-content:space-between;
  overflow:hidden;
}
.hero-D .marquee{
  font-family:var(--f-en-disp); font-style:italic; font-weight:400;
  font-size:clamp(72px,12vw,200px); line-height:.95; letter-spacing:-.01em;
  white-space:nowrap; overflow:hidden;
}
.hero-D .marquee .inner{ display:inline-block; animation:marquee 24s linear infinite }
.hero-D .marquee .inner span{ padding-right:.6em; }
.hero-D .marquee .inner .dot{ color:var(--accent); padding:0 .2em; }
@keyframes marquee{ from{transform:translateX(0)} to{transform:translateX(-50%)} }
.hero-D .name-block h1{
  font-family:var(--f-jp-serif); font-weight:500; font-size:clamp(36px,5vw,72px);
  letter-spacing:.06em; margin:0;
}
.hero-D .name-block .en{ font-family:var(--f-en-disp); font-style:italic; font-size:18px; letter-spacing:.3em; color:var(--ink-faint); margin-top:8px;}
.hero-D .bottom-row{ display:flex; justify-content:space-between; align-items:flex-end; gap:32px;
  font-family:var(--f-mono); font-size:11px; letter-spacing:.2em; text-transform:uppercase; color:var(--ink-faint);}
.hero-D .bottom-row .skills{ max-width:40ch; line-height:2.2 }

/* Scroll indicator (all heroes) */
.scroll-ind{
  position:absolute; left:var(--pad-x); bottom:24px;
  font-family:var(--f-mono); font-size:10px; letter-spacing:.3em; text-transform:uppercase;
  display:flex; align-items:center; gap:10px;
}
.scroll-ind .line{ width:1px; height:28px; background:currentColor; animation:scrollPulse 2s ease-in-out infinite;}
@keyframes scrollPulse{ 0%,100%{transform:scaleY(.4); transform-origin:top} 50%{transform:scaleY(1)} }

/* ─────────────────  PROFILE  ───────────────── */
.profile{ }
.profile-grid{ display:grid; grid-template-columns: 5fr 7fr; gap:var(--grid-gutter); align-items:start; }
.profile-portrait{ position:relative; aspect-ratio: 4/5; background:#222 center/cover no-repeat; filter:grayscale(.1);}
.profile-portrait .vertical-caption{
  position:absolute; right:-44px; top:0; writing-mode:vertical-rl;
  font-family:var(--f-jp-serif); font-size:14px; letter-spacing:.5em; color:var(--ink-faint);
}
.profile-info dl{ margin:0; display:grid; grid-template-columns:140px 1fr; gap:20px 24px; padding-bottom:32px; border-bottom:1px solid var(--line);}
.profile-info dt{ font-family:var(--f-mono); font-size:10px; letter-spacing:.24em; text-transform:uppercase; color:var(--ink-faint); padding-top:6px;}
.profile-info dd{ margin:0; font-family:var(--f-jp-serif); font-size:18px; letter-spacing:.04em;}
.profile-info dd .en{ display:block; font-family:var(--f-en-serif); font-style:italic; font-size:13px; color:var(--ink-faint); margin-top:2px; letter-spacing:.04em;}
.profile-bio{ margin-top:36px; font-size:14px; line-height:2; color:var(--ink-soft); max-width:64ch;}
.profile-bio p + p{ margin-top:1em; }
.skills{ margin-top:48px; padding-top:24px; border-top:1px solid var(--line); }
.skills .label{ font-family:var(--f-mono); font-size:10px; letter-spacing:.24em; text-transform:uppercase; color:var(--ink-faint); margin-bottom:18px;}
.skills ul{ list-style:none; padding:0; margin:0; display:flex; flex-wrap:wrap; gap:8px 0;}
.skills li{ font-family:var(--f-jp-serif); font-size:18px; padding:4px 18px; border-right:1px solid var(--line); letter-spacing:.06em;}
.skills li:first-child{ padding-left:0 } .skills li:last-child{ border-right:0 }

/* ─────────────────  WORKS  ───────────────── */
.works-tabs{ display:flex; gap:0; margin-bottom:48px; border-bottom:1px solid var(--line); }
.works-tabs button{
  font-family:var(--f-mono); font-size:11px; letter-spacing:.24em; text-transform:uppercase;
  padding:14px 24px 16px; color:var(--ink-faint); position:relative;
  border-right:1px solid var(--line-faint);
}
.works-tabs button:first-child{ padding-left:0; }
.works-tabs button.on{ color:var(--ink); }
.works-tabs button.on::after{
  content:""; position:absolute; left:0; right:0; bottom:-1px; height:2px; background:var(--ink);
}
.works-tabs .en{ font-family:var(--f-en-serif); font-style:italic; text-transform:none; opacity:.5; margin-left:8px; letter-spacing:.04em; font-size:12px;}

/* Works variant: timeline ------------------------------------------------ */
.works-timeline{ display:flex; flex-direction:column; }
.works-timeline .row{
  display:grid; grid-template-columns: 120px 1fr 220px; gap:32px;
  padding:28px 0; border-bottom:1px solid var(--line-faint); align-items:baseline;
  transition: background-color .4s ease, padding .4s ease;
}
.works-timeline .row:hover{ padding-left:24px; }
.works-timeline .year{ font-family:var(--f-en-disp); font-style:italic; font-size:30px; letter-spacing:.02em; color:var(--ink-soft); }
.works-timeline .title{ font-family:var(--f-jp-serif); font-size:22px; letter-spacing:.04em; line-height:1.4; }
.works-timeline .title .sub{ display:block; font-family:var(--f-mono); font-size:10.5px; letter-spacing:.2em; text-transform:uppercase; color:var(--ink-faint); margin-top:6px;}
.works-timeline .role{ font-family:var(--f-mono); font-size:11px; letter-spacing:.18em; text-transform:uppercase; color:var(--ink-faint); text-align:right;}
.works-timeline .role b{ font-family:var(--f-jp-serif); font-weight:500; color:var(--ink); font-size:16px; letter-spacing:.04em; text-transform:none; display:block; margin-bottom:4px;}

/* Works variant: filmgrid ----------------------------------------------- */
.works-grid{ display:grid; grid-template-columns:repeat(3, 1fr); gap:32px 24px;}
.work-card{ display:flex; flex-direction:column; }
.work-card .thumb{ aspect-ratio:3/4; background:#222 center/cover no-repeat; filter:grayscale(.2); position:relative; overflow:hidden;}
.work-card .thumb::after{ content:""; position:absolute; inset:0; background:linear-gradient(180deg, transparent 50%, rgba(0,0,0,.55)); }
.work-card .thumb .year-overlay{ position:absolute; left:14px; top:14px; font-family:var(--f-mono); color:#fff; font-size:11px; letter-spacing:.2em;}
.work-card .thumb .title-overlay{ position:absolute; left:14px; right:14px; bottom:14px; color:#fff; font-family:var(--f-jp-serif); font-size:20px; letter-spacing:.04em; line-height:1.3;}
.work-card .meta{ padding:14px 0; font-family:var(--f-mono); font-size:10.5px; letter-spacing:.2em; text-transform:uppercase; color:var(--ink-faint); display:flex; justify-content:space-between;}
.work-card .role-jp{ font-family:var(--f-jp-serif); font-size:14px; color:var(--ink-soft); text-transform:none; letter-spacing:.04em;}

/* Works variant: index table ----------------------------------------------- */
.works-table{ width:100%; border-collapse:collapse; }
.works-table th{
  text-align:left; font-family:var(--f-mono); font-size:10px; letter-spacing:.24em; text-transform:uppercase;
  color:var(--ink-faint); padding:0 16px 14px; border-bottom:1px solid var(--line); font-weight:400;
}
.works-table td{ padding:18px 16px; border-bottom:1px solid var(--line-faint); vertical-align:baseline;}
.works-table tr:hover td{ background:var(--bg-soft); }
.works-table .yr{ font-family:var(--f-en-disp); font-style:italic; font-size:20px; color:var(--ink-soft); width:80px;}
.works-table .ti{ font-family:var(--f-jp-serif); font-size:18px; letter-spacing:.04em; }
.works-table .rl{ font-family:var(--f-mono); font-size:11px; letter-spacing:.18em; text-transform:uppercase; color:var(--ink-faint); width:30%;}
.works-table .nt{ font-family:var(--f-mono); font-size:10.5px; letter-spacing:.18em; text-transform:uppercase; color:var(--ink-faint); width:18%;}
.works-table .dir{ font-family:var(--f-jp-serif); font-size:13px; color:var(--ink-soft); text-transform:none; letter-spacing:.04em;}

/* Works variant: vertical credits ---------------------------------------- */
.works-vertical{ display:flex; gap:48px; overflow-x:auto; padding-bottom:24px;
  scrollbar-width:thin; scrollbar-color:var(--line-faint) transparent;}
.works-vertical .col{
  flex:0 0 auto; writing-mode:vertical-rl; min-height:560px;
  padding:0 24px; border-right:1px solid var(--line-faint);
  font-family:var(--f-jp-serif);
}
.works-vertical .col:last-child{ border-right:0 }
.works-vertical .v-year{ font-family:var(--f-en-disp); font-style:italic; font-size:34px; letter-spacing:.02em; color:var(--ink-soft); writing-mode:horizontal-tb; margin-bottom:16px; }
.works-vertical .v-title{ font-size:24px; letter-spacing:.16em;}
.works-vertical .v-role{ font-family:var(--f-mono); font-size:10.5px; letter-spacing:.24em; text-transform:uppercase; color:var(--ink-faint); margin-top:18px; writing-mode:horizontal-tb;}

/* ─────────────────  GALLERY  ───────────────── */
.gallery-marquee{
  position:relative;
  overflow:hidden;
  margin: 0 calc(var(--pad-x) * -1);  /* full-bleed */
  padding: 0;
  transition: height .55s cubic-bezier(.2,.7,.2,1), opacity .35s ease;
}
.gallery-marquee::before,
.gallery-marquee::after{
  content:""; position:absolute; top:0; bottom:0; width:120px; z-index:2; pointer-events:none;
}
.gallery-marquee::before{ left:0;  background:linear-gradient(90deg, var(--bg), transparent); }
.gallery-marquee::after { right:0; background:linear-gradient(270deg, var(--bg), transparent); }
.gallery-track{
  display:flex; gap:16px; width:max-content;
  animation: galleryScroll 60s linear infinite;
  will-change: transform;
}
.gallery-marquee:hover .gallery-track{ animation-play-state:paused; }
@keyframes galleryScroll{
  from{ transform:translateX(0); }
  to  { transform:translateX(-50%); }
}
.gallery-track .g-item{
  position:relative;
  flex:0 0 auto;
  height: clamp(280px, 46vh, 460px);
  background:#222 center/cover no-repeat;
  filter:grayscale(.08);
  transition: filter .6s ease, transform .8s cubic-bezier(.2,.7,.2,1);
  cursor:pointer;
}
.gallery-track .g-item:hover{ filter:grayscale(0); }
.gallery-track .g-item .num{
  position:absolute; left:10px; top:10px; font-family:var(--f-mono); font-size:10px;
  letter-spacing:.2em; color:#fff; opacity:0; transition:opacity .3s ease;
  text-shadow:0 1px 4px rgba(0,0,0,.5);
}
.gallery-track .g-item:hover .num{ opacity:1 }

/* Aspect ratios cycle through tall/wide/square so the marquee feels alive */
.g-ar-portrait{ aspect-ratio: 3/4; }
.g-ar-landscape{ aspect-ratio: 4/3; }
.g-ar-square{ aspect-ratio: 1/1; }
.g-ar-tall{ aspect-ratio: 2/3; }

.gallery-hint{
  display:flex; justify-content:space-between; align-items:center;
  margin-top: 20px; padding: 0 4px;
  font-family:var(--f-mono); font-size:10.5px; letter-spacing:.24em; text-transform:uppercase;
  color:var(--ink-faint);
}
.gallery-hint .arrow{ display:inline-block; margin: 0 4px; }
.gallery-cta{
  font-family:var(--f-mono); font-size:10.5px; letter-spacing:.24em; text-transform:uppercase;
  color:var(--ink); border-bottom:1px solid var(--line); padding-bottom:2px; cursor:pointer;
}

/* In-place enlarge: a single big photo replaces the marquee inside the section. */
.gallery-stage{
  position:relative;
  width:100%;
  height: clamp(420px, 72vh, 720px);
  background: var(--bg-soft);
  overflow:hidden;
  display:flex; align-items:center; justify-content:center;
  margin: 0;
}
.gallery-stage .stage-img{
  position:absolute; inset: 24px;
  background: center/contain no-repeat;
  transition: opacity .4s ease, transform .55s cubic-bezier(.2,.7,.2,1);
}
.gallery-stage .stage-img.fading{ opacity:0; transform: scale(.985); }

.gallery-stage .stage-bar{
  position:absolute; left:0; right:0; top:0;
  display:flex; justify-content:space-between; align-items:center;
  padding: 16px clamp(20px, 4vw, 36px);
  font-family:var(--f-mono); font-size:11px; letter-spacing:.24em; text-transform:uppercase;
  color: var(--ink-soft);
  z-index:3;
}
.gallery-stage .counter{
  font-family:var(--f-en-disp); font-style:italic; font-size:24px; letter-spacing:.04em;
  color: var(--ink); text-transform:none;
}
.gallery-stage .counter .sep{ opacity:.4; margin: 0 8px; }
.gallery-stage .counter .total{ color: var(--ink-faint); font-size: 14px; }

.gallery-stage .close-stage{
  font-family:var(--f-mono); font-size:11px; letter-spacing:.24em;
  color: var(--ink); padding: 8px 14px; border: 1px solid var(--line);
  cursor:pointer; transition: background .2s ease, border-color .2s ease;
}
.gallery-stage .close-stage:hover{ background: var(--bg); border-color: var(--ink-soft); }

.gallery-stage .stage-nav{
  position:absolute; top:50%; transform: translateY(-50%);
  width:56px; height:56px;
  display:flex; align-items:center; justify-content:center;
  font-family:var(--f-en-disp); font-style:italic; font-size:22px;
  color: var(--ink); background: rgba(255,255,255,.6);
  border: 1px solid var(--line);
  cursor:pointer; z-index:3;
  transition: background .25s ease, border-color .25s ease;
}
html[data-palette="dark"] .gallery-stage .stage-nav{ background: rgba(20,18,15,.6); }
.gallery-stage .stage-nav:hover{ background: var(--bg); border-color: var(--ink-soft); }
.gallery-stage .stage-prev{ left: clamp(12px, 2vw, 24px); }
.gallery-stage .stage-next{ right: clamp(12px, 2vw, 24px); }

.gallery-thumbs{
  display:flex; gap: 8px; margin-top: 18px; flex-wrap: wrap; justify-content: center;
}
.gallery-thumbs .thumb{
  width: 64px; height: 84px; background:#222 center/cover no-repeat;
  opacity: .35; transition: opacity .25s ease, transform .25s ease;
  filter: grayscale(.4); cursor:pointer;
}
.gallery-thumbs .thumb.on{ opacity:1; filter:none; transform: translateY(-2px); outline: 1px solid var(--ink); outline-offset: 2px;}
.gallery-thumbs .thumb:hover{ opacity:.8 }

@media (max-width: 720px){
  .gallery-stage{ height: 60vh; }
  .gallery-stage .stage-nav{ width: 44px; height: 44px; font-size: 18px; }
  .gallery-thumbs .thumb{ width: 48px; height: 64px; }
}

/* legacy lightbox styles removed -- modal no longer used */
.lightbox{ display:none !important; }

/* Lightbox — one photo at a time, with arrow navigation -------------------- */
.lightbox{
  position:fixed; inset:0; z-index:200;
  background: rgba(8,7,6,.98);
  color:#ece4d3;
  display:flex; flex-direction:column;
  opacity:0; pointer-events:none;
  transition: opacity .35s ease;
}
.lightbox.on{ opacity:1; pointer-events:auto; }
.lightbox-bar{
  display:flex; justify-content:space-between; align-items:center;
  padding: 18px var(--pad-x);
  font-family:var(--f-mono); font-size:11px; letter-spacing:.24em; text-transform:uppercase;
}
.lightbox-bar .title{ font-family:var(--f-jp-serif); font-size:14px; letter-spacing:.3em; color:#ece4d3; text-transform:none;}
.lightbox-bar .counter{ font-family:var(--f-en-disp); font-style:italic; font-size:22px; letter-spacing:.04em; color:#ece4d3; text-transform:none; }
.lightbox-bar .counter .sep{ opacity:.4; margin: 0 8px; }
.lightbox-bar .counter .total{ color: rgba(236,228,211,.55); font-size:14px; }
.lightbox-bar .close{
  font-family:var(--f-mono); font-size:11px; letter-spacing:.24em; color:#ece4d3;
  padding:8px 14px; border:1px solid rgba(236,228,211,.3); transition: background .2s ease;
}
.lightbox-bar .close:hover{ background: rgba(236,228,211,.1); }

.lightbox-stage{
  flex:1; position:relative; display:flex; align-items:center; justify-content:center;
  padding: 8px var(--pad-x) 24px;
  overflow:hidden;
}
.lightbox-image{
  max-width:100%; max-height:100%;
  background: center/contain no-repeat;
  width:100%; height:100%;
  transition: opacity .35s ease, transform .5s cubic-bezier(.2,.7,.2,1);
  opacity:0; transform: scale(.985);
}
.lightbox-image.on{ opacity:1; transform: none; }

.lb-nav{
  position:absolute; top:50%; transform:translateY(-50%); z-index:3;
  width:64px; height:64px; border:1px solid rgba(236,228,211,.25);
  display:flex; align-items:center; justify-content:center;
  color:#ece4d3; font-family:var(--f-en-disp); font-style:italic; font-size:24px;
  transition: background .25s ease, border-color .25s ease;
}
.lb-nav:hover{ background: rgba(236,228,211,.08); border-color: rgba(236,228,211,.6); }
.lb-prev{ left: var(--pad-x); }
.lb-next{ right: var(--pad-x); }

.lightbox-thumbs{
  display:flex; gap:8px; padding: 0 var(--pad-x) 24px; justify-content:center; flex-wrap:wrap;
}
.lightbox-thumbs .thumb{
  width:54px; height:72px; background:#222 center/cover no-repeat;
  opacity:.4; transition: opacity .25s ease, transform .25s ease;
  filter:grayscale(.4);
}
.lightbox-thumbs .thumb.on{ opacity:1; filter:none; transform: translateY(-2px); }
.lightbox-thumbs .thumb:hover{ opacity:.85; }

@media (max-width: 720px){
  .lb-nav{ width:48px; height:48px; }
  .lightbox-thumbs .thumb{ width:40px; height:54px; }
}

/* Legacy grid styles removed below (replaced by marquee + lightbox).
   Old class names kept inert so any leftover markup still parses. */
.gallery-grid{ display:none; }

/* ─────────────────  MOVIE  ───────────────── */
/* Movie — all three at the same size */
.movies{ display:grid; grid-template-columns:repeat(3, 1fr); gap:24px;}
.movie{ position:relative; aspect-ratio:16/9; background:#111; overflow:hidden; }
.movie iframe{ width:100%; height:100%; border:0; }
.movie .label{ font-family:var(--f-mono); font-size:11px; letter-spacing:.2em; text-transform:uppercase; color:var(--ink-faint); margin-top:14px;}
.movie-row{ display:flex; flex-direction:column; }

/* ─────────────────  CONTACT  ───────────────── */
.contact-grid{ display:grid; grid-template-columns: 6fr 6fr; gap:var(--grid-gutter); align-items:start;}
.contact-lead{ font-family:var(--f-jp-serif); font-size:clamp(18px,1.6vw,22px); letter-spacing:.05em; line-height:1.95; color:var(--ink-soft); max-width:42ch;}
.contact-list dt{ font-family:var(--f-mono); font-size:10px; letter-spacing:.24em; text-transform:uppercase; color:var(--ink-faint); padding-top:6px;}
.contact-list dd{ margin:0 0 24px; font-family:var(--f-en-serif); font-style:italic; font-size:18px; letter-spacing:.02em;}
.contact-list dd a{ position:relative; }
.contact-list dd a::after{ content:""; position:absolute; left:0; right:0; bottom:-2px; height:1px; background:currentColor; transform:scaleX(0); transform-origin:left; transition:transform .35s ease;}
.contact-list dd a:hover::after{ transform:scaleX(1)}
.contact-note{ font-family:var(--f-mono); font-size:11px; letter-spacing:.04em; color:var(--ink-faint); margin-top:24px; text-transform:none; }

/* Movie 3-up removed — all three at the same size handled by .movies grid above */

/* ─────────────────  FOOTER  ───────────────── */
footer{
  border-top:1px solid var(--line);
  padding:48px var(--pad-x) 36px;
  max-width:var(--max); margin:0 auto;
  display:flex; align-items:flex-end; justify-content:space-between; gap:32px; flex-wrap:wrap;
}
.foot-mark .foot-jp{ font-family:var(--f-jp-serif); font-size:13px; letter-spacing:.4em; color:var(--ink-faint);}
.foot-links{ display:flex; gap:24px; font-family:var(--f-mono); font-size:11px; letter-spacing:.2em; text-transform:uppercase; color:var(--ink-faint);}
.foot-cw{ font-family:var(--f-mono); font-size:10px; letter-spacing:.2em; color:var(--ink-faint); text-transform:uppercase;}

/* Responsive ----------------------------------------------------------- */
@media (max-width: 960px){
  .hero-B{ grid-template-columns:1fr; height:auto; }
  .hero-B .hero-img{ height:60vh; }
  .hero-B .text-side{ padding:60px var(--pad-x); }
  .hero-D{ grid-template-columns:1fr; }
  .hero-D .left-port{ margin: 80px var(--pad-x) 0; aspect-ratio: 3/4; }
  .hero-D .right-kin{ padding:48px var(--pad-x); }
  .hero-C .frame{ flex-direction:column; inset:80px var(--pad-x); }
  .hero-C .frame-img{ flex:0 0 50vh; }
  .hero-C .frame-text{ padding:24px 0 0; }
  .profile-grid, .contact-grid{ grid-template-columns:1fr; }
  .works-grid{ grid-template-columns:repeat(2, 1fr); }
  .movies{ grid-template-columns:1fr; }
  .nav-links{ display:none; }
}
