* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

html,
body {
  width: 100%;
  max-width: 100%;
  overflow-x: hidden;
}

body {
  min-width: 0;

   font-family: "Sawarabi Mincho", serif;

}

img,
svg,
video,
iframe {
  max-width: 100%;
  height: auto;
}

p {
  font-family: "Noto Serif JP", serif;
}
h3 {
  font-weight: 300;
  letter-spacing: 0.2rem;
}


.section-heading {
  
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.section-heading h2 {
  letter-spacing: 0.15rem;
  font-weight: 300;
  margin-bottom: 1rem;
}
.section-heading-en {
  font-size: 1rem;
 font-family: "Cormorant Garamond", serif;
  font-style: italic;
  font-weight: 400;
}



header {
  position: fixed;
  top: 0;
  right: 0;
  left: auto;

  width: 72px;
  height: 72px;

  margin: 0;
  padding: 0;

  z-index: 9999;
}

.header-contact{
  width: 72px;
  height: 72px;

  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 4px;

  margin: 0;
  padding: 0;

  background-color: #1f2d3d;
  color: #fff;
  text-decoration: none;
}

.header-contact svg {
  display: block;

  width: 24px;
  height: 24px;

  fill: currentColor;
}

.header-contact span {
  display: block;

  font-size: 10px;
  line-height: 1;
  white-space: nowrap;
}

.FV {
  position: relative;
  height: 100svh;
  overflow: hidden;
  background-color: #fff;
  
}

.FV img {
  position: absolute;

  width: 100%;
  height: 100svb;

  object-fit: cover;
  object-position: 60% center;

  z-index: 0;
}

.FV::after {
  content: "";
  position: absolute;
  inset: 0;

  width: 100%;
  height: 100svh;

  background: rgba(120, 180, 220, 0.45);

  opacity: 0;
  transform: translateX(-100%);

  transition:
    opacity 0.8s ease,
    transform 1.2s ease;

  z-index: 1;
  pointer-events: none;
}

.FV.is-show::after {
  opacity: 1;
  transform: translateX(0);
}
.FV-text {
  position: absolute;
  top: 50svb;
  left: 50%;
  z-index: 2;

  width: 100%;
  padding: 0 20px;

  transform: translate(-50%, -50%);

  text-align: center;
  font-family: "Sawarabi Mincho", serif;

  color: #fff;
}

.FV .shamei {
  margin-bottom: 16px;

  font-size: 2rem;
  letter-spacing: 0.3em;
  font-weight: 800;
}

.FV h1 {
  font-size: 14px;
  font-weight: 400;
  letter-spacing: 0.05em;
}

.concept {
  position: relative;
  height: 90svh;
}

.concept img {
  position: absolute;
  top: 20px;
  left: 20px;

  width: calc(100% - 50px);
  height: 80svh;

  max-width: none;

  object-fit: cover;
  object-position: 60% center;

  z-index: 0;
}

.concept::after {
  content: "";
  position: absolute;
  top: 20px;
  left: 20px;

  width: calc(100% - 50px);
  height: 80svh;

  background: rgba(220, 235, 245, 0.2);
  z-index: 1;
  pointer-events: none;

}

.concept-text {
  position: absolute;
  left: 40px;
  right: 20px;
  top: 30px;
  z-index: 2;

  background-color: rgba(255, 255, 255, 0.85);
  padding: 24px 20px;
}

.concept-text .section-heading {
  position: static;
  margin-bottom: 24px;
}

.philosophy-text {
  position: static;
  font-size: 14px;
  line-height: 2;
  font-weight: 200;
}

.concept .section-heading {
  opacity: 0;
  transform: translateX(-70px);

  transition:
    opacity 0.8s ease,
    transform 0.8s ease;
}

.concept .philosophy-text {
  opacity: 0;
  transform: translateX(-70px);

  transition:
    opacity 1.1s ease 0.35s,
    transform 1.1s ease 0.35s;
}

.concept.is-show .section-heading,
.concept.is-show .philosophy-text {
  opacity: 1;
  transform: translateX(0);
}

.work {
  position: relative;

  width: 100%;
  min-height: 100svh;
  padding-bottom: 5svh;

  overflow: visible;
}


.work .work-fv {
  position: relative;
  left: 30px;

  width: 45svh;
  height: auto;

  object-fit: cover;

  z-index: 2;
}

.work .work-fv-text {
  position: relative;
  bottom: 30px;
  left: 20px;

  width: calc(100% - 40px);
  min-height: 220px;

  display: flex;
  flex-direction: column;
  gap: 8px;

  padding: 50px 32px 20px 24px;

  border: 1px solid #c0c0c0;

  z-index: 4;
}
.work .section-headingg {
  position: static;

  margin-bottom: 16px;
}

.work .work-item1,
.work .work-item2,
.work .work-item3 {
  position: relative;
  height: 55svh;
}

.work-item1 .work-item-img,
.work-item2 .work-item-img,
.work-item3 .work-item-img {
  position: absolute;
  left: 20px;

  width: 40svh;
  height: auto;

  object-fit: cover;

  z-index: 0;
}

.work-item1 .workitem-text,
.work-item2 .workitem-text,
.work-item3 .workitem-text {
  position: absolute;
  bottom: 5svh;
  left: 50px;

  display: inline-flex;
  flex-direction: column;
  gap: 8px;

  padding: 50px 24px 20px;

  border: 1px solid #c0c0c0;

  z-index: 2;
}
.workitem-text h3 {
  position: static;

  margin-bottom: 16px;
}
.workitem-text p {
  letter-spacing: 0.05rem;
  font-size: 0.75rem;
}



.News {
  padding: 80px 20px;
}

.News-text {
  width: 100%;
}

.News .section-heading {
  margin-bottom: 32px;
}

.news-list {
  list-style: none;
}

.news-item {
  border-bottom: 1px solid #cfcfcf;
}

.news-item:first-child {
  border-top: 1px solid #cfcfcf;
}

.news-link {
  display: block;

  padding: 20px 0;

  color: #222;
  text-decoration: none;
}

.news-date {
  display: inline-block;
  margin-right: 12px;

  font-size: 0.8rem;
  color: #777;
}

.news-category {
  display: inline-block;

  font-size: 0.75rem;
  color: #555;
}

.news-title {
  margin-top: 10px;

  font-size: 0.9rem;
  line-height: 1.7;
  letter-spacing: 0.03em;
}

.news-link:hover {
  opacity: 0.65;
}
footer {
  position: relative;
  min-height: 70svh;
  overflow: hidden;

  display: flex;
  align-items: center;
  justify-content: center;

  padding: 60px 20px;
}

footer iframe {
  position: absolute;
  inset: 0;

  width: 100%;
  height: 100%;
  max-width: none;

  border: 0;

  z-index: 0;
}
footer::after {
  content: "";
  position: absolute;
  inset: 0;

  background: rgba(15, 35, 50, 0.1);

  z-index: 1;
  pointer-events: none;
}
footer .company-info {
  position: absolute;
  top: 5px;
  left: 5px;
  z-index: 2;
  padding: 1rem;
  background: rgba(255, 255, 255, 0.7);
}
footer .company-name {
  font-family: "Sawarabi Mincho", serif;

  letter-spacing: 0.3rem;

  margin-bottom: 1rem;
}

footer .company-text {
  font-family: "Noto Sans JP", serif;

  letter-spacing: 0.2rem;
  font-size: 12px;

 line-height: 2rem;
}
.copyright {
  position: absolute;
  left: 50%;
  bottom: 20px;

  transform: translateX(-50%);

  z-index: 2;

  color: #fff;
  font-size: 12px;
  letter-spacing: 0.08em;
  white-space: nowrap;
}

.loading {
  position: fixed;
  inset: 0;
  z-index: 99999;

  display: flex;
  align-items: center;
  justify-content: center;

  background-color: #1f2d3d;

  transition:
    opacity 0.8s ease,
    visibility 0.8s ease;
}

.loading-inner {
  width: 100%;
  padding: 30px;

  color: #fff;
}

.loading-name {
  margin-bottom: 50px;

  font-family: "Sawarabi Mincho", serif;
  font-size: 1.2rem;
  letter-spacing: 0.3em;
}

.loading-progress {
  width: 100%;
}

.loading-line {
  position: relative;

  width: 100%;
  height: 1px;

  background-color: rgba(255, 255, 255, 0.25);
  overflow: hidden;
}

.loading-line span {
  position: absolute;
  top: 0;
  left: 0;

  width: 0;
  height: 100%;

  background-color: #fff;

  transition: width 0.08s linear;
}

.loading-number {
  display: flex;
  align-items: flex-end;
  justify-content: flex-end;
  gap: 6px;

  margin-top: 16px;

  font-family: "Cormorant Garamond", serif;
}

#loading-count {
  font-size: 1.5rem;
  line-height: 1;
}

