:root {
  --c-text:#333;
  --c-muted:#ddd;
  --c-border:#e7e7e7;
  --c-bg:#fff;
  --c-mint:#5ec4a6;
  --c-sky:#a8dff5;
  --t-lora:'Lora', serif;
  --shadow:0 10px 30px rgba(0,0,0,.06);
  --radius:16px;
  --radius-sm:10px;
  --container:1200px;
}
* {
  box-sizing:border-box;
}
body {
  margin:0;
  color:var(--c-text);
  background:var(--c-bg);
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Noto Sans JP","Yu Gothic","Meiryo",sans-serif;
  letter-spacing: 0.1em;
  line-height:1.8;
}
img {
  max-width:100%;
  height:auto;
  display:block;
}
h1 {
  font-size: min(40px,2.7vw);
  font-weight:500;
  letter-spacing:0.1em;
  line-height: 2.8;
}
h2 {
  font-size: min(36px,2.5vw);
  letter-spacing:0.1em;
  font-weight:600;
}
h3 {
  font-size: min(20px,1.4vw);
  letter-spacing:0.1em;
  font-weight:600;
}
h4 {
  font-size: min(20px,1.4vw);
  letter-spacing:0.1em;
  font-weight:700;
}
h5,
h6 {
  font-size: min(16px,1.1vw);
  letter-spacing:0.1em;
  font-weight:500;
}
a{
  font-size: min(16px,1.1vw);
  letter-spacing:0.1em;
  font-weight:400;
  color:inherit;
  text-decoration:none;
}
p {
  font-size: min(16px,1.1vw);
  letter-spacing:0.1em;
  font-weight:400;
}
.container {
  width:min(92%,var(--container));
  margin-inline:auto;
}
.u-section {
  padding:50px 0;
}
.u-title {
  font-size:clamp(20px,2.4vw,28px);
  text-align:center;
  margin:0 0 28px;
}
.u-title::after {
  content:"";
  display:block;
  width:56px;
  height:4px;
  background:var(--c-sky);
  border-radius:3px;
  margin:10px auto 0;
}
.u-lead {
  text-align:center;
  margin:0 0 50px;
}
.btn {
  display:inline-grid;
  place-items:center;
  padding:10px 30px;
  border-radius:999px;
  font-size:min(16px,1.1vw);
  font-weight:700;
  letter-spacing: 0.1em;
  border:1px solid transparent;
  transition:.2s;
}
.btn--primary {
  background:var(--c-mint);
  color:#fff;
  font-weight:600;
}
.btn--primary:hover {
  filter:brightness(.95);
}
.btn--ghost {
  background:#fff;
  color:var(--c-mint);
  border-color:var(--c-mint);
}
.grid {
  display:grid;
  gap:20px;
}

@media screen and (max-width:1024px) and (min-width:769px) {
  h1 {
    font-size:5vw;
  }
}
@media screen and (max-width:768px) {
  .pc-none {
    display:block;
  }
  .sp-none {
    display:none;
  }
  body {
    font-size:min(12px,3.2vw);
  }
  body {
    font-size:min(12px,3.2vw);
  }
  h1 {
    font-size: min(24px,5.9vw);
  }
  h2 {
    font-size: min(20px,5.3vw);
  }
  h3,
  h4 {
    font-size: min(16px, 4.2vw);
  }
  h5,
  h6 {
    font-size: min(16px,4.2vw);
    letter-spacing:0.1em;
    font-weight:500;
  }
  a {
    font-size: min(12px,3.2vw);
    letter-spacing:0.1em;
  }
  p {
    font-size: min(12px,3.2vw);
    letter-spacing:0.1em;
  }
  .btn {
    font-size:min(12px,3.2vw);
  }
}

/* animation */
:root{
  --reveal-duration: 0.8s; 
  --reveal-duration-slow: 2s;
  --reveal-ease: cubic-bezier(.2,.7,.2,1);
  --wipe-softness: 0px;
  --reveal-tx: 0px;
  --reveal-ty: 12px;
}

/* reveal--fadeup（下から上） */
.reveal--fadeup {
  opacity: 0;
  transform: translateY(10px);
  transition: opacity var(--reveal-duration-slow) var(--reveal-ease),
              transform var(--reveal-duration-slow) var(--reveal-ease);
  will-change: opacity, transform;
}
.reveal.is-inview.reveal--fadeup {
  opacity: 1;
  transform: none;
}

