/* =========================================================
   KEIZOKU — 「白と色面」 white editorial with gliding colour fields
   ========================================================= */
:root{
  --ink:#0B1030;
  --ink-2:rgba(11,16,48,.76);
  --ink-3:rgba(11,16,48,.6);
  --white:#fff;
  --mint:#C9F4E1;
  --lemon:#FFF2A0;
  --sky:#CBE5FF;
  --peach:#FFD8C4;
  --accent:#2B59FF;

  --ease:cubic-bezier(.16,1,.3,1);
  --ease-io:cubic-bezier(.7,0,.2,1);

  --gut:clamp(20px,4.4vw,64px);
  --gap:clamp(16px,1.8vw,28px);
  --sec:clamp(96px,11.5vw,184px);
  --hh:84px;

  --f-lat:"Archivo","Helvetica Neue",Arial,sans-serif;
  --f-jp:"Zen Kaku Gothic New","Hiragino Kaku Gothic ProN","Hiragino Sans","Noto Sans JP","Yu Gothic",sans-serif;
}

*,*::before,*::after{box-sizing:border-box}
html{
  background:#fff;
  -webkit-text-size-adjust:100%;
  scrollbar-color:var(--ink) transparent;
  scrollbar-width:thin;
  scroll-padding-top:0;
}
@media (prefers-reduced-motion:no-preference){
  html:not(.static){scroll-behavior:smooth}
}
body{
  margin:0;
  background:transparent;
  color:var(--ink);
  font-family:var(--f-jp);
  font-weight:500;
  font-size:1rem;
  line-height:1.9;
  letter-spacing:.02em;
  font-feature-settings:"palt" 0;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
  line-break:strict;
  overflow-wrap:anywhere;
}
::selection{background:var(--accent);color:#fff}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-thumb{background:var(--ink);border-radius:10px;border:3px solid transparent;background-clip:content-box}
::-webkit-scrollbar-track{background:transparent}

img{display:block;max-width:100%;height:auto}
figure{margin:0}
h1,h2,h3,h4,p,ul,ol,address{margin:0}
ul,ol{padding:0;list-style:none}
address{font-style:normal}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer}
:focus-visible{outline:2.5px solid var(--accent);outline-offset:4px;border-radius:4px}
.footer :focus-visible{outline-color:#fff}

.ib{display:inline-block}
.wrap{padding-inline:var(--gut);max-width:1760px;margin-inline:auto}
.page{overflow-x:clip}
.skip{position:fixed;left:16px;top:-80px;z-index:400;background:var(--ink);color:#fff;padding:10px 18px;border-radius:999px;font-weight:700;font-size:.875rem;transition:top .3s var(--ease)}
.skip:focus{top:12px}

/* ---------- the ground (signature colour glide) ---------- */
.ground{position:fixed;inset:0;z-index:-1;background:#fff;transform:translateZ(0);pointer-events:none}
.g-white{background:#fff}
.g-mint{background:var(--mint)}
.g-lemon{background:var(--lemon)}
.g-sky{background:var(--sky)}
.g-peach{background:var(--peach)}
html.js:not(.static) .sec{background:transparent}
html:not(.js) .ground,html.static .ground{display:none}

/* ---------- type ---------- */
.sec-head{display:flex;align-items:baseline;flex-wrap:wrap;column-gap:clamp(14px,2vw,32px);row-gap:6px;font-weight:inherit}
.sec-word{
  display:block;
  font-family:var(--f-lat);font-weight:800;font-stretch:120%;
  font-size:clamp(2.75rem,7.5vw,6rem);
  line-height:.9;letter-spacing:-.04em;
  padding-bottom:.14em;margin-bottom:-.14em;
  margin-left:-.045em;
  clip-path:inset(-.1em -.3em 0 -.3em);
  white-space:nowrap;
}
.sec-label{display:block;font-family:var(--f-jp);font-weight:700;font-size:clamp(.875rem,1.05vw,1rem);letter-spacing:.12em;line-height:1.4}
.sec-title{
  font-weight:900;
  font-size:clamp(1.75rem,3.55vw,3.25rem);
  line-height:1.38;letter-spacing:.015em;
  word-break:auto-phrase;
}
.ln{display:block;overflow:hidden;padding-block:.06em}
.ln__in{display:block}
.body{font-size:clamp(.9688rem,1.12vw,1.0625rem);line-height:1.95;color:var(--ink-2);max-width:35em}
.body + .body{margin-top:1.4em}

/* ---------- buttons & links ---------- */
.btn{
  position:relative;isolation:isolate;overflow:hidden;
  display:inline-flex;align-items:center;gap:20px;
  min-height:62px;padding:9px 9px 9px 30px;border-radius:999px;
  background:var(--ink);color:#fff;
  font-weight:700;font-size:1rem;letter-spacing:.06em;line-height:1;
  transition:transform .5s var(--ease);
}
.btn::before{content:"";position:absolute;inset:-1px;z-index:-1;background:var(--accent);transform:scaleX(0);transform-origin:0 50%;transition:transform .65s var(--ease)}
.btn:hover::before,.btn:focus-visible::before{transform:scaleX(1)}
.btn:active{transform:scale(.97)}
.btn__disc{flex:none;display:grid;place-items:center;width:44px;height:44px;border-radius:50%;background:#fff;overflow:hidden}
.btn__disc svg{width:20px;height:20px;fill:none;stroke:var(--ink);stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.btn:hover .btn__disc svg,.btn:focus-visible .btn__disc svg{animation:arrowLoop .7s var(--ease)}
@keyframes arrowLoop{0%{transform:translateX(0)}45%{transform:translateX(160%)}46%{transform:translateX(-160%)}100%{transform:translateX(0)}}
.btn--sm{min-height:50px;padding:6px 6px 6px 22px;font-size:.875rem;gap:14px}
.btn--sm .btn__disc{width:38px;height:38px}
.btn--sm .btn__disc svg{width:17px;height:17px}
.btn--lg{min-height:76px;padding:10px 10px 10px 38px;font-size:clamp(1rem,1.3vw,1.1875rem);gap:28px}
.btn--lg .btn__disc{width:56px;height:56px}
.btn--lg .btn__disc svg{width:24px;height:24px}

.tlink{position:relative;display:inline-block;font-weight:700;line-height:1.5;padding-block:4px}
.tlink::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1.5px;background:currentColor;transform-origin:0 50%}
.tlink:hover::after,.tlink:focus-visible::after{animation:redraw .8s var(--ease)}
@keyframes redraw{
  0%{transform:scaleX(1);transform-origin:100% 50%}
  45%{transform:scaleX(0);transform-origin:100% 50%}
  46%{transform:scaleX(0);transform-origin:0 50%}
  100%{transform:scaleX(1);transform-origin:0 50%}
}
.tlink--lat{font-family:var(--f-lat);font-weight:600;font-stretch:108%;letter-spacing:.01em}

/* ---------- photo frame ---------- */
.ph{position:relative;overflow:hidden;background:rgba(11,16,48,.06)}
.ph__in{width:100%;height:100%}
.ph img{width:100%;height:100%;object-fit:cover}

/* ---------- loader ---------- */
.loader{display:none}
html.js:not(.static) .loader{
  display:grid;place-items:center;position:fixed;inset:0;z-index:300;background:#fff;
  clip-path:inset(0 0 0 0);
  transition:clip-path 1s var(--ease-io);
  animation:loaderSafe 0s 7s forwards;
}
html.is-loaded .loader{clip-path:inset(0 0 0 100%) !important;pointer-events:none}
.loader__in{display:flex;flex-direction:column;align-items:center}
.loader__mark{width:116px;height:auto;animation:markIn 1.2s var(--ease) both}
.loader__line{display:block;width:176px;height:1px;margin-top:26px;background:var(--ink);transform-origin:0 50%;animation:lineIn 1.35s cubic-bezier(.65,0,.35,1) .1s both}
@keyframes markIn{from{opacity:0;transform:translateX(36px)}to{opacity:1;transform:none}}
@keyframes lineIn{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@keyframes loaderSafe{to{visibility:hidden}}

/* ---------- header ---------- */
.header{position:fixed;left:0;right:0;top:0;z-index:100;height:var(--hh);background:#fff;transition:transform .7s var(--ease)}
.header__in{height:100%;display:flex;align-items:center;gap:clamp(20px,3vw,48px);padding-inline:var(--gut);max-width:1760px;margin-inline:auto}
.header__logo{display:block;flex:none;margin-right:auto;transition:opacity .3s,transform .5s var(--ease)}
.header__logo img{height:52px;width:auto}
.header__logo:hover{transform:translateX(-4px)}
.nav{display:flex;gap:clamp(18px,2.4vw,40px)}
.nav__link{position:relative;font-family:var(--f-lat);font-weight:600;font-stretch:110%;font-size:.9375rem;letter-spacing:.02em;line-height:1;padding-block:10px}
.nav__link::after{content:"";position:absolute;left:0;right:0;bottom:2px;height:2px;background:var(--ink);transform:scaleX(0);transform-origin:100% 50%;transition:transform .55s var(--ease),background-color .3s}
.nav__link:hover::after,.nav__link:focus-visible::after{transform:scaleX(1);transform-origin:0 50%}
.nav__link[aria-current="true"]::after{transform:scaleX(1);transform-origin:0 50%;background:var(--accent)}
.burger{display:none}
html.js:not(.static) .header{transform:translateY(-102%)}
html.js.is-ready .header{transform:none;transition:transform 1s var(--ease) .15s}
html.js.is-ready .header.is-hidden{transform:translateY(-102%);transition:transform .6s var(--ease)}
html.menu-open .header{background:transparent !important}

/* ---------- mobile menu ---------- */
.menu{
  position:fixed;inset:0;z-index:90;background:var(--lemon);
  clip-path:inset(0 0 100% 0);visibility:hidden;
  transition:clip-path .85s var(--ease),visibility 0s .85s;
  overflow-y:auto;
}
.menu.is-open{clip-path:inset(0);visibility:visible;transition:clip-path .85s var(--ease),visibility 0s}
.menu__in{min-height:100%;display:flex;flex-direction:column;justify-content:space-between;gap:32px;padding:calc(var(--hh) + 28px) var(--gut) 36px}
.menu__link{display:flex;align-items:baseline;gap:14px;padding:12px 0;border-bottom:1px solid var(--ink)}
.menu__en{font-family:var(--f-lat);font-weight:800;font-stretch:120%;font-size:clamp(2.25rem,11vw,3.5rem);line-height:1.05;letter-spacing:-.035em}
.menu__jp{font-size:.8125rem;font-weight:700;letter-spacing:.1em}
.menu__link > span{transform:translateY(24px);opacity:0;transition:transform .8s var(--ease),opacity .6s}
.menu.is-open .menu__link > span{transform:none;opacity:1}
.menu.is-open .menu__link:nth-child(1) > span{transition-delay:.18s}
.menu.is-open .menu__link:nth-child(2) > span{transition-delay:.24s}
.menu.is-open .menu__link:nth-child(3) > span{transition-delay:.30s}
.menu.is-open .menu__link:nth-child(4) > span{transition-delay:.36s}
.menu.is-open .menu__link:nth-child(5) > span{transition-delay:.42s}
.menu__foot{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}
.menu__sig{font-family:var(--f-lat);font-weight:800;font-stretch:125%;font-size:1.125rem;letter-spacing:-.01em}

/* ---------- hero ---------- */
.hero{position:relative;min-height:100svh;padding-top:var(--hh);display:flex;flex-direction:column}
.hero__main{flex:1;width:100%;display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);padding-top:clamp(8px,1.6vh,20px)}
.hero__copy{grid-column:1/7;align-self:center;position:relative;z-index:3;padding-block:24px 40px}
.hero__title{
  font-weight:900;
  font-size:clamp(2.5rem,5.35vw,5.125rem);
  line-height:1.26;letter-spacing:.005em;
  margin-left:-.03em;
}
.hero__lead{margin-top:clamp(24px,3.2vh,40px);max-width:31em;font-size:clamp(.9688rem,1.15vw,1.0625rem);line-height:1.95;color:var(--ink-2)}
.hero__cta{margin-top:clamp(28px,4vh,44px);display:flex;align-items:center;flex-wrap:wrap;gap:20px 34px}

.hero__visual{grid-column:7/-1;position:relative;margin-right:calc(var(--gut) * -1);min-height:min(60vh,560px)}
.hero__photo{position:absolute;inset:0;z-index:1}
.hero__photo img{object-position:50% 30%}
.hero__plate{position:absolute;z-index:0;left:-7%;right:46%;top:34%;bottom:clamp(-116px,-7.4vw,-64px);background:var(--mint);animation:plateCycle 24s linear infinite}
@keyframes plateCycle{
  0%,18%{background-color:#C9F4E1}
  25%,43%{background-color:#FFF2A0}
  50%,68%{background-color:#CBE5FF}
  75%,93%{background-color:#FFD8C4}
  100%{background-color:#C9F4E1}
}
html.static .hero__plate{animation:none}

.badge{position:absolute;z-index:4;right:clamp(28px,5vw,80px);bottom:-66px;width:132px;height:132px;border-radius:50%;background:var(--ink);color:#fff;display:grid;place-items:center;isolation:isolate;overflow:hidden}
.badge::before{content:"";position:absolute;inset:0;border-radius:50%;background:var(--accent);transform:scale(0);transition:transform .6s var(--ease);z-index:-1}
.badge:hover::before,.badge:focus-visible::before{transform:scale(1.02)}
.badge__ring{position:absolute;inset:0;width:100%;height:100%;animation:spin 16s linear infinite}
.badge__ring text{fill:#fff;font-family:var(--f-lat);font-weight:700;font-stretch:112%;font-size:11.5px;letter-spacing:.18em}
.badge__arrow{width:30px;height:30px;fill:none;stroke:#fff;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;transition:transform .6s var(--ease)}
.badge:hover .badge__arrow{transform:translateY(5px)}
@keyframes spin{to{transform:rotate(360deg)}}
html.static .badge__ring{animation:none}

.hero__sig{position:relative;z-index:2;width:100%;display:flex;align-items:baseline;justify-content:space-between;gap:24px;padding-top:clamp(24px,3vh,40px);padding-bottom:clamp(24px,3.6vh,40px)}
.hero__lockup{
  font-family:var(--f-lat);font-weight:800;font-stretch:125%;
  font-size:clamp(3.5rem,11.6vw,10.75rem);
  line-height:.84;letter-spacing:-.04em;white-space:nowrap;
  margin-left:-.05em;
  padding-bottom:.04em;
  clip-path:inset(-.05em -.2em 0 -.2em);
}
.hero__lockup .ch--x{font-weight:300;font-stretch:100%;color:var(--accent);margin-inline:.14em .12em}
.hero__services{font-family:var(--f-lat);font-weight:600;font-stretch:112%;font-size:clamp(.8125rem,1.05vw,1rem);letter-spacing:.04em;line-height:1.4;white-space:nowrap;padding-right:clamp(0px,1vw,8px)}
.hero__services i{font-style:normal;color:var(--accent);margin-inline:.5em;font-weight:400}

/* ---------- about ---------- */
.about{padding-block:var(--sec)}
.about__grid{display:grid;grid-template-columns:minmax(0,54fr) minmax(0,46fr);align-items:center;margin-top:clamp(40px,6vw,96px)}
/* photo collage: the second photo overlaps the first on a white plate, so the left column carries the same height as the text */
.about__media{position:relative;padding-bottom:clamp(20px,3vw,44px)}
.about__photo{aspect-ratio:4/3.05}
.about__subwrap{position:relative;z-index:1;width:min(42%,340px);margin:clamp(-150px,-9.5vw,-72px) clamp(24px,5vw,84px) 0 auto}
.about__plate{position:absolute;inset:clamp(-22px,-1.5vw,-12px) clamp(12px,1.5vw,22px) clamp(12px,1.5vw,22px) clamp(-22px,-1.5vw,-12px);background:#fff}
.about__sub{position:relative;aspect-ratio:4/4.7}
.about__sub img{object-position:42% 50%}
.about__text{padding:0 var(--gut) 0 clamp(32px,6.4vw,108px)}
.about__text .sec-title{margin-bottom:clamp(28px,3vw,44px)}

/* ---------- service ---------- */
.service{padding-block:var(--sec)}
.service__intro{margin-top:clamp(28px,3.4vw,48px);font-weight:700;font-size:clamp(1.125rem,1.9vw,1.625rem);line-height:1.6}
.service__grid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);margin-top:clamp(40px,6vw,96px)}
.stage{grid-column:1/7;align-self:start;position:sticky;top:13vh;height:74vh;max-height:720px;margin-left:calc(var(--gut) * -1);display:flex;flex-direction:column}
.stage__frame{flex:1;min-height:0}
.stage__img{position:absolute;inset:0;z-index:0;clip-path:inset(100% 0 0 0)}
.stage__img img{transform:scale(1.18)}
.stage__img.was-active{z-index:1;clip-path:inset(0)}
.stage__img.is-active{z-index:2;clip-path:inset(0);transition:clip-path 1.1s var(--ease)}
.stage__img.is-active img{transform:none;transition:transform 1.6s var(--ease)}
.stage__img.was-active img{transform:none}
.stage__count{display:flex;align-items:center;gap:14px;padding:16px 0 0 var(--gut);font-family:var(--f-lat);font-weight:600;font-stretch:112%;font-size:.875rem;letter-spacing:.06em;line-height:1}
.stage__count i{display:block;width:56px;height:1px;background:var(--ink)}
.stage__now{color:var(--accent)}

.svc{grid-column:8/-1}
.svc__row{position:relative;display:grid;grid-template-columns:minmax(0,1fr);align-content:start;row-gap:clamp(12px,1.6vw,24px);padding-block:clamp(36px,4.4vw,64px) clamp(44px,6vw,88px)}
.svc__num{
  display:block;
  font-family:var(--f-lat);font-weight:800;font-stretch:125%;
  font-size:clamp(5.5rem,11.5vw,10.5rem);line-height:.82;letter-spacing:-.04em;
  margin-left:-.04em;
  color:transparent;-webkit-text-stroke:1.5px var(--ink);
  transition:color .7s var(--ease),-webkit-text-stroke-color .7s var(--ease);
}
@supports not (-webkit-text-stroke:1px #000){.svc__num{color:var(--ink)}}
.svc__row.is-active .svc__num{color:var(--accent);-webkit-text-stroke-color:var(--accent)}
.svc__body{transition:transform .7s var(--ease)}
.svc__name{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 18px;margin-bottom:clamp(14px,1.6vw,22px);line-height:1.2}
.svc__en{font-family:var(--f-lat),var(--f-jp);font-weight:700;font-stretch:112%;font-size:clamp(1.875rem,3.3vw,3rem);letter-spacing:-.025em}
.svc__jp{font-size:clamp(.9375rem,1.1vw,1.0625rem);font-weight:700;letter-spacing:.08em}
.svc__ph{display:none}

.sub{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);margin-top:clamp(72px,9vw,152px)}
.sub__title{grid-column:1/6;font-weight:900;font-size:clamp(1.25rem,2.1vw,1.875rem);line-height:1.5}
.sub__list{grid-column:7/-1;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:var(--gap)}
.sub__item{position:relative;padding:20px 0 26px}
.sub__item h4{font-size:1.0625rem;font-weight:700;line-height:1.5;transition:transform .6s var(--ease)}
.sub__item p{font-size:.875rem;line-height:1.7;color:var(--ink-2);margin-top:4px;transition:transform .6s var(--ease) .04s}

/* ---------- why ---------- */
.why{padding-block:var(--sec) clamp(64px,8vw,120px)}
.why__grid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);margin-top:clamp(40px,6vw,96px);align-items:start}
.why__lead{grid-column:1/7;position:sticky;top:16vh}
.reasons{grid-column:7/-1}
.reason{position:relative;display:grid;grid-template-columns:clamp(56px,7vw,112px) minmax(0,1fr);align-items:baseline;padding-block:clamp(32px,3.6vw,52px) clamp(36px,4.4vw,64px)}
.reason__n{font-family:var(--f-lat);font-style:italic;font-weight:300;font-stretch:100%;font-size:clamp(3rem,5.4vw,5rem);line-height:.8;letter-spacing:-.04em;color:var(--accent)}
.reason > div{transition:transform .7s var(--ease)}
.reason__t{font-weight:900;font-size:clamp(1.25rem,2.05vw,1.875rem);line-height:1.5;margin-bottom:14px}
.reasons{border-bottom:1px solid var(--ink)}

.cycle{position:relative;width:min(340px,82%);aspect-ratio:1;margin-top:clamp(40px,5vw,72px)}
.cycle__ring{position:absolute;inset:0;width:100%;height:100%;overflow:visible;transform:rotate(-90deg)}
.cycle__track{fill:none;stroke:rgba(11,16,48,.22);stroke-width:1;vector-effect:non-scaling-stroke}
.cycle__draw{fill:none;stroke:var(--ink);stroke-width:1.5;vector-effect:non-scaling-stroke;stroke-dasharray:1;stroke-dashoffset:0}
.cycle__track,.cycle__draw{r:70px}
.cycle__orbit{position:absolute;inset:15%;animation:spin 12s linear infinite}
.cycle__orbit i{position:absolute;left:50%;top:0;width:14px;height:14px;margin:-7px 0 0 -7px;border-radius:50%;background:var(--accent)}
.cycle__w{position:absolute;font-weight:900;font-size:1.0625rem;letter-spacing:.1em;line-height:1;color:var(--ink-3);animation:cycWord 12s linear infinite}
.cycle__w--1{left:50%;top:0;margin-left:-1.1em}
.cycle__w--2{right:-.6em;top:50%;margin-top:-.5em;animation-delay:3s}
.cycle__w--3{left:50%;bottom:0;margin-left:-1.1em;animation-delay:6s}
.cycle__w--4{left:-.6em;top:50%;margin-top:-.5em;animation-delay:9s}
@keyframes cycWord{0%,21%{color:var(--ink);transform:scale(1.14)}25%,96%{color:rgba(11,16,48,.6);transform:none}100%{color:var(--ink);transform:scale(1.14)}}
.cycle__core{position:absolute;inset:0;display:grid;place-items:center;font-weight:900;font-size:clamp(1.5rem,2.4vw,2.125rem);letter-spacing:.2em;text-indent:.2em}
html.static .cycle__orbit{animation:none}
html.static .cycle__w{animation:none;color:var(--ink)}

/* ---------- statement ---------- */
.statement{padding-block:clamp(96px,13vw,208px) clamp(120px,17vw,272px)}
.statement__main{font-weight:900;font-size:clamp(1.375rem,4.15vw,3.75rem);line-height:1.62;letter-spacing:.02em}
.statement__sub{position:relative;margin-top:clamp(36px,4.6vw,72px);padding-left:clamp(56px,7vw,112px);font-weight:700;font-size:clamp(1.0625rem,1.9vw,1.625rem);line-height:1.6}
.statement__sub::before{content:"";position:absolute;left:0;top:.8em;width:clamp(40px,5.4vw,88px);height:1.5px;background:var(--ink)}

/* ---------- works ---------- */
.works{padding-block:var(--sec) clamp(48px,6vw,96px)}
.works__head{width:100%;display:flex;align-items:baseline;justify-content:space-between;gap:24px}
.works__count{display:flex;align-items:center;gap:14px;font-family:var(--f-lat);font-weight:600;font-stretch:112%;font-size:.9375rem;letter-spacing:.06em;line-height:1;white-space:nowrap}
.works__count i{display:block;width:56px;height:1px;background:var(--ink)}
.works__now{color:var(--accent);min-width:1.4em;display:inline-block}
.works__viewport{margin-top:clamp(32px,4.4vw,64px);overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;scroll-padding-inline:var(--gut);scrollbar-width:none;-webkit-overflow-scrolling:touch}
.works__viewport::-webkit-scrollbar{display:none}
.works__viewport:focus-visible{outline-offset:-4px}
.works__track{display:flex;gap:clamp(16px,2.8vw,44px);padding-inline:var(--gut);width:max-content;will-change:transform}
.work{width:min(80vw,620px);scroll-snap-align:start;flex:none}
.work__img{aspect-ratio:16/10;border:1px solid rgba(11,16,48,.14)}
.work__img img{transition:transform 1.2s var(--ease);object-position:50% 0}
.work:hover .work__img img{transform:scale(1.045)}
.work__cap{display:grid;grid-template-columns:auto minmax(0,1fr);column-gap:18px;row-gap:2px;align-items:baseline;padding-top:18px}
.work__idx{grid-row:1/3;font-family:var(--f-lat);font-style:italic;font-weight:400;font-size:1.0625rem;color:var(--accent);line-height:1.6}
.work__t{font-weight:700;font-size:clamp(1.0625rem,1.45vw,1.3125rem);line-height:1.55;transition:transform .6s var(--ease)}
.work__m{grid-column:2;font-size:.8438rem;color:var(--ink-2);letter-spacing:.04em;line-height:1.6}
.work:hover .work__t{transform:translateX(8px)}
.works__sticky > .wrap{width:100%}
.works__bar{position:relative;height:1px;background:rgba(11,16,48,.2);margin-top:clamp(28px,3.4vw,48px)}
.works__bar span{position:absolute;left:0;top:-1px;height:3px;width:100%;background:var(--ink);transform:scaleX(.2);transform-origin:0 50%}

.works.is-pinned{padding-block:0;height:calc(100vh + var(--travel,0px))}
.works.is-pinned .works__sticky{position:sticky;top:0;height:100vh;display:flex;flex-direction:column;justify-content:center;overflow:hidden;padding-top:24px}
.works.is-pinned .works__viewport{overflow:visible;scroll-snap-type:none;margin-top:clamp(20px,4vh,56px)}
.works.is-pinned .work{width:min(45vw,calc((100vh - 400px) * 1.6))}
.works.is-pinned .sec-word{font-size:min(6rem,7.5vw,11vh)}
.works.is-pinned .works__bar{margin-top:clamp(18px,3.4vh,40px)}

/* ---------- contact ---------- */
.contact{padding-block:clamp(40px,5vw,80px) var(--sec)}
.marquee{overflow:hidden;margin-bottom:clamp(56px,8vw,128px);user-select:none}
.marquee__track{display:flex;width:max-content;will-change:transform}
.marquee__grp{display:flex;align-items:center;flex:none}
.marquee b{
  font-family:var(--f-lat);font-weight:800;font-stretch:125%;
  font-size:clamp(5rem,16vw,14.5rem);line-height:1;letter-spacing:-.035em;white-space:nowrap;
  color:transparent;-webkit-text-stroke:2px var(--ink);
  padding-inline:.12em;
}
@supports not (-webkit-text-stroke:1px #000){.marquee b{color:var(--ink)}}
.marquee i{display:block;flex:none;width:clamp(28px,4.4vw,72px);height:clamp(28px,4.4vw,72px);border-radius:50%;border:1.5px solid var(--ink);margin-inline:clamp(12px,2vw,36px)}
.contact__grid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);margin-top:clamp(40px,6vw,96px);align-items:start}
.contact__title{grid-column:1/8;font-size:clamp(2rem,5vw,4.5rem);line-height:1.3}
.contact__side{grid-column:8/-1;padding-top:clamp(0px,1.2vw,18px)}
.contact__act{margin-top:clamp(32px,3.6vw,52px);display:flex;flex-direction:column;align-items:flex-start;gap:22px}
.contact__mail{font-family:var(--f-lat);font-weight:600;font-stretch:110%;font-size:clamp(1.25rem,2vw,1.75rem);letter-spacing:-.005em;line-height:1.3}

/* ---------- footer ---------- */
.footer{position:relative;background:var(--ink);color:#fff;padding-block:clamp(72px,8vw,128px) 32px}
.footer ::selection{background:#fff;color:var(--ink)}
.footer__in{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);row-gap:clamp(56px,7vw,104px)}
.footer__brand{grid-column:1/6}
.footer__logo{display:inline-block;transition:transform .6s var(--ease)}
.footer__logo:hover{transform:translateX(-6px)}
.footer__logo img{width:clamp(104px,9vw,136px);height:auto}
.footer__tag{margin-top:clamp(28px,3vw,44px);font-weight:900;font-size:clamp(1.375rem,2.5vw,2.25rem);line-height:1.5;letter-spacing:.02em}
.footer__cols{grid-column:7/-1;display:grid;grid-template-columns:1.25fr .8fr 1.25fr;column-gap:var(--gap);row-gap:40px}
.footer__h{font-family:var(--f-lat);font-weight:600;font-stretch:112%;font-size:.8125rem;letter-spacing:.14em;text-transform:uppercase;color:rgba(255,255,255,.66);margin-bottom:20px;line-height:1.4}
.footer__main li{font-weight:700;font-size:1.0625rem;line-height:1.5;padding-block:5px}
.footer__subs{margin-top:16px}
.footer__subs li{font-size:.875rem;line-height:1.5;padding-block:3px;color:rgba(255,255,255,.74)}
.footer__nav li{padding-block:2px}
.footer__col address{margin-top:16px;font-size:.875rem;line-height:1.8;color:rgba(255,255,255,.74)}
.footer__base{grid-column:1/-1;display:flex;align-items:center;justify-content:space-between;gap:16px;padding-top:24px;border-top:1px solid rgba(255,255,255,.24)}
.footer__base small{font-family:var(--f-lat);font-size:.8125rem;letter-spacing:.08em;font-weight:500}
.footer__top{display:inline-flex;align-items:center;gap:12px;font-family:var(--f-lat);font-weight:600;font-stretch:110%;font-size:.8125rem;letter-spacing:.12em;text-transform:uppercase}
.footer__top svg{width:40px;height:40px;padding:10px;border:1px solid rgba(255,255,255,.5);border-radius:50%;fill:none;stroke:#fff;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;transition:background-color .4s,transform .6s var(--ease),stroke .4s}
.footer__top:hover svg{background:#fff;stroke:var(--ink);transform:translateY(-4px)}

/* ---------- custom cursor ---------- */
.cursor{display:none}
@media (hover:hover) and (pointer:fine){
  html.js:not(.static) .cursor{display:block;position:fixed;left:0;top:0;z-index:500;width:0;height:0;pointer-events:none;will-change:transform}
  .cursor__disc,.cursor__word{position:absolute;left:-48px;top:-48px;width:96px;height:96px;border-radius:50%}
  .cursor__disc{border:4px solid var(--ink);background:rgba(11,16,48,0);transform:scale(.34);opacity:0;transition:transform .55s var(--ease),background-color .35s,border-color .35s,opacity .35s}
  .cursor.is-on .cursor__disc{opacity:1}
  .cursor.is-link .cursor__disc{transform:scale(.56);border-color:var(--accent)}
  .cursor.is-word .cursor__disc{transform:scale(1);background:var(--ink);border-color:var(--ink)}
  .cursor.is-down .cursor__disc{transform:scale(.26)}
  .cursor.is-word.is-down .cursor__disc{transform:scale(.9)}
  .cursor__word{display:grid;place-items:center;color:#fff;font-family:var(--f-lat);font-weight:700;font-stretch:112%;font-size:.6875rem;letter-spacing:.14em;line-height:1;opacity:0;transform:scale(.5);transition:opacity .3s,transform .55s var(--ease)}
  .cursor.is-word .cursor__word{opacity:1;transform:none}
  .cursor.is-invert .cursor__disc{border-color:#fff}
  .cursor.is-invert.is-word .cursor__disc{background:#fff;border-color:#fff}
  .cursor.is-invert .cursor__word{color:var(--ink)}
}

/* ---------- row hovers (after reveal) ---------- */
@media (hover:hover){
  .svc__row:hover .svc__body{transform:translateX(12px)}
  .reason:hover > div{transform:translateX(12px)}
  .sub__item:hover h4,.sub__item:hover p{transform:translateX(8px)}
}

/* =========================================================
   REVEALS — only when JS is running and motion is allowed
   ========================================================= */
[data-reveal="row"]::before{content:"";position:absolute;left:0;right:0;top:0;height:1px;background:var(--ink);transform-origin:0 50%}

html.js:not(.static) [data-reveal="photo"]{clip-path:inset(0 100% 0 0);transition:clip-path 1.5s var(--ease) var(--d,0s)}
html.js:not(.static) [data-reveal="photo"][data-dir="right"]{clip-path:inset(0 0 0 100%)}
html.js:not(.static) [data-reveal="photo"][data-dir="up"]{clip-path:inset(100% 0 0 0)}
html.js:not(.static) [data-reveal="photo"] .ph__in{transform:scale(1.3);transition:transform 2s var(--ease) var(--d,0s)}
html.js:not(.static) [data-reveal="photo"].in{clip-path:inset(0)}
html.js:not(.static) [data-reveal="photo"].in .ph__in{transform:none}

html.js:not(.static) [data-reveal="plate"]{clip-path:inset(100% 0 0 0);transition:clip-path 1.4s var(--ease) var(--d,0s)}
html.js:not(.static) [data-reveal="plate"].in{clip-path:inset(0)}

html.js:not(.static) [data-reveal="chars"] .ch{display:inline-block;transform:translateY(108%) rotate(7deg);transform-origin:0 100%;transition:transform 1.15s var(--ease) calc(var(--d,0s) + var(--i,0) * 45ms)}
html.js:not(.static) [data-reveal="chars"].in .ch{transform:none}
.ch{display:inline-block}

html.js:not(.static) [data-reveal="lines"] .ln__in{transform:translateY(104%);transition:transform 1.2s var(--ease) calc(var(--d,0s) + var(--l,0) * 110ms)}
html.js:not(.static) [data-reveal="lines"].in .ln__in{transform:none}

html.js:not(.static) [data-reveal="fade"]{opacity:0;filter:blur(10px);transform:translateY(10px);transition:opacity 1s ease var(--d,0s),filter 1.1s ease var(--d,0s),transform 1.2s var(--ease) var(--d,0s)}
html.js:not(.static) [data-reveal="fade"].in{opacity:1;filter:none;transform:none}

html.js:not(.static) [data-reveal="row"]::before{transform:scaleX(0);transition:transform 1.3s var(--ease) var(--d,0s)}
html.js:not(.static) [data-reveal="row"] > *{opacity:0;transform:translateX(-32px);transition:opacity .9s ease calc(var(--d,0s) + .15s),transform 1.1s var(--ease) calc(var(--d,0s) + .15s)}
html.js:not(.static) [data-reveal="row"] > *:nth-child(2){transition-delay:calc(var(--d,0s) + .25s)}
html.js:not(.static) [data-reveal="row"].in::before{transform:scaleX(1)}
html.js:not(.static) [data-reveal="row"].in > *{opacity:1;transform:none}
html.js:not(.static) [data-reveal="row"].done > *{transition:transform .7s var(--ease),opacity .4s}

html.js:not(.static) [data-reveal="pop"]{transform:scale(0) rotate(-120deg);transition:transform 1.3s var(--ease) var(--d,0s)}
html.js:not(.static) [data-reveal="pop"].in{transform:none}

html.js:not(.static) [data-reveal="cycle"] .cycle__draw{stroke-dashoffset:1;transition:stroke-dashoffset 2s var(--ease) .2s}
html.js:not(.static) [data-reveal="cycle"].in .cycle__draw{stroke-dashoffset:0}
html.js:not(.static) [data-reveal="cycle"] .cycle__core,
html.js:not(.static) [data-reveal="cycle"] .cycle__orbit i{opacity:0;transition:opacity 1s ease .9s}
html.js:not(.static) [data-reveal="cycle"].in .cycle__core,
html.js:not(.static) [data-reveal="cycle"].in .cycle__orbit i{opacity:1}

html.js:not(.static) [data-scrub] .sc{opacity:.16}

/* =========================================================
   RESPONSIVE
   ========================================================= */
@media (max-width:1100px){
  .footer__cols{grid-template-columns:1fr 1fr}
}
@media (max-width:899px){
  :root{--hh:66px;--sec:clamp(88px,18vw,136px)}
  .header__logo img{height:42px}
  .nav,.header__cta{display:none}
  .burger{display:inline-flex;align-items:center;gap:12px;min-height:44px;padding:0 4px 0 12px;position:relative;z-index:2}
  .burger__txt{font-family:var(--f-lat);font-weight:600;font-stretch:110%;font-size:.875rem;letter-spacing:.06em}
  .burger__bars{position:relative;display:block;width:30px;height:12px;order:2}
  .burger__bars i{position:absolute;left:0;right:0;height:2px;background:var(--ink);transition:transform .6s var(--ease)}
  .burger__bars i:nth-child(1){top:0}
  .burger__bars i:nth-child(2){bottom:0}
  .burger[aria-expanded="true"] .burger__bars i:nth-child(1){transform:translateY(5px) rotate(24deg)}
  .burger[aria-expanded="true"] .burger__bars i:nth-child(2){transform:translateY(-5px) rotate(-24deg)}
  html:not(.js) .burger{display:none}
  html:not(.js) .nav{display:flex;flex-wrap:wrap;gap:4px 14px;justify-content:flex-end}
  html:not(.js) .nav__link{font-size:.8125rem;padding-block:4px}

  .hero{min-height:0}
  .hero__main{display:flex;flex-direction:column;padding-top:20px}
  .hero__copy{display:contents}
  .hero__title{order:1;font-size:clamp(2.375rem,11.2vw,4.25rem)}
  .hero__visual{order:2;margin-top:28px;min-height:0;aspect-ratio:5/4.1;margin-left:clamp(28px,9vw,80px)}
  .hero__lead{order:3;margin-top:72px;max-width:34em}
  .hero__cta{order:4;margin-top:32px}
  .hero__plate{left:calc((var(--gut) + clamp(28px,9vw,80px)) * -1);right:52%;top:38%;bottom:-36px}
  .badge{width:104px;height:104px;bottom:-52px;right:clamp(16px,5vw,40px)}
  .badge__arrow{width:24px;height:24px}
  .hero__sig{flex-direction:column;align-items:flex-start;gap:14px;padding-top:56px;padding-bottom:16px}
  .hero__lockup{font-size:clamp(3.5rem,17.4vw,8rem)}

  .about__grid{grid-template-columns:minmax(0,1fr);row-gap:48px}
  .about__photo{margin-right:var(--gut);aspect-ratio:4/3.2}
  .about__subwrap{width:44%;margin:-18% calc(var(--gut) + 12px) 0 auto}
  .about__text{padding:0 var(--gut)}

  .service__grid{display:block}
  .stage{display:none}
  .svc__row{padding-block:32px 48px}
  .svc__ph{display:block;aspect-ratio:16/10.5;margin:6px calc(var(--gut) * -1) 22px 0}
  .sub{display:block}
  .sub__title{margin-bottom:28px}
  .sub__list{grid-template-columns:minmax(0,1fr)}
  .sub__item{padding:16px 0 20px}

  .why__grid{display:block}
  .why__lead{position:static}
  .cycle{width:min(280px,76%);margin:48px auto 56px}
  .reason{grid-template-columns:52px minmax(0,1fr)}

  .statement{padding-block:136px 200px}
  .statement__main{font-size:clamp(1.375rem,5.9vw,2.75rem);line-height:1.7}
  .statement__main br.pc{display:none}
  .statement__sub{padding-left:0;padding-top:28px}
  .statement__sub::before{top:0}

  .works__head{flex-direction:column;align-items:flex-start;gap:20px}

  .contact__title,.contact__side{grid-column:1/-1}
  .contact__side{margin-top:32px}
  .btn--lg{min-height:68px;padding-left:28px;gap:18px}
  .btn--lg .btn__disc{width:50px;height:50px}

  .footer__brand,.footer__cols{grid-column:1/-1}
}
@media (max-width:520px){
  .footer__cols{grid-template-columns:minmax(0,1fr)}
  .work{width:82vw}
}
@media (min-width:900px) and (max-height:760px){
  .hero__lockup{font-size:clamp(3.5rem,9.4vw,8.5rem)}
  .hero__title{font-size:clamp(2.5rem,4.7vw,4.25rem)}
}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001ms !important;animation-iteration-count:1 !important;transition-duration:.001ms !important;transition-delay:0s !important;scroll-behavior:auto !important}
}

/* ---------- fixed CTA: PHP脆弱性 / WordPressセキュリティ → /security/ ---------- */
.fixcta{position:fixed;right:clamp(16px,2vw,28px);bottom:clamp(16px,2vw,28px);z-index:80;display:flex;flex-direction:column;align-items:flex-end;gap:10px;opacity:0;transform:translateY(16px);pointer-events:none;transition:opacity .6s var(--ease),transform .7s var(--ease)}
html.fixcta-on .fixcta,html:not(.js) .fixcta{opacity:1;transform:none;pointer-events:auto}
html.menu-open .fixcta{opacity:0;pointer-events:none}
.fixcta__btn{position:relative;isolation:isolate;overflow:hidden;display:flex;flex-direction:column;justify-content:center;gap:2px;min-height:62px;padding:11px 54px 11px 22px;border-radius:999px;color:#fff;background:var(--ink);box-shadow:0 14px 32px -14px rgba(11,16,48,.55);line-height:1.3;transition:transform .5s var(--ease)}
.fixcta__btn::before{content:"";position:absolute;inset:-1px;z-index:-1;background:var(--accent);transform:scaleX(0);transform-origin:0 50%;transition:transform .65s var(--ease)}
.fixcta__btn::after{content:"";position:absolute;right:18px;top:50%;width:9px;height:9px;border-top:2px solid currentColor;border-right:2px solid currentColor;transform:translateY(-50%) rotate(45deg);transition:transform .5s var(--ease)}
.fixcta__btn:hover::before,.fixcta__btn:focus-visible::before{transform:scaleX(1)}
.fixcta__btn:hover::after{transform:translate(4px,-50%) rotate(45deg)}
.fixcta__btn--wp{background:var(--accent)}
.fixcta__btn--wp::before{background:var(--ink)}
.fixcta__k{font-size:.6875rem;font-weight:700;letter-spacing:.08em;opacity:.82}
.fixcta__t{font-size:.9375rem;font-weight:900;letter-spacing:.02em;white-space:nowrap}
@media (max-width:899px){
  .fixcta{left:0;right:0;bottom:0;flex-direction:row;align-items:stretch;gap:0;transform:translateY(100%);padding:0 0 calc(12px + env(safe-area-inset-bottom,0px));background:#fff;border-top:1px solid rgba(11,16,48,.12)}
  html.fixcta-on .fixcta,html:not(.js) .fixcta{transform:none}
  .fixcta__btn{flex:1 1 50%;min-width:0;min-height:64px;padding:8px 26px 8px 14px;border-radius:0;box-shadow:none;gap:3px}
  .fixcta__btn::after{right:10px;width:7px;height:7px}
  .fixcta__k{font-size:.625rem;letter-spacing:.04em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .fixcta__t{font-size:.8125rem;white-space:normal}
  .fixcta__pc{display:none}
  body.has-fixcta .footer{padding-bottom:calc(76px + env(safe-area-inset-bottom,0px) + 32px)}
}
@media (prefers-reduced-motion:reduce){.fixcta{transition:none}}

@media print{
  .loader,.cursor,.menu,.ground,.fixcta{display:none !important}
  .header{position:static}
}