.loading-percent {
  padding-bottom: 5px;
  font-size: 1.4rem;
}

.loading.is-loaded {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}

/* =========================
   共通
========================= */

.slide-left,
.slide-left-slow,
.zoom-up,
.zoom-in,
.fade-up,
.fade-up-delay1,
.fade-up-delay2,
.slide-down,
.fade-in {
  opacity: 0;
  will-change: opacity, transform;
}


/* =========================
   左からスライドイン：速い
========================= */

.slide-left {
  transform: translateX(-70px);

  transition:
    opacity 0.6s ease,
    transform 0.6s ease;
}

.slide-left.is-show {
  opacity: 1;
  transform: translateX(0);
}


/* =========================
   左からスライドイン：遅い
========================= */

.slide-left-slow {
  transform: translateX(-70px);

  transition:
    opacity 1.4s ease,
    transform 1.4s ease;
}

.slide-left-slow.is-show {
  opacity: 1;
  transform: translateX(0);
}

.slide-right {
  opacity: 0;
  transform: translateX(70px);

  transition:
    opacity 1.8s ease,
    transform 1.8s ease;
}

.slide-right.is-show {
  opacity: 1;
  transform: translateX(0);
}


/* =========================
   ズームアップ
   小さい状態から拡大
========================= */

.zoom-up {
  transform: scale(0.85);

  transition:
    opacity 0.9s ease,
    transform 0.9s ease;
}