/* reveal--fadein（右から左） */
.reveal--fadein {
  opacity: 0;
  transform: translateX(-50px);
  transition: opacity var(--reveal-duration-slow) var(--reveal-ease),
              transform var(--reveal-duration-slow) var(--reveal-ease);
  will-change: opacity, transform;
}
.reveal.is-inview.reveal--fadein {
  opacity: 1;
  transform: none;
}

/* prefers-reduced-motion対応（すべてまとめて） */
@media (prefers-reduced-motion: reduce) {
  .reveal--fadeup,
  .reveal--fadein,
  .reveal.is-inview.reveal--fadeup,
  .reveal.is-inview.reveal--fadein {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
  }
}

/* reveal--alpha */
.reveal--alpha{
  /* テキストにも効くように inline-block 推奨 */
  display:inline-block;
  will-change: -webkit-mask-size, mask-size;
  /* マスク画像：右端だけ透明へフェード */
  -webkit-mask-image: linear-gradient(90deg,
      #000 0,
      #000 calc(100% - var(--wipe-softness)),
      transparent 100%);
          mask-image: linear-gradient(90deg,
      #000 0,
      #000 calc(100% - var(--wipe-softness)),
      transparent 100%);
  -webkit-mask-repeat: no-repeat;
          mask-repeat: no-repeat;

  /* 初期：幅0% = 全面マスク（非表示） */
  -webkit-mask-size: 0% 100%;
          mask-size: 0% 100%;
  transition:
    -webkit-mask-size var(--reveal-duration) var(--reveal-ease),
            mask-size var(--reveal-duration) var(--reveal-ease);
}
/* 表示トリガー後：幅100%まで広げる＝左から順に不透明へ */
.reveal.is-inview.reveal--alpha{
  -webkit-mask-size: 100% 100%;
          mask-size: 100% 100%;
}
/* フォールバック（古いブラウザ）：通常の左→右フェード風に */
@supports not ((mask-image: linear-gradient(to right, #000, transparent)) or
              (-webkit-mask-image: linear-gradient(to right, #000, transparent))){
  .reveal--alpha{
    opacity: 0;
    transform: translateX(-8px);
    transition: opacity var(--reveal-duration) var(--reveal-ease),
                transform var(--reveal-duration) var(--reveal-ease);
  }
  .reveal.is-inview.reveal--alpha{
    opacity: 1; transform: none;
  }
}
/* =========================
  wipe-up（下から上）
========================= */
.reveal--up {
  display: inline-block;
  will-change: mask-size, -webkit-mask-size;
  -webkit-mask-image: linear-gradient(180deg,
      #000 0,
      #000 calc(100% - var(--wipe-softness)),
      transparent 100%);
          mask-image: linear-gradient(180deg,
      #000 0,
      #000 calc(100% - var(--wipe-softness)),
      transparent 100%);
  -webkit-mask-repeat: no-repeat;
          mask-repeat: no-repeat;
  -webkit-mask-size: 100% 0%;
          mask-size: 100% 0%;
  transition:
    -webkit-mask-size var(--reveal-duration) var(--reveal-ease),
            mask-size var(--reveal-duration) var(--reveal-ease);
}

.reveal.is-inview.reveal--up {
  -webkit-mask-size: 100% 100%;
          mask-size: 100% 100%;
}
/* =========================
  wipe-right（右から左）
========================= */
.reveal--right {
  display: inline-block;
  will-change: -webkit-mask-size, mask-size;
  -webkit-mask-image: linear-gradient(270deg, /* ← 右から左へ */
    #000 0,
    #000 calc(100% - var(--wipe-softness)),
    transparent 100%);
  mask-image: linear-gradient(270deg,
    #000 0,
    #000 calc(100% - var(--wipe-softness)),
    transparent 100%);
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-size: 0% 100%;
  mask-size: 0% 100%;

  transition:
    -webkit-mask-size var(--reveal-duration) var(--reveal-ease),
            mask-size var(--reveal-duration) var(--reveal-ease);
}
.reveal--right.is-inview {
  -webkit-mask-size: 100% 100%;
  mask-size: 100% 100%;
}
/* フォールバック（古いブラウザ） */
@supports not ((mask-image: linear-gradient(to left, #000, transparent)) or
              (-webkit-mask-image: linear-gradient(to left, #000, transparent))) {
  .reveal--up {
    opacity: 0;
    transform: translateY(8px);
    transition: opacity var(--reveal-duration) var(--reveal-ease),
                transform var(--reveal-duration) var(--reveal-ease);
  }
  .reveal.is-inview.reveal--up {
    opacity: 1;
    transform: none;
  }
  .reveal--right {
    opacity: 0;
    transform: translateX(8px);
    transition: opacity var(--reveal-duration) var(--reveal-ease),
                transform var(--reveal-duration) var(--reveal-ease);
  }
  .reveal.is-inview.reveal--right {
    opacity: 1;
    transform: none;
  }
}

/* Header */
.header {
  position:sticky;
  top:20px;
  width:95vw;
  max-width:1400px;
  height: 150px!important;;
  margin:0 auto;
  z-index:50;
  background:#fff;
  border-radius:150px;
  border:1px solid var(--c-muted);
  height:var(--header-h);
}
.header__inner {
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  gap:10px;
  height:100%;
}
.header__actions {
  display:flex;
  align-items:center;
  gap:50px;
  justify-content: space-between;
}
.phone {
  display:flex;
  flex-direction:row;
  gap:5px;
  align-items: center;
  height:60px;
}
.phone img {
  width:40px;
  height:40px;
}
.phone-number {
  font-size:min(28px,2vw);
  font-weight:700;
  line-height: 0.8;
  text-align: right;
}
.phone-number span {
  font-size:min(10px,0.7vw);
  font-weight:400;
}
.site-header__logo {
  width:120px;
  height:auto;
}
.header__toggle {
  width:42px;
  height:42px;
  border:1px solid var(--c-border);
  border-radius:12px;
  background:var(--c-bg);
  display:inline-grid;
  place-items:center;
}
.header__toggle {
  display:none;
}
.burger {
  width:20px;
  height:2px;
  background:#111;
  position:relative;
  transition:.25s;
}
.burger::before,
.burger::after {
  content:"";
  position:absolute;
  left:0;
  width:20px;
  height:2px;
  background:inherit;
  transition:.25s;
}
.burger::before {
  top:-6px;
}
.burger::after {
  top:6px;
}
.nav {
  position: static;
  translate: 0 0;
  width: 100%;
  height:60px;
  border: 0;
  padding: 0;
  display:flex;
  flex-direction: row;
  gap: 2%;
  justify-content: center;
  align-items: center;
}
.nav__link {
  padding:10px 20px;
  border-radius:10px;
  font-weight:600;
  border-radius:999px;
}
.nav__link:hover {
  background:var(--c-mint);
  color:var(--c-bg);
  transition:0.3s;
}
.is-open .nav {
  translate:0 0;
}
.is-open .burger {
  background:transparent;
}
.is-open .burger::before {
  transform:rotate(45deg) translate(4px,4px);
}
.is-open .burger::after {
  transform:rotate(-45deg) translate(4px,-4px);
}

@media screen and (max-width:768px) {
  .header {
    background-color:var(--c-bg);
    border:none;
    width:100vw;
    height: auto!important;
  }
  .header__inner {
    display: flex;
    flex-direction: row-reverse;
    justify-content: space-between;
  }
  .header__toggle {
    width: 42px;
    height: 42px;
    border:none;
    display: inline-grid;
    place-items: center;
    z-index:1000;
  }
  .header__actions {
    gap:10px;
  }
  .phone img {
    width:24px;
    height:24px;
  }
  .phone {
    flex-wrap: wrap;
  }
  .phone-number {
    font-size: min(12px, 3.2vw);
    line-height: 1.2;
  }
  .phone-number span {
    font-size: min(10px, 2.6vw);
  }
  .header .btn {
    font-size: min(10px, 2.6vw);
    padding: 10px;
  }
  .site-header__brand {
    width: 40%;
    height: auto;
    margin-bottom: 50px;
  }
  .burger {
    width: 20px;
    height: 2px;
    background: #111;
    position: relative;
    transition: .25s;
  }
  .burger::before,
  .burger::after {
    content: "";
    position: absolute;
    left: 0;
    width: 20px;
    height: 2px;
    background: inherit;
    transition: .25s;
  }
  .burger::before {
    top: -6px;
  }
  .burger::after {
    top: 6px;
  }
  /* ドロワー本体（SP時のみ固定表示、右から） */
  .nav {
    position: fixed;
    top: 0;
    right: 0;
    bottom: 0;
    width: min(86vw, 320px);
    height: 100vh;
    transform: translateX(100%);
    transition: transform .25s ease;
    background: #fff;
    border-left: 1px solid #e7e7e7;
    padding: 50px 20px;
    display: flex;
    flex-direction: column;
    gap: 8px;
    z-index: 100;
    align-items: flex-start;
    justify-content: flex-start;
  }
  .nav__link {
    padding: 12px;
    border-radius: 10px;
    font-weight: 600;
  }
  .nav__link:hover {
    background: #eaf8f3;
  }
  /* オーバーレイ */
  .nav-overlay {
    position: fixed;
    inset: 0;
    background: rgba(0,0,0,.35);
    opacity: 0;
    pointer-events: none;
    transition: opacity .25s ease;
    z-index: 1;
  }
  /* 開いた状態 */
  .is-open .nav {
    transform: translateX(0);
  }
  .is-open .nav-overlay {
    pointer-events: auto;
  }
  .is-open .burger {
    background: transparent;
  }
  .is-open .burger::before {
    transform: rotate(45deg) translate(4px, 4px);
    z-index:5000;
    background: var(--c-text);
  }
  .is-open .burger::after {
    transform: rotate(-45deg) translate(4px, -4px);
    background: var(--c-text);
  }
  /* スクロールロック */
  .is-open {
    overflow: hidden;
  }
}

/* Hero */
.hero {
  width:100vw;
  height:auto;
  margin-top:-150px;
}
.hero__inner {
  position: relative;
  width:100%;
  height:800px;
}
.hero__inner img {
  width:100%;
  height:100%;
  object-fit: cover;
}
.hero__title {
  position:absolute;
  top:40%;
  left:50%;
  transform: translateX(-50%)!important;
  font-weight:600;
  text-align: center;
  width:100%;
}
.hero__lead {
  position:absolute;
  top:55%;
  left:50%;
  transform: translateX(-50%)!important;
  font-size:min(20px,1.4vw);
  text-align: center;
  width:100%;
}
.hero__cta{
  display:flex;
  gap:12px;
  flex-wrap:wrap;
}
.hero__badge{
  position:absolute;
  right:24px;
  bottom:24px;
  background:var(--c-sky);
  color:#fff;
  padding:10px 14px;
  border-radius:999px;
  font-weight:800;
}
@media screen and (max-width:1024px) and (min-width:769px) {
  .hero__lead {
    font-size: 2vw;
  }
}
@media screen and (max-width:768px) {
  .hero__lead {
    position: absolute;
    top: 50%;
    left: 50%;
    font-size: min(12px,3.2vw);
  }
}

/* Greeting */
.greet {
  background-color:#F6F6F6;
}
.greet__wrap{
  display:flex;
  flex-direction:row;
  align-items: flex-end;
  margin-bottom: 100px;
}
.greet__photo{
  width:min(320px,80%);
  margin-inline:auto;
}
.greet__card{
  width:70%;
  padding:100px;
  background-color:var(--c-bg);
}
.greet__photo {
  width:35%;
  height:auto;
  margin:0 0 -100px -50px;
  text-align:right;
}
.greet__photo img {
  width:100%;
  height:80%;
  object-fit:cover;
}
.greet__photo p {
  font-size:min(20px,1.4vw);
  margin-top: 20px;
}
@media screen and (max-width:1024px) and (min-width:769px) {
  .greet__card {
    padding: 80px 60px;
  }
}
@media screen and (max-width:768px) {
  .greet__wrap {
    flex-direction:column-reverse;
  }
  .greet__card  {
    width: 90%;
    padding: 50px 5%;
    margin:0 auto;
  }
  .greet__photo {
    width: 60%;
    margin:0 auto;
    text-align: center;
  }
  .greet__photo p {
    font-size:min(14px,3.7vw);
    margin:20px 0 50px;
  }
}
/* Features */
.features {
  background:
    linear-gradient(rgba(168, 246, 255, 0.6), rgba(168, 246, 255, 0.6)), 
    url("../img/demo4/bg1.jpg") center/cover no-repeat;
}
.features__list {
  grid-template-columns:1fr 1fr;
  gap:50px;
  margin-bottom: 200px;
}
.feature {
  position:relative;
  padding:20px;
}
.feature__right {
  margin-top:100px;
}
.feature__thumb {
  width:80%;
}
.feature__thumb img {
  width:100%;
  height:100%;
  aspect-ratio:3/2;
  object-fit:cover;
}
.feature__body {
  position: absolute;
  bottom: -10%;
  right: 0;
  width:25vw;
  max-width:280px;
  height:25vw;
  max-height:280px;
  aspect-ratio: 1/1;
  background-color:rgba(255,255,255,0.8);
  padding:20px 10px;
}
.feature__right .feature__body {
  position: absolute;
  bottom: calc(-10% - 100px);
  right: 0;
}
.feature__num{
  font-family:var(--t-lora);
  font-size:min(100px,7vw);
  font-weight:400;
  line-height: 1;
  letter-spacing: 0.1em;
  color:var(--c-mint);
}
.feature__title {
  border-bottom:1px solid var(--c-mint);
  line-height: 2;
  margin:10px 0;
}

@media screen and (max-width:768px) {
  .features__list {
    grid-template-columns:1fr;
  }
  .feature {
    margin-top:100px!important;
  }
  .feature:nth-child(1) {
    margin-top:0!important;
  }
  .feature__right {
    margin-top:0;
  }
  .feature__thumb {
    width:100%;
    max-width: 500px;
  }
  .feature__body {
    position: absolute;
    bottom: calc(-10% - 100px);
    width: 60vw;
    max-width: 300px;
    height: 60vw;
    max-height: 300px;
  }
  .feature__num {
    font-size:min(56px,15vw);
  }
}

/* Specialties */
.spec {
  background-color:#f6f6f6;
}
.spec__grid {
  grid-template-columns:repeat(3,1fr);
  gap:50px;
}
.spec-card {
  overflow:hidden;
  background:#fff;
}
.spec-card__media {
  aspect-ratio:16/9;
  object-fit:cover;
}
.spec-card__body {
  padding:16px;
}
.spec-card__title {
  margin-bottom:10px;
}
.spec-card__title span {
  color:var(--c-mint);
}

@media screen and (max-width:768px) {
  .spec__grid {
    grid-template-columns: repeat(1, 1fr);
    gap: 50px;
  }
  .spec-card {
    width:80%;
    margin:0 auto;
  }
}

/* Access */
.access {
  background:
    linear-gradient(rgba(207, 249, 237, 0.6), rgba(207, 249, 237, 0.6)), 
    url("../img/demo4/bg2.jpg") center/cover no-repeat;
}
.access__wrap {
  display:flex;
  flex-direction:row;
  gap:50px;
  justify-content: center;
}
.access__map {
  width:40%;
  height:auto;
}
.access__map iframe,
.access__map img{
  width:100%;
  height:100%;
  object-fit:cover;
}
.access__info {
  width:50%;
  text-align:right;
}
.table {
  width:100%;
  border-collapse:collapse;
  background:#fff;
  overflow:hidden;
  box-shadow:var(--shadow);
}
.table th,
.table td{
  padding:12px;
  border:1px solid var(--c-border);
  text-align:center;
  font-size:min(14px,1vw);
}
.table thead th{
  background:#e7f1fc;
  font-weight:700;
}
.table__time{
  white-space:nowrap;
}

@media screen and (max-width:768px) {
  .access__wrap {
    flex-direction:column;
    gap:50px;
    align-items:center ;
  }
  .access__map,
  .access__info {
    width:90%;
  }
  .access__info {
    text-align:left;
  }
  .table th, .table td {
    padding: 10px 6px;
    font-size:min(10px,2.4vw);
  }
}

/* Contact */
.contact {
  background-color:#f6f6f6;
}

.contact__note {
  text-align:center;
}

.contact__form{
  display:grid;
  gap:14px;
}

.form__row{
  display:grid;
  gap:6px;
}

.form__label{
  font-weight:700;
}

.form__input,
.form__textarea{
  width:100%;
  padding:10px 20px;
  border:1px solid var(--c-border);
  font:inherit;
  background:#fff;
}

.form__textarea{
  min-height:160px;
  resize:vertical;
}

.contact .btn {
  min-width:140px;
  float:right;
  margin-top:50px;
}

/* Footer */
.footer {
  background:#0f2c2a;
  color:#e9fffa;
  padding:40px 0 24px;
}
.footer__top {
  display:grid;
  gap:20px;
  grid-template-columns: 2fr 3fr;
  align-items:center;
}
.footer__col h4 {
  margin:0 0 10px;
  font-size:16px;
}
.footer__nav a {
  display:inline-block;
  padding: 0px 2.5%;
  color:#e9fffa;
}
.footer__nav a:hover {
  background:rgba(255,255,255,.08);
}
.footer__copy {
  opacity:.8;
  text-align:center;
  font-size:12px;
  margin-top:14px;
}

@media screen and (max-width:768px) {
  .footer__top {
    display:flex;
    flex-direction:column;
  }
  .footer__nav {
    display:flex;
    flex-direction:column;
    text-align:left;
    gap: 10px;
    margin-bottom: 30px;
  }
  .footer__nav a {
    padding:0;
  }
}
/* Utilities */
.sr-only{
  position:absolute;
  width:1px;
  height:1px;
  margin:-1px;
  overflow:hidden;
  clip:rect(0,0,0,0);
  white-space:nowrap;
  border:0;
}

.stack-sm > * + *{
  margin-top:10px;
}

.stack-md > * + *{
  margin-top:16px;
}