.zoom-up.is-show {
  opacity: 1;
  transform: scale(1);
}


/* =========================
   ズーム
   大きい状態から通常サイズ
========================= */

.zoom-in {
  transform: scale(1.12);

  transition:
    opacity 1.1s ease,
    transform 1.1s ease;
}

.zoom-in.is-show {
  opacity: 1;
  transform: scale(1);
}


/* =========================
   フェードアップ：通常
========================= */

.fade-up {
  transform: translateY(50px);

  transition:
    opacity 0.8s ease,
    transform 0.8s ease;
}

.fade-up.is-show {
  opacity: 1.4;
  transform: translateY(0);
}


/* =========================
   フェードアップ：少し遅れて表示
========================= */

.fade-up-delay1 {
  transform: translateY(50px);

  transition:
    opacity 0.8s ease 0.2s,
    transform 0.8s ease 0.2s;
}

.fade-up-delay1.is-show {
  opacity: 1;
  transform: translateY(0);
}


/* =========================
   フェードアップ：さらに遅れて表示
========================= */

.fade-up-delay2 {
  transform: translateY(50px);

  transition:
    opacity 0.8s ease 0.45s,
    transform 0.8s ease 0.45s;
}

.fade-up-delay2.is-show {
  opacity: 1;
  transform: translateY(0);
}


/* =========================
   上からダウンイン
========================= */

.slide-down {
  transform: translateY(-60px);

  transition:
    opacity 0.9s ease,
    transform 0.9s ease;
}

.slide-down.is-show {
  opacity: 1;
  transform: translateY(0);
}


/* =========================
   フェードイン
========================= */

.fade-in {
  transition: opacity 1.2s ease;
}

.fade-in.is-show {
  opacity: 1;
}
.work-fv-step {
  position: relative;
  left: 30px;

  width: 45svh;
  overflow: hidden;
}

/* 元画像 */
.work-fv-step .work-fv {
  position: relative;
  left: 0;

  display: block;

  width: 100%;
  height: auto;

  opacity: 0;
}

/* 縦に分割した帯 */
.step-panel {
  position: absolute;
  top: 0;

  width: 20%;
  height: 100%;

  background-image: url("img/手元.png");
  background-repeat: no-repeat;
  background-size: 500% 100%;

  transform: translateY(-100%);
  opacity: 0;

  transition:
    transform 0.7s ease,
    opacity 0.2s ease;
}

/* 各帯の位置 */
.step-panel1 {
  left: 0;
  background-position: 0% center;
}

.step-panel2 {
  left: 20%;
  background-position: 25% center;
}

.step-panel3 {
  left: 40%;
  background-position: 50% center;
}

.step-panel4 {
  left: 60%;
  background-position: 75% center;
}

.step-panel5 {
  left: 80%;
  background-position: 100% center;
}

.work-fv-step.is-show .step-panel1 {
  transform: translateY(0);
  opacity: 1;
  transition-delay: 0s;
}

.work-fv-step.is-show .step-panel2 {
  transform: translateY(0);
  opacity: 1;
  transition-delay: 0.15s;
}

.work-fv-step.is-show .step-panel3 {
  transform: translateY(0);
  opacity: 1;
  transition-delay: 0.3s;
}

.work-fv-step.is-show .step-panel4 {
  transform: translateY(0);
  opacity: 1;
  transition-delay: 0.45s;
}

.work-fv-step.is-show .step-panel5 {
  transform: translateY(0);
  opacity: 1;
  transition-delay: 0.6s;
}
.FV-image {
  opacity: 0;
  transform: scale(1.08);

  transition:
    opacity 1.2s ease,
    transform 1.8s ease;
}

.FV-title {
  opacity: 0;
  transform: translateX(-70px);

  transition:
    opacity 0.8s ease 0.3s,
    transform 0.8s ease 0.3s;
}

.FV-copy {
  opacity: 0;
  transform: translateY(40px);

  transition:
    opacity 0.8s ease 0.7s,
    transform 0.8s ease 0.7s;
}

.FV.is-show .FV-image,
.FV.is-show .FV-title,
.FV.is-show .FV-copy {
  opacity: 1;
  transform: translate(0) scale(1);
}

.work-fv-text .section-heading,
.work-fv-text .work-description {
  opacity: 1;
  transform: none;
}

.fixed-back-link {
  position: fixed;
  right: 32px;
  bottom: 32px;
  z-index: 100;

  display: flex;
  align-items: center;
  justify-content: center;

  text-decoration: none;

  width: 64px;
  height: 64px;
  padding: 0;

  color: #050505;
  background-color: rgba(250, 250, 250, 0.9);
  border: 1px solid rgba(250, 250, 250, );
  border-radius: 50%;

  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0;

  transition:
    color 0.25s ease,
    background-color 0.25s ease,
    transform 0.25s ease;
}

.fixed-back-link:hover {
  color: #fff;
  background-color: #050505;
  transform: translateY(-3px);
}


/* =========================
   Tablet / PC
========================= */
@media screen and (min-width: 768px) {

  /* =========================
     共通
  ========================= */
  .section-heading h2 {
    font-size: clamp(2rem, 3vw, 3rem);
  }

  .section-heading-en {
    font-size: clamp(1.2rem, 1.8vw, 1.6rem);
  }


  /* =========================
     Header
  ========================= */
  header {
    width: 140px;
    height: 100px;
  }

  .header-contact {
    width: 140px;
    height: 100px;
    gap: 8px;
  }

  .header-contact svg {
    width: 30px;
    height: 30px;
  }

  .header-contact span {
    font-size: 12px;
  }


  /* =========================
     FV
  ========================= */
  .FV {
    height: 100vh;
  }

  .FV img {
    width: 100%;
    height: 100%;

    object-position: center;
  }

  .FV::after {
    width: 100%;
    height: 100%;
  }

  .FV-text {
    top: 50%;

    width: 100%;
    padding: 0 40px;
  }

  .FV .shamei {
    margin-bottom: 24px;

    font-size: clamp(2.8rem, 5vw, 4.5rem);
    letter-spacing: 0.3em;
  }

  .FV h1 {
    font-size: clamp(1rem, 1.6vw, 1.4rem);
    letter-spacing: 0.12em;
  }


  /* =========================
     Concept
  ========================= */
  .concept {
    width: 100%;
    height: 100vh;

    margin-top: 80px;
  }

  .concept img {
    top: 0;
    left: 0;

    width: 70%;
    height: calc(100% - 140px);

    object-position: center;
  }

  .concept::after {
    top: 0;
    left: 0;

    width: 70%;
    height: calc(100% - 140px);
  }

  .concept-text {
    top: 50%;
    right: 5%;
    left: auto;

    width: 47%;

    padding: 40px 42px;

    transform: translateY(-50%);
  }

  .concept-text .section-heading {
    margin-bottom: 32px;
  }

  .philosophy-text {
    font-size: clamp(1rem, 1.4vw, 1.3rem);
    line-height: 2.2;
  }


  /* =========================
     Works FV
  ========================= */
  .work {
    position: relative;

    width: 100%;
    height: auto;
    min-height: 100vh;

    padding: 120px 6vw 160px;

    overflow: visible;
  }

 .work .work-fv {
  position: relative;
  left: auto;

  display: block;

  width: 58%;
  height: auto;

  margin-left: auto;

  object-fit: cover;
}

  .work .work-fv-text {
    position: absolute;

    top: 120px;
    left: 8%;
    bottom: auto;

    width: 45%;
    height: auto;
    min-height: 0;

    display: flex;
    flex-direction: column;
    gap: 8px;

    padding: 55px 70px 70px 40px;

    background: transparent;
    border: 1px solid #c0c0c0;
  }

  .work .section-heading {
    margin-bottom: 24px;
  }

  .work-description {
    margin-top: 2rem;

    font-size: clamp(1rem, 1.3vw, 1.25rem);
    line-height: 2;
  }
  
    .work-fv-step {
    position: relative;
    left: auto;

    width: 58%;
    margin-left: auto;

    overflow: hidden;
  }

  /* ラッパー内では画像を必ず横幅いっぱいにする */
  .work-fv-step .work-fv {
    position: relative;
    left: 0;

    display: block;

    width: 100%;
    max-width: none;
    height: auto;

    margin: 0;
  }

  /* =========================
     Works items
  ========================= */
  .work-items {
    display: flex;
    flex-direction: column;
    gap: 120px;

    margin-top: 160px;
  }

  .work .work-item1,
  .work .work-item2,
  .work .work-item3 {
    position: relative;

    display: flex;
    align-items: center;
    gap: 0;

    width: 100%;
    min-height: 500px;
  }

  .work-item1,
  .work-item3 {
    flex-direction: row-reverse;
  }

  .work-item2 {
    flex-direction: row;
  }

  .work-item1 .work-item-img,
  .work-item2 .work-item-img,
  .work-item3 .work-item-img {
    position: relative;

    display: block;

    width: 60%;
    height: 500px;

    object-fit: cover;

    z-index: 0;
  }

  .work-item1 .workitem-text,
  .work-item2 .workitem-text,
  .work-item3 .workitem-text {
    position: relative;

    right: auto;
    bottom: auto;
    left: auto;

    width: 45%;
    min-height: 380px;

    margin: 0;

    padding: 70px 60px;

    background-color: transparent;
    border: 1px solid #c0c0c0;

    z-index: 1;
  }

  .work-item1 .workitem-text,
  .work-item3 .workitem-text {
    margin-right: -80px;
  }

  .work-item2 .workitem-text {
    margin-left: -30px;
  }

  .workitem-text h3 {
    margin-bottom: 45px;

    font-size: clamp(1.8rem, 2.5vw, 2.5rem);
  }

  .workitem-text p {
    font-size: clamp(1rem, 1.4vw, 1.25rem);
    line-height: 2;
  }


  /* =========================
     News
  ========================= */
  .News {
    padding: 140px 0;
  }

  .News-text {
    width: 90%;
    max-width: 1500px;
    margin: 0 auto;

    padding: 70px 60px;

    background-color: #f3f3f1;
  }

  .News .section-heading {
    align-items: center;

    margin-bottom: 70px;

    text-align: center;
  }

  .News .section-heading h2 {
    font-size: clamp(2.2rem, 3vw, 3rem);
  }

  .News .section-heading-en {
    font-size: clamp(1.3rem, 1.8vw, 1.7rem);
  }

  .news-list {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));

    list-style: none;
  }

  .news-item {
    min-width: 0;
    padding: 0 40px;

    border-top: none;
    border-right: 1px solid #999;
    border-bottom: none;
  }

  .news-item:first-child {
    padding-left: 0;
    border-top: none;
  }

  .news-item:last-child {
    padding-right: 0;
    border-right: none;
  }

  .news-link {
    display: block;
    height: 100%;

    padding: 20px 0;

    color: #222;
    text-decoration: none;
  }

  .news-date {
    display: block;
    margin: 0 0 14px;

    color: #777;
    font-size: 1rem;
  }

  .news-category {
    display: block;
    margin: 0 0 24px;

    color: #555;
    font-size: 0.95rem;
  }

  .news-title {
    margin: 0;

    font-size: clamp(1rem, 1.3vw, 1.25rem);
    line-height: 1.8;
    letter-spacing: 0.05em;
  }


  /* =========================
     Footer
  ========================= */
  footer {
    min-height: 80vh;
  }

  footer .company-info {
    top: 50%;
    left: 6%;

    width: auto;

    padding: 40px;

    transform: translateY(-50%);
  }

  footer .company-name {
    margin-bottom: 35px;

    font-size: clamp(2rem, 3vw, 3rem);
    letter-spacing: 0.3rem;
  }

  footer .company-text {
    font-size: clamp(0.9rem, 1.2vw, 1.1rem);
    line-height: 2.3;
  }

  .copyright {
    bottom: 30px;

    font-size: 13px;
  }


  /* =========================
     Loading
  ========================= */
  .loading-inner {
    padding: 60px 8vw;
  }

  .loading-name {
    font-size: 1.4rem;
  }

  #loading-count {
    font-size: 5rem;
  }

  .loading-percent {
    font-size: 1.4rem;
  }
}