/* ==========================================================================
   Gran Éa — NAIL SALON
   Static prototype stylesheet
   --------------------------------------------------------------------------
   0. Tokens (custom properties)
   1. Reset / base
   2. Utilities (container, media, reveal, links)
   3. Header / drawer
   4. TOP: hero
   5. TOP: philosophy
   6. TOP: experience
   7. TOP: menu entry banner
   8. TOP: instagram (editorial collage)
  10. Reservation
  10b. ACCESS
  11. Footer
  11b. TOP → MENU page-turn transition
  12. MENU page
  13. Reduced motion
   ========================================================================== */

/* ==========================================================================
   0. Tokens
   ========================================================================== */
:root {
  /* color */
  --ivory: #F7F4EF;
  --ivory-rgb: 247, 244, 239;   /* same colour as --ivory, for rgba() fades */
  --ivory-deep: #EFEAE3;
  --greige-1: #D6D0C9;
  --greige-2: #B7AEA6;
  --greige-3: #8E857D;
  --ink: #3E3935;
  --ink-soft: #675f58;
  --line: rgba(142, 133, 125, .34);
  --white: #fff;

  /* typography */
  --font-en: "Cormorant Garamond", "Cormorant", "Times New Roman", serif;
  --font-ja: "Shippori Mincho", "Hiragino Mincho ProN", "Yu Mincho", "YuMincho", "Noto Serif JP", serif;
  --font-script: "Italianno", "Great Vibes", cursive;

  /* layout */
  --container: 1240px;
  --gutter: clamp(20px, 4.2vw, 60px);
  --header-h: 84px;
  --section-space: clamp(88px, 11vw, 176px);
  /* PC共通CONTENT RAIL: .containerが実際に着地する左右インセットと同じ式。
     フルブリード背景の中で文字・画像の基準位置だけを揃えたいときに使う
     （.reservation__banner・.site-footer__inner は素の.containerのままで
     既にこのレールに乗っているため変更不要）。 */
  --rail-inset-pc: max(var(--gutter), calc((100vw - var(--container)) / 2));

  /* motion */
  --ease: cubic-bezier(.22, .61, .36, 1);
  --dur-reveal: 1.2s;
  --dur-hover: 1.3s;
}

@media (max-width: 900px) {
  :root { --header-h: 64px; }
}

/* ==========================================================================
   1. Reset / base
   ========================================================================== */
*, *::before, *::after { box-sizing: border-box; }

html {
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;
}

body {
  margin: 0;
  background: var(--ivory);
  color: var(--ink);
  font-family: var(--font-ja);
  font-size: 15px;
  font-weight: 400;
  line-height: 2;
  letter-spacing: .08em;
  overflow-x: clip;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
}

img, svg, video { display: block; max-width: 100%; }
img { height: auto; }
figure, ul, ol, p, h1, h2, h3, dl, dd { margin: 0; padding: 0; }
ul, ol { list-style: none; }
a { color: inherit; text-decoration: none; }
button { font: inherit; color: inherit; background: none; border: 0; padding: 0; cursor: pointer; }
h1, h2, h3 { font-weight: 400; }

:focus-visible { outline: 1px solid var(--greige-3); outline-offset: 4px; }

::selection { background: var(--greige-1); color: var(--ink); }

/* ==========================================================================
   2. Utilities
   ========================================================================== */
.container {
  width: min(100% - var(--gutter) * 2, var(--container));
  margin-inline: auto;
}

.section-label {
  font-family: var(--font-en);
  font-size: clamp(21px, 1.75vw, 26px);
  font-weight: 400;
  letter-spacing: .07em;
  line-height: 1.4;
  color: var(--ink);
}

/* media frame — object-fit: cover, calm placeholder tone when the image is missing */
.media {
  position: relative;
  overflow: hidden;
  background: linear-gradient(160deg, var(--greige-1), #c4bcb3 60%, var(--greige-2));
}
.media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform var(--dur-hover) var(--ease), opacity var(--dur-hover) var(--ease);
}
/* layer that receives the slight scroll parallax (see main.js) */
.media__layer {
  position: absolute;
  inset: -6% 0;
  will-change: transform;
}

/* scroll reveal: opacity 0→1 / translateY 30px→0, slow */
.js .reveal {
  opacity: 0;
  transform: translate3d(0, var(--rise, 30px), 0);
  transition: opacity var(--dur-reveal) var(--ease-reveal, var(--ease)) var(--d, 0s),
              transform var(--dur-reveal) var(--ease-reveal, var(--ease)) var(--d, 0s);
}
.js .reveal--slow { --dur-reveal: 1.6s; }
.js .reveal.is-in {
  opacity: 1;
  transform: none;
}

/* text link with a hairline arrow ( → ) */
.link-arrow {
  display: inline-flex;
  align-items: center;
  gap: 16px;
  font-family: var(--font-en);
  font-size: 15px;
  font-weight: 500;
  letter-spacing: .14em;
  line-height: 1;
  color: var(--ink);
}
.link-arrow__icon {
  position: relative;
  display: block;
  width: 38px;
  height: 9px;
  background: linear-gradient(currentColor, currentColor) 0 50% / 100% 1px no-repeat;
  transition: transform 1s var(--ease), width 1s var(--ease);
}
.link-arrow__icon::after {
  content: "";
  position: absolute;
  right: 0;
  top: 50%;
  width: 6px;
  height: 6px;
  border-top: 1px solid currentColor;
  border-right: 1px solid currentColor;
  transform: translateY(-50%) rotate(45deg);
  transform-origin: 70% 30%;
}
a:hover > .link-arrow__icon,
a.link-arrow:hover .link-arrow__icon { transform: translateX(8px); }

.link-arrow--underline .link-arrow__label {
  padding-bottom: 6px;
  border-bottom: 1px solid currentColor;
}

/* ==========================================================================
   3. Header / drawer
   ========================================================================== */
.site-header {
  position: fixed;
  inset: 0 0 auto 0;
  z-index: 100;
  height: var(--header-h);
  color: var(--white);
  transition: background-color 1s var(--ease), color 1s var(--ease), box-shadow 1s var(--ease);
}
.site-header__inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 32px;
  height: 100%;
  padding-inline: clamp(20px, 4.6vw, 68px);
}
/* Logo images (gran-ea-logo*.png) are 1080×1080 with transparent padding: the drawn
   logo is ~66% of the width and 50% of the height. Each placement sets --v = the
   width the *visible* logo should have; the image is sized to 1.507 × --v and its
   transparent top/bottom padding (0.377 × --v) is pulled back with negative margins.
   Aspect ratio is never touched (width only, height:auto). */
.site-header__brand {
  --v: clamp(70px, 5.4vw, 84px);
  display: grid;
  flex: 0 0 auto;
  width: calc(var(--v) * 1.507);
  margin-block: calc(var(--v) * -.377);
  margin-left: calc(var(--v) * -.262);
  line-height: 0;
}
.site-header__logo {
  grid-area: 1 / 1;
  width: 100%;
  height: auto;
  transition: opacity 1s var(--ease);
}
/* white logo over the hero, dark logo on ivory */
.site-header__logo--light { filter: drop-shadow(0 0 14px rgba(62, 50, 44, .28)); }
.site-header__logo--dark { opacity: 0; }
.site-header.is-scrolled .site-header__logo--light,
.site-header--static .site-header__logo--light,
body.is-drawer-open .site-header .site-header__logo--light { opacity: 0; }
.site-header.is-scrolled .site-header__logo--dark,
.site-header--static .site-header__logo--dark,
body.is-drawer-open .site-header .site-header__logo--dark { opacity: 1; }
/* Hero shows only the one big centered logo; the small header mark returns once scrolled
   past it (nav and the hamburger stay visible throughout — only the logo mark is hidden). */
.site-header:not(.is-scrolled):not(.site-header--static) .site-header__brand { visibility: hidden; }
.site-nav { margin-left: auto; }
.site-nav__list {
  display: flex;
  align-items: center;
  gap: clamp(22px, 2.9vw, 42px);
}
.site-nav__list a {
  position: relative;
  display: block;
  padding: 8px 0;
  font-family: var(--font-en);
  font-size: clamp(14px, 1.2vw, 17px);
  font-weight: 500;
  letter-spacing: .06em;
  line-height: 1;
}
.site-nav__list a::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 1px;
  background: currentColor;
  transform: scaleX(0);
  transform-origin: left;
  transition: transform .9s var(--ease);
}
.site-nav__list a:hover::after,
.site-nav__list a[aria-current="page"]::after { transform: scaleX(1); }

.nav-toggle {
  position: relative;
  flex: 0 0 auto;
  width: 44px;
  height: 44px;
  margin-right: -6px;
}
.nav-toggle span {
  position: absolute;
  left: 7px;
  right: 7px;
  height: 1px;
  background: currentColor;
  transition: transform .9s var(--ease), opacity .6s var(--ease);
}
.nav-toggle span:nth-child(1) { top: 14px; }
.nav-toggle span:nth-child(2) { top: 22px; }
.nav-toggle span:nth-child(3) { top: 30px; }
.nav-toggle[aria-expanded="true"] span:nth-child(1) { transform: translateY(8px) rotate(25deg); }
.nav-toggle[aria-expanded="true"] span:nth-child(2) { opacity: 0; }
.nav-toggle[aria-expanded="true"] span:nth-child(3) { transform: translateY(-8px) rotate(-25deg); }

/* TOP: header floats on the hero, then turns ivory */
.site-header.is-scrolled {
  background: rgba(247, 244, 239, .9);
  -webkit-backdrop-filter: blur(14px);
  backdrop-filter: blur(14px);
  color: var(--ink);
  box-shadow: 0 1px 0 var(--line);
}
.site-header:not(.is-scrolled):not(.site-header--static) .site-nav__list a {
  text-shadow: 0 0 22px rgba(62, 50, 44, .35);
}
/* MENU: header sits on ivory and scrolls away */
.site-header--static {
  position: relative;
  background: var(--ivory);
  color: var(--ink);
}
body.is-drawer-open .site-header { color: var(--ink); background: transparent; box-shadow: none; -webkit-backdrop-filter: none; backdrop-filter: none; }
body.is-drawer-open .site-header .site-nav { opacity: 0; pointer-events: none; }
.site-nav { transition: opacity .6s var(--ease); }

@media (max-width: 900px) {
  .site-nav { display: none; }
  .site-header__brand { --v: 66px; }
}

/* drawer */
.drawer {
  position: fixed;
  inset: 0;
  z-index: 90;
  display: grid;
  place-items: center;
  background: rgba(247, 244, 239, .98);
  opacity: 0;
  visibility: hidden;
  transition: opacity 1s var(--ease), visibility 0s linear 1s;
}
.drawer.is-open {
  opacity: 1;
  visibility: visible;
  transition: opacity 1s var(--ease), visibility 0s;
}
body.is-drawer-open { overflow: hidden; }
.drawer__nav { text-align: center; }
.drawer__nav li { overflow: hidden; }
.drawer__nav a {
  display: inline-block;
  padding: 10px 0;
  font-family: var(--font-en);
  font-size: clamp(26px, 3.4vw, 38px);
  font-weight: 400;
  letter-spacing: .22em;
  line-height: 1.3;
  opacity: 0;
  transform: translateY(16px);
  transition: opacity 1s var(--ease), transform 1s var(--ease), color .6s;
}
.drawer.is-open .drawer__nav a { opacity: 1; transform: none; }
.drawer.is-open .drawer__nav li:nth-child(1) a { transition-delay: .15s; }
.drawer.is-open .drawer__nav li:nth-child(2) a { transition-delay: .22s; }
.drawer.is-open .drawer__nav li:nth-child(3) a { transition-delay: .29s; }
.drawer.is-open .drawer__nav li:nth-child(4) a { transition-delay: .36s; }
.drawer.is-open .drawer__nav li:nth-child(5) a { transition-delay: .43s; }
.drawer.is-open .drawer__nav li:nth-child(6) a { transition-delay: .5s; }
.drawer__nav a:hover { color: var(--greige-3); }
.drawer__sub {
  margin-top: 40px;
  font-family: var(--font-en);
  font-size: 12px;
  letter-spacing: .32em;
  color: var(--greige-3);
}

/* ==========================================================================
   4. TOP — hero
   Everything moves slowly (8–22s). "It looks still, but it is alive."
   ========================================================================== */
.hero {
  position: relative;
  height: 100vh;
  height: 100svh;
  min-height: 600px;
  overflow: hidden;
  isolation: isolate;
  background: #6d6159;
  color: var(--white);
  --hero-fade: clamp(160px, 21vw, 320px);   /* height of the light that melts the hero into PHILOSOPHY */
}

/* The hero has no hard bottom edge: its lower part dissolves into the page colour (--ivory),
   which is also PHILOSOPHY's background, so the two read as one continuous world. */
.hero::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: -1px;
  height: calc(var(--hero-fade) + 1px);
  z-index: 2;
  pointer-events: none;
  background: linear-gradient(
    to bottom,
    rgba(var(--ivory-rgb), 0) 0%,
    rgba(var(--ivory-rgb), .06) 15%,
    rgba(var(--ivory-rgb), .15) 35%,
    rgba(var(--ivory-rgb), .32) 53%,
    rgba(var(--ivory-rgb), .6) 70%,
    rgba(var(--ivory-rgb), .86) 86%,
    var(--ivory) 100%
  );
}

.hero__media {
  position: absolute;
  inset: -4% 0;
  will-change: transform;
}
/* Real footage (gran-ea-hero.mp4): the woman, her hand, the light and the curtain sway are
   all baked into the video itself, so the old CSS-driven .hero__bg / __sway / __light / __shadow
   layers are gone — keeping them would have animated the same thing twice. */
.hero__video {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: 64% 42%;
  background: #6d6159;   /* shows briefly if the poster itself is still loading */
  /* deeper grade — the raw footage reads quite pale/high-key on its own; this pulls it
     into the same greige/brown depth as FV-reference.png without flattening it */
  filter: saturate(.72) contrast(.96) brightness(.82);
}
/* darker greige–brown tone + vignette + fine grain */
.hero__tone {
  position: absolute;
  inset: 0;
  background:
    linear-gradient(180deg, rgba(60, 49, 43, .4) 0%, rgba(60, 49, 43, .16) 38%, rgba(60, 49, 43, .2) 66%, rgba(52, 42, 36, .58) 100%),
    radial-gradient(120% 92% at 50% 46%, transparent 42%, rgba(38, 30, 26, .4) 100%),
    rgba(112, 96, 84, .2);
}
.hero__tone::after {
  content: "";
  position: absolute;
  inset: 0;
  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='.85' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 .55 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");
  opacity: .1;
  mix-blend-mode: soft-light;
}

.hero__content {
  position: absolute;
  inset: 0;
  z-index: 2;
  display: flex;
  align-items: center;
  flex-direction: column;
  justify-content: center;
  padding-bottom: 5vh;
  --v: clamp(250px, 33vw, 620px);   /* visible width of the logo (FV-reference: ~29–33% of the viewport) */
}
.hero__logo {
  width: calc(var(--v) * 1.507);
  margin-block: calc(var(--v) * -.377);
  line-height: 0;
}
.hero__logo img,
.hero__logo svg {
  display: block;
  width: 100%;
  height: auto;
  filter: drop-shadow(0 4px 36px rgba(60, 48, 42, .28));
  /* The logo draws itself (assets/images/gran-ea-logo-animated.svg, 0.5–4.5s, once).
     The slow float only starts after it has settled so the two never compete. */
  animation: hero-float 15s ease-in-out 5s infinite alternate;
}
/* While main.js swaps the PNG for the self-drawing SVG the PNG stays hidden, so the finished logo
   never flashes before it is written. If anything goes wrong it reappears by itself after 2.5s. */
.js .hero__logo[data-logo-state="pending"] img {
  visibility: hidden;
  animation: logo-fallback 0s linear 2.5s forwards;
}
@keyframes logo-fallback { to { visibility: visible; } }

.hero__tagline {
  margin-top: clamp(14px, 2vw, 30px);
  font-family: var(--font-en);
  font-size: clamp(13px, calc(var(--v) * .042), 23px);
  font-weight: 500;
  letter-spacing: .26em;
  padding-left: .26em;   /* balances the trailing letter-space so the line centres optically */
  line-height: 1;
  text-shadow: 0 0 24px rgba(62, 50, 44, .35);
  animation: hero-fade 1.8s var(--ease) 3.2s both;   /* appears once the logo is written */
}

.hero__scroll {
  position: absolute;
  left: 50%;
  bottom: calc(var(--hero-fade) * .6);   /* sits above the fade so the white cue stays legible */
  z-index: 3;
  transform: translateX(-50%);
  display: flex;
  flex-direction: column;
  align-items: center;
  font-family: var(--font-en);
  font-size: 14px;
  font-weight: 500;
  letter-spacing: .16em;
  line-height: 1;
  animation: hero-fade 2.4s var(--ease) 1.4s both;
}
/* fades out over the first 80px of scrolling (--scroll-fade is set from main.js) */
.hero__scroll-label,
.hero__scroll-line {
  opacity: var(--scroll-fade, 1);
  transition: opacity .5s var(--ease);
}
.hero__scroll-line {
  position: relative;
  display: block;
  width: 1px;
  height: 48px;
  margin-top: 14px;
  overflow: hidden;
  background: rgba(255, 255, 255, .34);
}
.hero__scroll-line::after {
  content: "";
  position: absolute;
  inset: 0;
  background: #fff;
  transform: translateY(-100%);
  animation: scroll-line 3.8s ease-in-out infinite;
}

.site-header { animation: hero-fade 2s var(--ease) .6s both; }
.site-header--static { animation: none; }

/* still used by .menu-hero__bg (MENU page) — the TOP hero now animates via its own video instead */
@keyframes hero-zoom {
  from { transform: scale(1.02) translate3d(0, 0, 0); }
  to   { transform: scale(1.09) translate3d(-1.2%, -.6%, 0); }
}
@keyframes hero-float {
  from { transform: translate3d(0, 0, 0); }
  to   { transform: translate3d(0, -7px, 0); }
}
@keyframes hero-fade {
  from { opacity: 0; }
  to   { opacity: 1; }
}
@keyframes scroll-line {
  0%   { transform: translateY(-100%); }
  55%  { transform: translateY(0); }
  100% { transform: translateY(100%); }
}

@media (max-width: 720px) {
  .hero { min-height: 560px; --hero-fade: clamp(100px, 30vw, 170px); }
  /* gran-ea-hero-sp.mp4 (縦長・SP専用素材): 顔は上寄り、手は中央〜左寄りに構図されているため、
     cover のクロップは右上寄りに軸を置いて顔・手・ネイルが欠けないようにしている */
  .hero__video { object-position: 62% 38%; }
  .hero__content { --v: min(72vw, 330px); }
  .hero__content { padding-bottom: 8vh; }
}

/* ==========================================================================
   5. TOP — philosophy
   ========================================================================== */
.philosophy {
  /* starts slightly under the hero's fade. The extra padding equals the overlap, so the content
     stays exactly where it was — only the section's top edge moves up into the light. */
  --overlap: clamp(56px, 6vw, 110px);
  position: relative;
  z-index: 3;
  margin-top: calc(var(--overlap) * -1);
  padding-top: calc(var(--section-space) + var(--overlap));
  /* narrower than --section-space on purpose: PHILOSOPHY and Éa EXPERIENCE read as one
     continuous editorial spread, not two separate sections — the real pause comes after both. */
  padding-bottom: clamp(36px, 4.5vw, 72px);
}
/* photo large (~72% of the content width) + a plain text margin — no card, no border */
.philosophy__inner {
  display: grid;
  grid-template-columns: minmax(0, 2.9fr) minmax(0, 1.15fr);
  align-items: center;
  gap: clamp(32px, 5vw, 72px);
}
.philosophy__photo {
  position: relative;
  aspect-ratio: 16 / 10;
}
/* The rectangle itself dissolves — no border/shape is added, the image's own alpha is
   shaped by mask-image so its outline softens into the page's ivory. The ellipse is
   anchored upper-left (where the window light sits, so that corner and its two near
   edges stay solid) and sized unevenly on purpose: a narrower horizontal radius so the
   far (right) edge dissolves well into the background, a taller vertical radius so the
   bottom only fades slightly, keeping the photo reading as a real, large photograph. */
.philosophy__photo img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  -webkit-mask-image: radial-gradient(85% 115% at 26% 30%, #000 40%, transparent 95%);
  mask-image: radial-gradient(85% 115% at 26% 30%, #000 40%, transparent 95%);
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-size: 100% 100%;
  mask-size: 100% 100%;
}
.philosophy__body { padding-block: 8px; }
.philosophy__lead {
  margin-top: clamp(28px, 3.2vw, 48px);
  font-size: clamp(19px, 1.7vw, 25px);
  line-height: 2.05;
  letter-spacing: .14em;
}
.philosophy__lead-indent { display: inline-block; margin-left: 1.1em; }
.philosophy__text {
  margin-top: clamp(24px, 2.4vw, 36px);
  font-size: 14px;
  line-height: 2.2;
  letter-spacing: .12em;
  color: var(--ink-soft);
}

@media (max-width: 900px) {
  .philosophy { --overlap: 44px; }
  .philosophy__inner { grid-template-columns: 1fr; gap: 28px; }
  .philosophy__photo { aspect-ratio: 4 / 3; }
  .philosophy__body { padding-inline: 4px; }
}

/* ==========================================================================
   6. TOP — Éa EXPERIENCE (mirror of PHILOSOPHY: text left, big photo right)
   ========================================================================== */
.experience { padding-bottom: var(--section-space); }
.experience__inner {
  display: grid;
  grid-template-columns: minmax(0, 1.15fr) minmax(0, 2.9fr);
  align-items: center;
  gap: clamp(32px, 5vw, 72px);
}
.experience__lead {
  margin-top: clamp(24px, 2.6vw, 40px);
  font-size: clamp(17px, 1.45vw, 21px);
  line-height: 2.1;
  letter-spacing: .14em;
}
.experience__photo {
  position: relative;
  aspect-ratio: 16 / 10;
}
/* mirrored anchor: the hand sits lower-right, so that corner and its two near edges
   stay solid; the narrower horizontal radius lets the far (left) edge dissolve well
   into the background, the taller vertical radius keeps the top fade slight. */
.experience__photo img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  -webkit-mask-image: radial-gradient(85% 115% at 78% 74%, #000 40%, transparent 95%);
  mask-image: radial-gradient(85% 115% at 78% 74%, #000 40%, transparent 95%);
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-size: 100% 100%;
  mask-size: 100% 100%;
}

@media (max-width: 900px) {
  .experience__inner { grid-template-columns: 1fr; gap: 28px; }
  .experience__photo { aspect-ratio: 4 / 3; }
}

/* ==========================================================================
   7. TOP — MENU entrance banner (single link → menu.html)
   ========================================================================== */
.menu-entry-section { padding-bottom: var(--section-space); }
.menu-entry {
  position: relative;
  display: block;
  overflow: hidden;
  aspect-ratio: 1920 / 880;   /* matches menu_pc.png natively — no unwanted cropping */
  color: var(--ink);
  background: transparent;
}
.menu-entry__bg-wrap { position: absolute; inset: 0; z-index: 0; }
.menu-entry__bg {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 1.4s var(--ease);
}
.menu-entry:hover .menu-entry__bg { transform: scale(1.015); }
/* very light, localized fade so the text stays legible without whitening the whole photo —
   the images already carry a pale area on the left, this only reinforces it slightly */
.menu-entry__scrim {
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
  background: linear-gradient(90deg, rgba(247, 244, 239, .38) 0%, rgba(247, 244, 239, .16) 40%, transparent 62%);
}
.menu-entry__content {
  position: relative;
  z-index: 2;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  justify-content: center;
  height: 100%;
  max-width: 420px;
  padding: clamp(24px, 5vw, 56px) clamp(24px, 6vw, 72px);
}
.menu-entry__title {
  font-family: var(--font-en);
  font-weight: 400;
  font-size: clamp(33px, 4.1vw, 52px);
  letter-spacing: .13em;
  line-height: 1;
  color: var(--ink-soft);
}
.menu-entry__list {
  margin: clamp(18px, 2.6vw, 30px) 0 clamp(22px, 3vw, 36px);
  font-family: var(--font-en);
  font-size: clamp(13px, 1.05vw, 16px);
  font-weight: 500;
  letter-spacing: .18em;
  line-height: 2;
  color: var(--ink-soft);
}
/* hairline + chevron, built with CSS (no image) */
.menu-entry__arrow {
  position: relative;
  display: block;
  width: clamp(96px, 9vw, 140px);
  height: 1px;
  background: currentColor;
  color: var(--ink-soft);
  transition: transform .6s var(--ease);
}
.menu-entry__arrow::after {
  content: "";
  position: absolute;
  right: 0;
  top: 50%;
  width: 7px;
  height: 7px;
  border-top: 1px solid currentColor;
  border-right: 1px solid currentColor;
  transform: translateY(-50%) rotate(45deg);
}
.menu-entry:hover .menu-entry__arrow { transform: translateX(8px); }

@media (max-width: 720px) {
  .menu-entry { aspect-ratio: 1080 / 1350; }   /* matches menu_sp.png */
  .menu-entry__scrim {
    background: linear-gradient(180deg, rgba(247, 244, 239, .4) 0%, rgba(247, 244, 239, .2) 32%, transparent 55%);
  }
  .menu-entry__content { justify-content: flex-start; padding-top: clamp(48px, 12vw, 80px); }
  .menu-entry__list { line-height: 1.9; }
}

/* ==========================================================================
   8. TOP — INSTAGRAM (editorial collage; replaces the former GALLERY)
   ----------------------------------------------------------------------
   PC : 12-column grid whose row height equals one column width, so
        "3 cols × 3 rows" is a true square. Sizes vary via grid-column /
        grid-row on .instagram-item--a … --j. Empty cells are intentional.
   SP : two columns; only a / g / h span the full width.
   In WordPress, output one <li class="instagram-item …"><a href="post url">
   <img></a></li> per post and keep the modifier classes as a layout pattern.
   ========================================================================== */
.instagram { padding-bottom: var(--section-space); }
.instagram__inner {
  --gap: clamp(15px, 1.9vw, 26px);
  --cw: calc((100cqw - var(--gap) * 11) / 12);   /* one column width */
  container-type: inline-size;
  position: relative;
}
.instagram__head {
  position: absolute;
  top: 0;
  left: calc((var(--cw) + var(--gap)) * 5);       /* sits in the empty cell beside the big photo */
  z-index: 2;
}
.instagram__handle {
  display: inline-block;
  margin-top: 6px;
  font-family: var(--font-en);
  font-size: 17px;
  font-weight: 500;
  letter-spacing: .08em;
  line-height: 1.4;
  color: var(--ink-soft);
  transition: color .8s var(--ease);
}
.instagram__handle:hover { color: var(--ink); }

.instagram__grid {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  grid-auto-rows: var(--cw);
  gap: var(--gap);
}
.instagram-item { min-width: 0; min-height: 0; }
.instagram-item .media { display: block; width: 100%; height: 100%; }
.instagram-item .media img { object-position: 50% 32%; }   /* nails sit in the upper part of most posts */

/* Colour grading — Instagram photos only (the rest of the site is untouched).
   Posts arrive bright, cool-white and "raw"; measured against the other site photos they were
   far lighter (L .75–.86 vs .43–.64) and colder. This quietly settles them into the greige world:
     1. filter      — a little less saturation / contrast, a touch of warmth
     2. tint        — the photo is multiplied onto a pale greige, so paper-white becomes soft greige
                      (faint soot, never yellow)
     3. veil + grain — a thin ivory fade and the faintest grain on top
   The image files themselves are never edited. Tune the variables. */
.instagram {
  --ig-saturate: .72;
  --ig-contrast: .92;
  --ig-brightness: .99;
  --ig-warm: .10;                    /* sepia amount */
  --ig-tint: rgb(226, 219, 210);     /* multiply colour (pale greige) */
  --ig-veil: .06;                    /* opacity of the ivory veil */
}
.instagram-item .media {
  isolation: isolate;
  background: var(--ig-tint);        /* the photo multiplies onto this */
}
.instagram-item .media img {
  mix-blend-mode: multiply;
  filter: saturate(var(--ig-saturate)) contrast(var(--ig-contrast)) brightness(var(--ig-brightness)) sepia(var(--ig-warm));
}
.instagram-item .media::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
  background:
    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='.85' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 .2 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>") 0 0 / 180px 180px,
    rgba(var(--ivory-rgb), var(--ig-veil));
  background-blend-mode: soft-light, normal;
}

/* Size / position pattern — 12 cols × 14 rows. Assigned by post order (newest = a),
   never by the photo itself; see SLOTS in assets/js/instagram-feed.js. */
.instagram-item--a { grid-column: 1 / span 5;   grid-row: 1 / span 5; }    /* large square */
.instagram-item--b { grid-column: 7 / span 2;   grid-row: 2 / span 2; }    /* small square */
.instagram-item--c { grid-column: 10 / span 3;  grid-row: 1 / span 4; }    /* portrait */
.instagram-item--d { grid-column: 6 / span 4;   grid-row: 4 / span 2; }    /* landscape */
.instagram-item--e { grid-column: 1 / span 2;   grid-row: 7 / span 2; }    /* small square */
.instagram-item--f { grid-column: 4 / span 2;   grid-row: 7 / span 3; }    /* tall portrait */
.instagram-item--g { grid-column: 8 / span 5;   grid-row: 6 / span 5; }    /* large square */
.instagram-item--h { grid-column: 1 / span 5;   grid-row: 11 / span 3; }   /* landscape */
.instagram-item--i { grid-column: 8 / span 2;   grid-row: 12 / span 2; }   /* small square */
.instagram-item--j { grid-column: 11 / span 2;  grid-row: 12 / span 3; }   /* tall portrait */

/* feed states (set on the section by instagram-feed.js) */
.instagram[data-state="loading"] .instagram__grid { min-height: calc(var(--cw) * var(--feed-rows, 5) + var(--gap) * (var(--feed-rows, 5) - 1)); }
@media (max-width: 900px) { .instagram[data-state="loading"] .instagram__grid { min-height: 60vh; } }
.instagram[data-state="error"] .instagram__grid { display: none; }
.instagram[data-state="error"] .instagram__follow { margin-top: clamp(40px, 5vw, 72px); }
.instagram__noscript {
  margin-top: 40px;
  text-align: center;
  font-size: 14px;
  color: var(--ink-soft);
}

/* hover (pointer devices only): slow 1.03× zoom, faint veil, small icon */
.instagram-item a { position: relative; color: var(--white); }
.instagram-item a::after {
  content: "";
  position: absolute;
  inset: 0;
  background: rgba(62, 53, 47, .24);
  opacity: 0;
  z-index: 2;
  transition: opacity 1.3s var(--ease);
  pointer-events: none;
}
.instagram-item__icon {
  position: absolute;
  left: 50%;
  top: 50%;
  z-index: 3;
  translate: -50% -50%;
  z-index: 3;
  line-height: 0;
  opacity: 0;
  transition: opacity 1.3s var(--ease);
  pointer-events: none;
}
@media (hover: hover) {
  .instagram-item a:hover img { transform: scale(1.03); }
  .instagram-item a:hover::after,
  .instagram-item a:hover .instagram-item__icon { opacity: 1; }
}

.instagram__follow {
  margin-top: clamp(56px, 7vw, 104px);
  text-align: center;
}
.instagram__follow .link-arrow { font-size: 14px; }

/* SP: two columns, an occasional full-width photo */
@media (max-width: 900px) {
  .instagram__inner { --gap: 10px; }
  .instagram__head {
    position: static;
    margin-bottom: 30px;
  }
  .instagram__grid {
    display: block;
    columns: 2;
    column-gap: var(--gap);
  }
  .instagram-item {
    display: block;
    break-inside: avoid;
    margin: 0 0 var(--gap);
    grid-area: auto;
  }
  .instagram-item .media { height: auto; }
  .instagram-item--a, .instagram-item--g, .instagram-item--h { column-span: all; }

  .instagram-item--a .media { aspect-ratio: 4 / 5; }
  .instagram-item--b .media { aspect-ratio: 1 / 1; }
  .instagram-item--c .media { aspect-ratio: 4 / 5; }
  .instagram-item--d .media { aspect-ratio: 1 / 1; }
  .instagram-item--e .media { aspect-ratio: 2 / 3; }
  .instagram-item--f .media { aspect-ratio: 3 / 4.6; }
  .instagram-item--g .media { aspect-ratio: 4 / 3; }
  .instagram-item--h .media { aspect-ratio: 3 / 2; }
  .instagram-item--i .media { aspect-ratio: 4 / 5; }
  .instagram-item--j .media { aspect-ratio: 3 / 4; }
  /* exactly 4 posts: a full width · b + c side by side (same height) · d full width */
  .instagram[data-count="4"] .instagram-item--b .media { aspect-ratio: 4 / 5; }
  .instagram[data-count="4"] .instagram-item--d { column-span: all; }
  .instagram[data-count="4"] .instagram-item--d .media { aspect-ratio: 3 / 2; }
  .instagram__follow { margin-top: 44px; }
}

/* ==========================================================================
   10. Reservation
   ========================================================================== */
.reservation { padding-bottom: clamp(72px, 9vw, 130px); }
.reservation__banner {
  position: relative;
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  align-items: center;
  min-height: clamp(300px, 27vw, 400px);
  padding: clamp(32px, 4vw, 60px) clamp(28px, 5.4vw, 80px);
  overflow: hidden;
  background: var(--greige-1);
}
.reservation__bg {
  background: url("../images/reservation.jpg") 60% 60% / cover no-repeat;
}
.reservation__shade {
  position: absolute;
  inset: 0;
  background: linear-gradient(90deg, rgba(240, 235, 228, .9) 0%, rgba(240, 235, 228, .66) 34%, rgba(240, 235, 228, .12) 66%, transparent 100%);
}
.reservation__body,
.reservation__cta { position: relative; z-index: 1; }
.reservation__lead {
  margin-top: clamp(20px, 2.2vw, 32px);
  font-size: clamp(19px, 1.7vw, 25px);
  line-height: 2.05;
  letter-spacing: .14em;
}
.reservation__cta {
  justify-self: start;
  margin-left: clamp(0px, 6vw, 90px);
  font-size: 15px;
  padding: 12px 0;
}
.reservation__cta .link-arrow__label { border-bottom: 1px solid currentColor; padding-bottom: 6px; }

@media (max-width: 720px) {
  .reservation__banner {
    grid-template-columns: 1fr;
    align-content: space-between;
    gap: 30px;
    min-height: 340px;
    padding: 34px 26px 30px;
  }
  .reservation__bg { background-position: 78% 60%; }
  .reservation__shade { background: linear-gradient(180deg, rgba(240, 235, 228, .9) 0%, rgba(240, 235, 228, .62) 44%, rgba(240, 235, 228, .1) 100%); }
  .reservation__cta { margin-left: 0; }
}

/* ==========================================================================
   10b. ACCESS — tennai image + address block
   ========================================================================== */

.access { padding-bottom: var(--section-space); }

.access__inner {
  max-width: min(100%, 760px);
  margin: 0 auto;
}

.access__body {
  max-width: 520px;
}

.access__address {
  margin-top: clamp(18px, 2vw, 28px);
  font-family: var(--font-ja);
  font-size: 15px;
  line-height: 1.95;
  letter-spacing: .04em;
  color: var(--ink);
}

.access__info {
  margin-top: clamp(18px, 2.1vw, 28px);
  font-size: 13px;
  line-height: 2.05;
  letter-spacing: .05em;
  color: var(--ink-soft);
}

.access__note {
  margin-top: clamp(28px, 3vw, 44px);
  font-size: 13px;
  line-height: 2.1;
  letter-spacing: .05em;
  color: var(--ink-soft);
}

.access__media {
  margin-top: clamp(34px, 4vw, 56px);
}

.access__image {
  display: block;
  width: 100%;
  height: auto;
}

.access__map-link {
  margin-top: clamp(24px, 2.8vw, 36px);
  font-size: 14px;
}

@media (max-width: 720px) {
  .access__inner {
    max-width: 100%;
  }

  .access__body {
    max-width: none;
  }

  .access__media {
    margin-top: 30px;
  }

  .access__map-link {
    margin-top: 24px;
  }
}

/* ==========================================================================
   11. Footer
   ========================================================================== */
.site-footer {
  padding-top: clamp(28px, 4vw, 48px);
}
.site-footer__inner {
  display: grid;
  grid-template-columns: minmax(0, .8fr) minmax(0, 2.3fr) minmax(0, .8fr);
  align-items: center;
  gap: 32px;
  padding-block: 20px;
}
.site-footer__brand { --v: clamp(150px, 13vw, 190px); }
.site-footer__logo {
  display: block;
  width: calc(var(--v) * 1.507);
  height: auto;
  margin-block: calc(var(--v) * -.377);
  margin-left: calc(var(--v) * -.262);
}
.site-footer__tagline {
  width: var(--v);
  margin-top: 20px;
  font-family: var(--font-en);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: .26em;
  line-height: 1.3;
  text-align: center;
  color: rgba(255, 255, 255, .65);
}
.site-footer__center { display: flex; flex-direction: column; align-items: center; gap: 22px; }
.site-footer__nav {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 10px clamp(18px, 2.4vw, 34px);
}
.site-footer__nav a {
  display: block;
  padding: 4px 0;
  font-family: var(--font-en);
  font-size: 14px;
  font-weight: 500;
  letter-spacing: .1em;
  line-height: 1.2;
  color: rgba(255, 255, 255, .90);
  transition: color .8s var(--ease);
}
.site-footer__nav a:hover { color: rgba(255, 255, 255, 1); }
.site-footer__nav a[aria-current="page"] { border-bottom: 1px solid currentColor; }
.site-footer__sister { justify-self: end; text-align: right; }
.site-footer__sister-label {
  font-family: var(--font-en);
  font-size: 12px;
  font-weight: 500;
  letter-spacing: .24em;
  color: rgba(255, 255, 255, .65);
  line-height: 1.6;
}
.site-footer__sister-name {
  display: inline-block;
  margin-top: 4px;
  font-family: var(--font-en);
  font-size: clamp(19px, 1.7vw, 23px);
  letter-spacing: .06em;
  line-height: 1.4;
  color: rgba(255, 255, 255, .90);
}
.site-footer__copy {
  padding: 22px var(--gutter) 30px;
  text-align: center;
  font-family: var(--font-en);
  font-size: 12px;
  letter-spacing: .12em;
  line-height: 1.6;
  color: rgba(255, 255, 255, .45);
}

@media (max-width: 900px) {
  .site-footer__inner {
    grid-template-columns: 1fr;
    justify-items: center;
    gap: 26px;
    padding-block: 28px 8px;
  }
  .site-footer__center { order: 2; }
  .site-footer__sister { order: 3; justify-self: center; text-align: center; }
  .site-footer__brand { --v: 170px; }
  .site-footer__logo { margin-inline: auto; }
  .site-footer__tagline { margin-inline: auto; }
}

/* ==========================================================================
   11b. TOP → MENU page-turn transition
   A single fixed layer, styled entirely through ::before so no extra DOM is needed
   beyond the empty <div class="menu-page-turn">. main.js adds .is-page-turning to
   <body> on click, waits ~820ms, then navigates — see main.js section 8b.
   ========================================================================== */
.menu-page-turn {
  position: fixed;
  inset: 0;
  z-index: 9999;
  pointer-events: none;
  perspective: 1400px;
  visibility: hidden;
  opacity: 0;
}

body.is-page-turning .menu-page-turn {
  visibility: visible;
  opacity: 1;
}
.menu-page-turn::before {
  content: "";
  position: absolute;
  inset: 0;
  background: var(--ivory-deep);
  transform-origin: right center;
  transform: rotateY(92deg);
  box-shadow: -20px 0 40px rgba(80, 65, 55, .08);
}
body.is-page-turning .menu-page-turn::before {
  animation: granEaPageTurn .85s cubic-bezier(.65, 0, .25, 1) forwards;
}
@keyframes granEaPageTurn {
  0%   { transform: rotateY(92deg); }
  100% { transform: rotateY(0deg); }
}
@media (max-width: 720px) {
  /* full 3D rotateY reads oddly on a narrow, close-up viewport — a soft slide-and-settle
     from the right reads as the same "page arriving" gesture without looking broken */
  .menu-page-turn::before {
    transform: translate3d(100%, 0, 0) rotate(4deg);
    box-shadow: -14px 0 26px rgba(80, 65, 55, .08);
  }
  body.is-page-turning .menu-page-turn::before {
    animation: granEaPageTurnSP .75s cubic-bezier(.65, 0, .25, 1) forwards;
  }
  @keyframes granEaPageTurnSP {
    0%   { transform: translate3d(100%, 0, 0) rotate(4deg); }
    100% { transform: translate3d(0, 0, 0) rotate(0deg); }
  }
}
/* JS also skips the whole thing under reduced motion, but this is the CSS-only backstop */
@media (prefers-reduced-motion: reduce) {
  .menu-page-turn { display: none; }
}
/* MENU page: settle in as though the page that just turned is now at rest */
.page-menu { animation: menuPageEnter .5s ease-out both; }
@keyframes menuPageEnter { from { opacity: 0; } to { opacity: 1; } }

/* ==========================================================================
   12. MENU page
   ========================================================================== */
:root { --menu-nav-h: 60px; }

.menu-hero {
  position: relative;
  height: clamp(280px, 27vw, 410px);
  margin-inline: clamp(12px, 1.2vw, 18px);
  overflow: hidden;
  isolation: isolate;
  background: #7a6e65;
  color: var(--white);
}
.menu-hero__media { position: absolute; inset: 0; }
.menu-hero__bg {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: 62% 44%;
  transform-origin: 65% 50%;
  animation: hero-zoom 24s ease-in-out infinite alternate;
}
.menu-hero__tone {
  position: absolute;
  inset: 0;
  background:
    linear-gradient(90deg, rgba(70, 58, 50, .42) 0%, rgba(70, 58, 50, .18) 46%, rgba(50, 40, 34, .16) 100%),
    rgba(112, 96, 84, .12);
}
.menu-hero__logo {
  position: absolute;
  left: 52%;
  top: 50%;
  z-index: 1;
  --v: clamp(120px, 14vw, 210px);
  display: flex;
  flex-direction: column;
  align-items: center;
  width: calc(var(--v) * 1.507);
  translate: -50% -50%; /* `translate` (not transform) so the float animation doesn't cancel the centering */
  opacity: .92;
  animation: hero-float 15s ease-in-out infinite alternate;
}
.menu-hero__logo img {
  width: 100%;
  height: auto;
  margin-block: calc(var(--v) * -.377);
}
.menu-hero__tagline {
  margin-top: 14px;
  font-family: var(--font-en);
  font-size: clamp(9px, calc(var(--v) * .058), 12px);
  font-weight: 500;
  letter-spacing: .24em;
  padding-left: .24em;
  line-height: 1;
  white-space: nowrap;
}
.menu-hero__body {
  position: absolute;
  left: clamp(28px, 7vw, 104px);
  top: 50%;
  z-index: 2;
  transform: translateY(-50%);
}
.menu-hero__title {
  font-family: var(--font-en);
  font-size: clamp(34px, 3.6vw, 54px);
  font-weight: 300;
  letter-spacing: .42em;
  line-height: 1.1;
  text-shadow: 0 0 30px rgba(60, 48, 42, .3);
}
.menu-hero__sub {
  margin-top: 16px;
  font-family: var(--font-en);
  font-style: italic;
  font-size: clamp(16px, 1.45vw, 21px);
  font-weight: 400;
  letter-spacing: .1em;
  line-height: 1.5;
  text-shadow: 0 0 24px rgba(60, 48, 42, .35);
}
.menu-hero__rule {
  display: block;
  width: 56px;
  height: 1px;
  margin-top: 18px;
  background: rgba(255, 255, 255, .78);
}

/* sticky category nav */
.menu-nav {
  position: sticky;
  top: 0;
  z-index: 60;
  background: rgba(247, 244, 239, .92);
  -webkit-backdrop-filter: blur(12px);
  backdrop-filter: blur(12px);
  border-bottom: 1px solid transparent;
  transition: border-color 1s var(--ease);
}
.menu-nav.is-stuck { border-bottom-color: var(--line); }
.menu-nav__inner {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: clamp(20px, 3.6vw, 56px);
  height: var(--menu-nav-h);
  padding-inline: var(--gutter);
}
.menu-nav__rule {
  flex: 0 0 clamp(36px, 6vw, 92px);
  height: 1px;
  background: var(--greige-2);
}
.menu-nav__list {
  display: flex;
  align-items: center;
  gap: clamp(22px, 4.4vw, 70px);
}
.menu-nav__list a {
  position: relative;
  display: block;
  padding: 10px 0;
  font-family: var(--font-en);
  font-size: clamp(13px, 1.08vw, 15px);
  font-weight: 500;
  letter-spacing: .16em;
  line-height: 1;
  white-space: nowrap;
  color: var(--ink-soft);
  transition: color .9s var(--ease);
}
.menu-nav__list a::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: 2px;
  height: 1px;
  background: var(--ink);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 1s var(--ease);
}
.menu-nav__list a:hover,
.menu-nav__list a.is-active { color: var(--ink); }
.menu-nav__list a.is-active::after { transform: scaleX(1); }

/* rows: photo + prices, alternating */
.menu-list { padding-bottom: clamp(56px, 7vw, 104px); }
.menu-section {
  padding-block: clamp(30px, 3.8vw, 56px);
  border-top: 1px solid var(--line);
  scroll-margin-top: calc(var(--menu-nav-h) - 1px);
}
.menu-section:first-child { border-top: 0; padding-top: clamp(40px, 4.6vw, 68px); }
.menu-section__inner {
  display: grid;
  align-items: start;
  column-gap: clamp(24px, 3.6vw, 56px);
  row-gap: 26px;
}
.menu-section--photo-left .menu-section__inner {
  grid-template-columns: minmax(0, 1.34fr) minmax(0, .9fr) minmax(0, 1.72fr);
  grid-template-areas: "photo head prices";
}
.menu-section--photo-right .menu-section__inner {
  grid-template-columns: minmax(0, .9fr) minmax(0, 1.3fr) minmax(0, 1.6fr);
  grid-template-areas: "head prices photo";
}
.menu-section--design .menu-section__inner {
  grid-template-columns: minmax(0, .9fr) minmax(0, 1.02fr) minmax(0, 2fr);
  grid-template-areas: "head prices strip";
}
.menu-section__photo  { grid-area: photo; aspect-ratio: 11 / 5; }
.menu-section__head   { grid-area: head; padding-top: 8px; }
.menu-section__prices { grid-area: prices; padding-top: 12px; }
.design-strip         { grid-area: strip; }

.menu-section__title {
  font-family: var(--font-en);
  font-size: clamp(27px, 2.5vw, 36px);
  font-weight: 400;
  letter-spacing: .09em;
  line-height: 1.25;
}
.menu-section__lead {
  margin-top: 14px;
  font-size: 14px;
  line-height: 2.05;
  letter-spacing: .1em;
  color: var(--ink-soft);
}
.menu-section__caption {
  margin-bottom: 8px;
  font-family: var(--font-en);
  font-style: italic;
  font-size: 15px;
  letter-spacing: .1em;
  color: var(--greige-3);
}

.price-list li {
  display: flex;
  align-items: baseline;
  gap: 14px;
  padding: 8px 0;
}
.price-list__name {
  word-break: keep-all;          /* wrap only at <wbr> / spaces … */
  overflow-wrap: anywhere;       /* … unless a name is wider than the column */
  font-size: 14.5px;
  line-height: 1.7;
  letter-spacing: .07em;
}
.price-list__line {
  flex: 1 1 24px;
  min-width: 16px;
  height: 1px;
  background: var(--line);
  transform: translateY(-5px);
}
.price-list__price {
  flex: 0 0 auto;
  font-family: var(--font-en);
  font-size: 17px;
  font-weight: 500;
  letter-spacing: .05em;
  line-height: 1.6;
  white-space: nowrap;
}

.design-strip {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: clamp(10px, 1.3vw, 18px);
}
.design-strip .media { aspect-ratio: 1 / 1.1; }
.design-strip .media:hover img { transform: scale(1.06); opacity: .86; }

@media (max-width: 1080px) {
  .menu-section--design .menu-section__inner {
    grid-template-columns: minmax(0, 1fr) minmax(0, 1.1fr);
    grid-template-areas: "head prices" "strip strip";
  }
}

/* --- MENU: phones — a vertical reading flow, not a shrunken desktop --- */
@media (max-width: 760px) {
  :root { --menu-nav-h: 54px; }

  .menu-hero { height: clamp(320px, 88vw, 440px); }
  .menu-hero__bg { object-position: 76% 40%; }
  .menu-hero__logo { display: none; }
  .menu-hero__body { left: 28px; top: auto; bottom: 34px; transform: none; }
  .menu-hero__title { font-size: 34px; letter-spacing: .38em; }
  .menu-hero__sub { font-size: 17px; }

  /* horizontally scrollable category strip, fades at both ends */
  .menu-nav__inner { justify-content: flex-start; gap: 0; padding: 0; overflow-x: auto; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
  .menu-nav__inner::-webkit-scrollbar { display: none; }
  .menu-nav__rule { display: none; }
  .menu-nav__list { gap: 30px; padding-inline: 22px; }
  .menu-nav__list a { font-size: 14px; padding: 12px 0; }

  .menu-section { padding-block: 46px; }
  .menu-section:first-child { padding-top: 46px; }
  .menu-section__inner,
  .menu-section--photo-left .menu-section__inner,
  .menu-section--photo-right .menu-section__inner,
  .menu-section--design .menu-section__inner {
    grid-template-columns: 1fr;
    row-gap: 22px;
  }
  .menu-section--photo-left .menu-section__inner { grid-template-areas: "photo" "head" "prices"; }
  .menu-section--photo-right .menu-section__inner { grid-template-areas: "photo" "head" "prices"; }
  .menu-section--design .menu-section__inner { grid-template-areas: "head" "prices" "strip"; }

  /* photos alternate: flush left, then flush right */
  .menu-section__photo { width: 90%; aspect-ratio: 4 / 3; }
  .menu-section--photo-right .menu-section__photo { margin-left: auto; }
  .menu-section--photo-right .menu-section__head { text-align: right; }
  .menu-section--photo-right .menu-section__prices { padding-top: 0; }

  .menu-section__head { padding-top: 0; }
  .menu-section__title { font-size: 30px; }
  .menu-section__lead { font-size: 14.5px; }
  .menu-section__prices { padding-top: 0; }
  .price-list li { padding: 9px 0; }
  .price-list__name { font-size: 15px; }
  .price-list__price { font-size: 18px; }

  .design-strip { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
  .design-strip .media { aspect-ratio: 1 / 1; }
}

/* ==========================================================================
   13. Reduced motion
   ========================================================================== */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation: none !important;
    transition-duration: .01ms !important;
    transition-delay: 0s !important;
  }
  .js .reveal { opacity: 1; transform: none; }
  .js .hero__logo[data-logo-state="pending"] img { visibility: visible; }
  .hero__logo img, .hero__logo svg, .hero__tagline, .hero__scroll, .site-header { opacity: 1; }
}


/* ==========================================================
   FIXED EDITORIAL — PHILOSOPHY / Éa EXPERIENCE
   写真をカードとして置かず、背景そのものとして固定表示
   ========================================================== */

.fixed-editorial {
  position: relative;
  min-height: min(92vh, 900px);
  display: flex;
  align-items: center;
  overflow: hidden;
  background-repeat: no-repeat;
  background-size: cover;
  background-attachment: fixed;
}

/* 窓辺 */
.philosophy.fixed-editorial {
  margin-top: 0;
  padding: 0;
  background-image:
    linear-gradient(
      90deg,
      rgba(245, 241, 236, .06) 0%,
      rgba(245, 241, 236, .10) 42%,
      rgba(245, 241, 236, .60) 70%,
      rgba(245, 241, 236, .88) 100%
    ),
    url("../images/philosophy-window.jpg");

  background-position: center center;
}

/* 手元 */
.experience.fixed-editorial {
  padding: 0;
  background-image:
    linear-gradient(
      90deg,
      rgba(245, 241, 236, .90) 0%,
      rgba(245, 241, 236, .63) 30%,
      rgba(245, 241, 236, .15) 60%,
      rgba(245, 241, 236, .04) 100%
    ),
    url("../images/experience.jpg");

  background-position: center center;
}

.fixed-editorial__inner {
  position: relative;
  z-index: 2;
  width: 100%;
  min-height: inherit;
  display: flex;
  align-items: center;
}

.fixed-editorial__inner--right {
  justify-content: flex-end;
}

.fixed-editorial__inner--left {
  justify-content: flex-start;
}

.fixed-editorial__body {
  width: min(38%, 440px);
}

/* 既存の2カラム指定を無効化 */
.philosophy__inner,
.experience__inner {
  display: block;
}

.philosophy__body,
.experience__body {
  padding: 0;
}

.philosophy__lead {
  margin-top: clamp(28px, 3vw, 46px);
}

.philosophy__text {
  margin-top: clamp(22px, 2.4vw, 34px);
}

.experience__lead {
  margin-top: clamp(26px, 3vw, 42px);
}

/* 文字は黒ではなくGran Éaのグレーブラウン */
.fixed-editorial .section-label,
.fixed-editorial .philosophy__lead,
.fixed-editorial .philosophy__text,
.fixed-editorial .experience__lead {
  color: var(--ink-soft);
}


/* ==========================================================
   SP
   iOS Safariでは background-attachment: fixed が不安定なため
   スクロール背景に切り替え、構図だけ維持
   ========================================================== */

@media (max-width: 900px) {

  .fixed-editorial {
    min-height: 78vh;
    background-attachment: scroll;
  }

  .philosophy.fixed-editorial {
    background-position: 35% center;
    background-image:
      linear-gradient(
        180deg,
        rgba(245, 241, 236, .10) 0%,
        rgba(245, 241, 236, .24) 38%,
        rgba(245, 241, 236, .82) 78%,
        rgba(245, 241, 236, .94) 100%
      ),
      url("../images/philosophy-window.jpg");
  }

  .experience.fixed-editorial {
    background-position: 62% center;
    background-image:
      linear-gradient(
        180deg,
        rgba(245, 241, 236, .90) 0%,
        rgba(245, 241, 236, .68) 34%,
        rgba(245, 241, 236, .16) 72%,
        rgba(245, 241, 236, .04) 100%
      ),
      url("../images/experience.jpg");
  }

  .fixed-editorial__inner {
    align-items: flex-end;
    padding-bottom: clamp(56px, 14vw, 90px);
  }

  .experience .fixed-editorial__inner {
    align-items: flex-start;
    padding-top: clamp(64px, 16vw, 100px);
    padding-bottom: 0;
  }

  .fixed-editorial__body {
    width: min(78%, 390px);
  }

  .fixed-editorial__inner--right,
  .fixed-editorial__inner--left {
    justify-content: flex-start;
  }
}

/* ==========================================================
   FIXED EDITORIAL — FINAL
   PHILOSOPHY / Éa EXPERIENCE
   ========================================================== */

/* 強いぼかしは使わない */
.philosophy.fixed-editorial::after,
.experience.fixed-editorial::before {
  display: none !important;
}

/* MENUと近い、少し柔らかい写真トーン */
.philosophy.fixed-editorial {
  background-image:
    linear-gradient(
      90deg,
      rgba(70, 60, 54, .16) 0%,
      rgba(70, 60, 54, .08) 42%,
      rgba(245, 241, 236, .12) 72%,
      rgba(245, 241, 236, .28) 100%
    ),
    url("../images/philosophy-window.jpg");
}

.experience.fixed-editorial {
  background-image:
    linear-gradient(
      90deg,
      rgba(245, 241, 236, .24) 0%,
      rgba(245, 241, 236, .10) 34%,
      rgba(70, 60, 54, .06) 68%,
      rgba(70, 60, 54, .14) 100%
    ),
    url("../images/experience.jpg");
}

/* 白文字。影はごく弱く */
.fixed-editorial .section-label,
.fixed-editorial .philosophy__lead,
.fixed-editorial .philosophy__text,
.fixed-editorial .experience__lead {
  color: rgba(255, 255, 255, .96) !important;
  text-shadow: 0 2px 12px rgba(55, 45, 40, .16);
}


/* =========================
   PC
   ========================= */

@media (min-width: 901px) {

  .fixed-editorial {
    min-height: min(82vh, 820px);
  }

  /* PHILOSOPHY = 左から少し内側 */
  .philosophy .fixed-editorial__inner {
    justify-content: flex-start !important;
  }

  .philosophy .fixed-editorial__body {
    margin-left: clamp(90px, 9vw, 155px) !important;
    margin-right: 0 !important;
    width: min(34%, 420px) !important;
  }

  /* EXPERIENCE = 右から少し内側 */
  .experience .fixed-editorial__inner {
    justify-content: flex-end !important;
  }

  .experience .fixed-editorial__body {
    margin-left: 0 !important;
    margin-right: clamp(90px, 9vw, 155px) !important;
    width: min(34%, 420px) !important;
  }
}


/* =========================
   SP
   ========================= */

@media (max-width: 900px) {

  .fixed-editorial {
    min-height: 74vh !important;
    background-attachment: scroll !important;
    background-size: cover !important;
  }

  .fixed-editorial__inner {
    min-height: 74vh !important;
    padding:
      clamp(50px, 12vw, 76px)
      clamp(24px, 7vw, 42px) !important;

    display: flex !important;
  }

  /* PHILOSOPHYは左下 */
  .philosophy .fixed-editorial__inner {
    justify-content: flex-start !important;
    align-items: flex-end !important;
  }

  .philosophy .fixed-editorial__body {
    width: min(78vw, 320px) !important;
    margin: 0 !important;
  }

  .philosophy.fixed-editorial {
    background-position: 42% center !important;
    background-image:
      linear-gradient(
        180deg,
        rgba(70, 60, 54, .04) 0%,
        rgba(70, 60, 54, .08) 48%,
        rgba(70, 60, 54, .24) 100%
      ),
      url("../images/philosophy-window.jpg");
  }

  /* EXPERIENCEは右下 */
  .experience .fixed-editorial__inner {
    justify-content: flex-end !important;
    align-items: flex-end !important;
  }

  .experience .fixed-editorial__body {
    width: min(78vw, 320px) !important;
    margin: 0 !important;
    text-align: left;
  }

  .experience.fixed-editorial {
    background-position: 60% center !important;
    background-image:
      linear-gradient(
        180deg,
        rgba(70, 60, 54, .03) 0%,
        rgba(70, 60, 54, .08) 48%,
        rgba(70, 60, 54, .25) 100%
      ),
      url("../images/experience.jpg");
  }

  /* SPで文字を巨大化させない */
  .fixed-editorial .section-label {
    font-size: 15px !important;
    letter-spacing: .18em;
  }

  .fixed-editorial .philosophy__lead,
  .fixed-editorial .experience__lead {
    margin-top: 26px;
    font-size: clamp(17px, 4.5vw, 20px) !important;
    line-height: 2 !important;
    letter-spacing: .11em;
  }

  .fixed-editorial .philosophy__text {
    margin-top: 22px;
    font-size: 12px !important;
    line-height: 2 !important;
  }

  .philosophy__lead-indent {
    margin-left: 1.1em !important;
  }
}


/* ==========================================================
   STORY — PHILOSOPHY / Éa EXPERIENCE（PC・SP共通の構造）

     .story-scroll
       ├ img.story-scroll__visual   … back.png（完成ビジュアル1枚）。width:100% / height:auto
       └ .story-scroll__content     … 画像と同じ大きさの透明レイヤー
           ├ #philosophy  上側・左（absolute）
           └ #experience  下側・右（absolute）

   背景固定・sticky・mask・合成レイヤー・bridgeは使わない。画像は
   縦横比のまま全幅で表示され、その高さがそのままSTORYの高さになる。
   PC/SPで違うのは、FV・MENUとの重なり量と、テキストの位置・大きさだけ。
   ========================================================== */

.story-scroll {
  position: relative;
  z-index: 5;
}

.story-scroll__picture {
  display: block;
  line-height: 0;
}

.story-scroll__visual {
  display: block;
  width: 100%;
  height: auto;
}

/* 画像と同じ大きさの透明レイヤー。テキストだけをこの上に重ねる */
.story-scroll__content {
  position: absolute;
  inset: 0;
}

.story-scene {
  position: absolute;
}

.story-scene__inner,
.story-scene__body {
  width: auto;
}

.story-scene .container {
  margin: 0;
  padding: 0;
}

.story-scene__body {
  color: var(--ink);
  text-shadow: 0 2px 18px rgba(250, 248, 244, .65);
}

.story-scene .section-label {
  color: inherit;
}

.story-scene__lead span {
  display: inline-block;
  margin-left: 0;
}

/* 文字サイズ・字間・位置は下のPC / SPブロックがそれぞれ完結して持つ
   （PC用のclampはSPに届かない） */


/* ==========================================================
   STORY — PC（901px〜）
   ========================================================== */

@media (min-width: 901px) {

  .story-scroll {
    --story-overlap: clamp(150px, 11vw, 180px);
    /* FVの下端へ重ねる（画像の上端フェードの分） */
    margin-top: calc(var(--story-overlap) * -1);
    /* MENUの上端フェード（160px）の下にback.pngの下端を潜らせる */
    margin-bottom: -160px;
  }

  /* maskはFVとの境の横線を消す上端フェードだけ */
  .story-scroll__visual {
    -webkit-mask-image: linear-gradient(
      to bottom,
      transparent 0px,
      rgba(0,0,0,.12) 24px,
      rgba(0,0,0,.36) 52px,
      rgba(0,0,0,.68) 82px,
      rgba(0,0,0,.90) 112px,
      #000 145px
    );
    mask-image: linear-gradient(
      to bottom,
      transparent 0px,
      rgba(0,0,0,.12) 24px,
      rgba(0,0,0,.36) 52px,
      rgba(0,0,0,.68) 82px,
      rgba(0,0,0,.90) 112px,
      #000 145px
    );
  }

  .story-scene .section-label {
    font-size: clamp(16px, 1.35vw, 21px);
    letter-spacing: .18em;
  }

  .story-scene__lead {
    margin-top: clamp(30px, 3vw, 46px);
    font-size: clamp(19px, 1.65vw, 25px);
    line-height: 2.05;
    letter-spacing: .13em;
  }

  .story-scene__sub {
    margin-top: clamp(24px, 2.3vw, 34px);
    font-size: 13px;
    line-height: 2.15;
    letter-spacing: .11em;
  }

  /* 上側左：PHILOSOPHY */
  .story-scene--philosophy {
    top: 18%;
    left: var(--rail-inset-pc);
  }

  /* 下側右：Éa EXPERIENCE */
  .story-scene--experience {
    bottom: 14%;
    right: var(--rail-inset-pc);
  }
}


/* ==========================================================
   STORY — SP（〜900px）
   画像は縦横比のままなので、SPでは画像自体が小さい（幅393pxで高さ約518px）。
   その中に2つのテキストを収めるため、FV・MENUへ重ねる量を小さくし、
   PHILOSOPHYはFVとの重なりの直下、Éa EXPERIENCEはMENUとの重なりの直上に置く。
   左右の余白は24px（--story-safe）で、文字は必ずこの内側に収まる。
   ========================================================== */

@media (max-width: 900px) {

  .story-scroll {
    --story-overlap: 24px;
    --story-menu-overlap: 96px;
    --story-safe: 24px;
    margin-top: calc(var(--story-overlap) * -1);
    margin-bottom: calc(var(--story-menu-overlap) * -1);
  }

  /* maskは、FVとの境・MENUとの境の横線を消す上下端のフェードだけ。
     下端はMENU写真が立ち上がる重なり（--story-menu-overlap）の分で透明になる */
  .story-scroll__visual {
    -webkit-mask-image: linear-gradient(
      to bottom,
      transparent 0px,
      rgba(0,0,0,.2) 14px,
      rgba(0,0,0,.55) 30px,
      rgba(0,0,0,.85) 44px,
      #000 56px,
      #000 calc(100% - var(--story-menu-overlap)),
      transparent 100%
    );
    mask-image: linear-gradient(
      to bottom,
      transparent 0px,
      rgba(0,0,0,.2) 14px,
      rgba(0,0,0,.55) 30px,
      rgba(0,0,0,.85) 44px,
      #000 56px,
      #000 calc(100% - var(--story-menu-overlap)),
      transparent 100%
    );
  }

  /* 文字は「上の余白」と「手が終わった後の余白」の2か所だけに置き、
     中央の手の写真（画像の約35〜72%）には重ねない。位置は画像の高さに
     対する割合なので、393/430/500pxでも同じ流れになる */

  /* PHILOSOPHY＝画像上部の左寄せ（手が大きく始まる前に収める） */
  .story-scene--philosophy {
    top: 9%;
    left: var(--story-safe);
    max-width: calc(100% - var(--story-safe) * 2);
  }

  /* Éa EXPERIENCE＝手が終わった後の明るい余白（植物影）の右寄せ */
  .story-scene--experience {
    bottom: 5%;
    right: var(--story-safe);
    max-width: calc(100% - var(--story-safe) * 2);
    text-align: right;
  }

  .story-scene .section-label {
    font-size: 12px;
    letter-spacing: .17em;
  }

  .story-scene__lead {
    margin-top: 10px;
    font-size: clamp(16.5px, 4.2vw, 17.5px);
    line-height: 1.9;
    letter-spacing: .10em;
  }

  .story-scene__sub {
    margin-top: 6px;
    font-size: 10.5px;
    line-height: 1.9;
    letter-spacing: .11em;
  }
}


/* ==========================================================
   HERO（FV）— STORYとの接続まわり
   FV自体は変更しない。下端の白帯（.hero::after）は使わず、
   SCROLL表示だけ.hero-fadeに連動して少し下げる。
   ========================================================== */

.hero::after {
  display: none !important;
}

.hero__scroll {
  bottom: calc(var(--hero-fade) * .22) !important;
  z-index: 9;
}

@media (max-width: 900px) {
  .hero__scroll {
    bottom: calc(var(--hero-fade) * .28) !important;
  }
}



/* ==========================================================
   MENU — FULL EDITORIAL BACKGROUND
   STORYから自然につながるフル背景MENU
   ========================================================== */

.menu-entry-section {
  position: relative;
  z-index: 4;
  padding: 0 !important;
  margin-top: -110px;
  background: var(--ivory);
}

.menu-entry-section > .container {
  width: 100%;
  max-width: none;
  padding: 0;
}

.menu-entry {
  position: relative;
  display: block;
  width: 100%;
  min-height: min(88vh, 860px);
  aspect-ratio: auto !important;
  overflow: hidden;
  color: var(--ink-soft);
  background: var(--greige-1);
}

/* 写真を画面いっぱいに */
.menu-entry__bg-wrap {
  position: absolute;
  inset: 0;
  z-index: 0;

  /* 上端だけSTORYからふわっと現れる */
  -webkit-mask-image: linear-gradient(
    to bottom,
    transparent 0px,
    rgba(0,0,0,.18) 28px,
    rgba(0,0,0,.48) 58px,
    rgba(0,0,0,.78) 88px,
    #000 120px,
    #000 100%
  );

  mask-image: linear-gradient(
    to bottom,
    transparent 0px,
    rgba(0,0,0,.18) 28px,
    rgba(0,0,0,.48) 58px,
    rgba(0,0,0,.78) 88px,
    #000 120px,
    #000 100%
  );
}

.menu-entry__bg {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  transform: scale(1.01);
}

/* 写真自体はぼかさない */
.menu-entry:hover .menu-entry__bg {
  transform: scale(1.025);
}

/* 左側だけ少し読みやすく。
   白い帯や強いblurは使わない */
.menu-entry__scrim {
  display: block !important;
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
  background: linear-gradient(
    90deg,
    rgba(246,243,238,.54) 0%,
    rgba(246,243,238,.30) 26%,
    rgba(246,243,238,.08) 50%,
    transparent 72%
  );
}

/* STORYと同じくらい内側に文字を配置 */
.menu-entry__content {
  position: relative;
  z-index: 2;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  justify-content: center;

  min-height: min(88vh, 860px);
  max-width: 430px;

  /* 共通CONTENT RAIL（SPは.menu-entry__content内のSP用paddingで
     margin-left:0に上書きされるため、この変更はPCにのみ効く） */
  margin-left: var(--rail-inset-pc);
  padding: 70px 0 0;
}

.menu-entry__title {
  font-size: clamp(33px, 4.1vw, 52px);
  color: var(--ink-soft);
}

.menu-entry__list,
.menu-entry__arrow {
  color: var(--ink-soft);
}


/* =========================
   SP
   ========================= */

@media (max-width: 900px) {

  .menu-entry {
    min-height: 62svh;
    aspect-ratio: auto !important;
  }

  .menu-entry__bg-wrap {
    -webkit-mask-image: linear-gradient(
      to bottom,
      transparent 0px,
      rgba(0,0,0,.18) 18px,
      rgba(0,0,0,.52) 42px,
      rgba(0,0,0,.82) 66px,
      #000 88px,
      #000 100%
    );

    mask-image: linear-gradient(
      to bottom,
      transparent 0px,
      rgba(0,0,0,.18) 18px,
      rgba(0,0,0,.52) 42px,
      rgba(0,0,0,.82) 66px,
      #000 88px,
      #000 100%
    );
  }

  .menu-entry__bg {
    object-position: center;
    transform: none;
  }

  .menu-entry__scrim {
    background: linear-gradient(
      180deg,
      rgba(246,243,238,.22) 0%,
      rgba(246,243,238,.13) 40%,
      rgba(246,243,238,.46) 100%
    );
  }

  .menu-entry__content {
    min-height: 62svh;
    max-width: none;
    margin-left: 0;
    transform: translateY(90px);
    padding:
      clamp(100px, 24vw, 150px)
      clamp(24px, 7vw, 38px)
      clamp(60px, 15vw, 90px);

    justify-content: flex-start;
  }

  .menu-entry__title {
    font-size: clamp(25px, 7.4vw, 33px);
  }
}


/* ==========================================================
   EXPERIENCE → MENU / SP final refinement
   境目を深く重ねて、MENU写真の白飛びも少し抑える
   ========================================================== */

@media (max-width: 900px) {

  /* STORY（back.png）の直後にそのまま続ける。重なりはSTORY側の
     margin-bottom（--story-menu-overlap）だけで作る。MENUは背景を持たず、
     上端のmask（下）でback.pngの下端の上に写真が立ち上がる */
  .menu-entry-section {
    margin-top: 0;
    background: transparent;
  }

  .menu-entry {
    background: transparent;
  }

  /* MENU写真をもう少し早く・自然に出す */
  .menu-entry__bg-wrap,
  .menu-entry__scrim {
    -webkit-mask-image: linear-gradient(
      to bottom,
      transparent 0px,
      rgba(0,0,0,.06) 18px,
      rgba(0,0,0,.20) 40px,
      rgba(0,0,0,.42) 68px,
      rgba(0,0,0,.68) 96px,
      rgba(0,0,0,.88) 125px,
      #000 155px,
      #000 100%
    ) !important;

    mask-image: linear-gradient(
      to bottom,
      transparent 0px,
      rgba(0,0,0,.06) 18px,
      rgba(0,0,0,.20) 40px,
      rgba(0,0,0,.42) 68px,
      rgba(0,0,0,.68) 96px,
      rgba(0,0,0,.88) 125px,
      #000 155px,
      #000 100%
    ) !important;
  }

  /* 白く飛びすぎないよう、MENUのヴェールを弱める */
  .menu-entry__scrim {
    background: linear-gradient(
      180deg,
      rgba(246,243,238,.10) 0%,
      rgba(246,243,238,.08) 36%,
      rgba(246,243,238,.22) 100%
    ) !important;
  }
}


/* ==========================================================
   SP — MENU content timing
   写真のクロスフェード後にMENU文字を出す
   ========================================================== */

@media (max-width: 900px) {
  .menu-entry__content {
    padding-top: clamp(190px, 42vw, 235px) !important;
  }
}


/* ==========================================================
   SP — MENU content lower
   ========================================================== */

@media (max-width: 900px) {
  .menu-entry__content {
    padding-top: clamp(270px, 60vw, 350px) !important;
  }
}


/* ==========================================================
   MENU — 文字ブロックを上へ（SP）
   直前の2ブロックがpadding-topを270〜350pxまで押し下げていたのを、
   ここで最終的に上書きする。背景画像・高さ・左右位置・フォント・
   arrowは一切変更しない（vertical positionのみ） */
@media (max-width: 900px) {
  .menu-entry__content {
    padding-top: clamp(70px, 16vh, 130px) !important;
  }
}


/* ==========================================================
   MENU — 文字ブロックを上へ（PC）
   justify-content:centerによる中央配置をやめ、上寄せ＋paddingで
   「セクション上端から約12〜18%」に見出しが来るようにする。
   上のtranslateY(80px)は中央配置を前提にした位置合わせだったため、
   ここで打ち消す。背景画像・高さ・左右位置・フォント・arrowは
   一切変更しない（vertical positionのみ） */
@media (min-width: 901px) {
  .menu-entry__content {
    justify-content: flex-start !important;
    padding-top: clamp(90px, 15vh, 150px) !important;
    transform: none !important;
  }
}


/* ==========================================================
   LOWER SURFACE — INSTAGRAM → RESERVATION → ACCESS → FOOTER
   縦長テクスチャ画像1枚を4エリア共通の親要素(.lower-surface)に
   敷き、各セクション自体は透明にして継ぎ目をなくす。
   画像側で白→グレージュ→濃いグレージュの色・質感が完成しているため、
   ここでは色・ノイズ・光・グラデーションを一切追加しない。
   ========================================================== */

.lower-surface {
  position: relative;
  background-image: url("../images/lower-bg.png");
  background-repeat: no-repeat;
  background-position: center top;
  background-size: 100% 100%;
}

/* SPは縦長画像の比率を保ったまま全高を覆う（100% 100%の引き伸ばしは
   PC以上に縦横比の乖離が大きく不自然になるため使わない）。
   途中で途切れたりタイル化したりしない唯一の方式として cover を使う */
@media (max-width: 720px) {
  .lower-surface {
    background-size: cover;
  }
}

.instagram,
.reservation,
.access,
.site-footer {
  background: transparent;
}


/* ==========================================================
   INSTAGRAM — EDITORIAL LAYOUT
   背景は.lower-surfaceが担当。ここでは見出し配置・グリッド幅・
   MENU→INSTAGRAMのクロスフェード用の margin/padding のみを扱う
   ========================================================== */

.instagram {
  position: relative;
  z-index: 2;

  /* MENU側へ少し入り込ませる（クロスフェード用）。
     見出しの実位置は (このpadding-top基準値) + margin-top で決まるため、
     margin-topは変えずbase値だけを詰めてMENU→INSTAGRAMの空白を縮めている */
  margin-top: -190px !important;
  padding-top: calc(clamp(110px, 8.5vw, 150px) + 190px) !important;
  padding-bottom: clamp(110px, 11vw, 180px) !important;
}

.instagram__inner {
  position: relative;
  z-index: 2;

  /* 共通CONTENT RAIL。.containerと同じ式にして、他セクションと
     左右の基準線を揃える（グリッド幅は --cw が cqw 基準のため自動追従） */
  width: min(100% - var(--gutter) * 2, var(--container));
  max-width: none !important;
  margin-inline: auto;

  --gap: clamp(16px, 1.5vw, 26px);
}

/* 見出しを少し左へ。MENUと同じeditorialな入り方 */
.instagram__head {
  position: relative !important;
  top: auto !important;
  left: auto !important;

  width: max-content;
  margin:
    0
    0
    clamp(56px, 7vw, 100px)
    clamp(0px, 2vw, 32px);

  color: var(--ink-soft);
}

.instagram__head .section-label {
  color: var(--ink-soft);
}

.instagram__handle {
  display: inline-block;
  margin-top: 16px;
  color: var(--ink-soft);
}

/* 写真のカード感を減らす */
.instagram-item {
  background: transparent !important;
}

.instagram-item .media {
  overflow: hidden;
  box-shadow: none !important;
  border: 0 !important;
}

/* 既存より少し写真を見せる */
.instagram {
  --ig-saturate: .76;
  --ig-contrast: .94;
  --ig-brightness: 1;
  --ig-warm: .08;
  --ig-veil: .035;
}

/* FOLLOWは余白の中に静かに置く */
.instagram__follow {
  position: relative;
  z-index: 2;
  margin-top: clamp(70px, 8vw, 120px) !important;
}


/* ==========================================================
   SP
   ========================================================== */

@media (max-width: 900px) {

  .instagram {
    margin-top: -130px !important;
    padding-top: 170px !important;
    padding-bottom: 100px !important;
  }

  .instagram__inner {
    width: calc(100% - 48px);
    --gap: 10px;
  }

  .instagram__head {
    margin:
      0
      0
      42px
      0 !important;
  }

  .instagram__head .section-label {
    font-size: clamp(23px, 6.6vw, 31px);
  }

  .instagram__handle {
    margin-top: 12px;
  }

  .instagram__follow {
    margin-top: 54px !important;
  }
}


/* ==========================================================
   MENU → INSTAGRAM true crossfade
   MENU本体の下端を透明化し、Instagramを下に潜り込ませる
   ========================================================== */

.menu-entry-section {
  position: relative;
  z-index: 6;
}

/* MENUそのものを下端だけフェードアウト */
.menu-entry {
  -webkit-mask-image: linear-gradient(
    to bottom,
    #000 0%,
    #000 calc(100% - 210px),
    rgba(0,0,0,.94) calc(100% - 175px),
    rgba(0,0,0,.72) calc(100% - 130px),
    rgba(0,0,0,.42) calc(100% - 85px),
    rgba(0,0,0,.15) calc(100% - 40px),
    transparent 100%
  );

  mask-image: linear-gradient(
    to bottom,
    #000 0%,
    #000 calc(100% - 210px),
    rgba(0,0,0,.94) calc(100% - 175px),
    rgba(0,0,0,.72) calc(100% - 130px),
    rgba(0,0,0,.42) calc(100% - 85px),
    rgba(0,0,0,.15) calc(100% - 40px),
    transparent 100%
  );
}


/* =========================
   SP
   ========================= */

@media (max-width: 900px) {

  .menu-entry {
    -webkit-mask-image: linear-gradient(
      to bottom,
      #000 0%,
      #000 calc(100% - 150px),
      rgba(0,0,0,.90) calc(100% - 120px),
      rgba(0,0,0,.66) calc(100% - 85px),
      rgba(0,0,0,.34) calc(100% - 48px),
      rgba(0,0,0,.10) calc(100% - 18px),
      transparent 100%
    );

    mask-image: linear-gradient(
      to bottom,
      #000 0%,
      #000 calc(100% - 150px),
      rgba(0,0,0,.90) calc(100% - 120px),
      rgba(0,0,0,.66) calc(100% - 85px),
      rgba(0,0,0,.34) calc(100% - 48px),
      rgba(0,0,0,.10) calc(100% - 18px),
      transparent 100%
    );
  }
}


/* ==========================================================
   ACCESS — PC 2 COLUMN
   左：テキスト＋Google Maps
   右：店内写真
   SPは既存レイアウトを維持
   ========================================================== */

@media (min-width: 901px) {

  .access__inner {
    display: grid !important;
    grid-template-columns: minmax(0, .78fr) minmax(0, 1.22fr);
    grid-template-areas:
      "body media"
      "map  media";
    column-gap: clamp(70px, 8vw, 140px);
    row-gap: clamp(34px, 4vw, 54px);
    align-items: center;

    /* 共通CONTENT RAIL。.containerと同じ式にして、
       左テキストの始点・右画像の終点を他セクションと揃える */
    width: min(100% - var(--gutter) * 2, var(--container));
    max-width: none !important;
    margin-inline: auto;
  }

  .access__body {
    grid-area: body;
    align-self: end;
    padding-left: clamp(10px, 2vw, 34px);
  }

  .access__media {
    grid-area: media;
    width: 100%;
    margin: 0 !important;
    align-self: center;
  }

  .access__image {
    display: block;
    width: 100%;
    height: auto;
    aspect-ratio: 4 / 3;
    object-fit: cover;
  }

  .access__map-link {
    grid-area: map;
    justify-self: start;
    align-self: start;

    margin: 0 0 0 clamp(10px, 2vw, 34px) !important;
  }

  .access__address {
    margin-top: clamp(24px, 2.5vw, 36px);
  }

  .access__info {
    margin-top: clamp(24px, 2.8vw, 40px);
  }

  .access__note {
    margin-top: clamp(34px, 3.8vw, 54px);
  }
}


/* ==========================================================
   PC — MENU（STORYの直後）
   MENU本体（背景画像・文字・高さ）は変更しない。MENUは背景を持たず、
   上端160pxだけを画像maskでふわっと立ち上げる。その下に
   .story-scrollの末尾（back.pngの下端）が重なって見える。
   ========================================================== */

@media (min-width: 901px) {
  .menu-entry-section {
    margin-top: 0 !important;
    transform: none !important;
    position: relative;
    z-index: 6;
    overflow: visible;
    background: transparent !important;
  }

  .menu-entry {
    background: transparent !important;
  }

  .menu-entry__bg-wrap,
  .menu-entry__scrim {
    -webkit-mask-image: linear-gradient(
      to bottom,
      transparent 0px,
      rgba(0,0,0,.08) 24px,
      rgba(0,0,0,.24) 50px,
      rgba(0,0,0,.48) 78px,
      rgba(0,0,0,.72) 108px,
      rgba(0,0,0,.90) 136px,
      #000 160px,
      #000 100%
    ) !important;

    mask-image: linear-gradient(
      to bottom,
      transparent 0px,
      rgba(0,0,0,.08) 24px,
      rgba(0,0,0,.24) 50px,
      rgba(0,0,0,.48) 78px,
      rgba(0,0,0,.72) 108px,
      rgba(0,0,0,.90) 136px,
      #000 160px,
      #000 100%
    ) !important;
  }
}


/* ==========================================================
   SP STORY — soft reveal
   PHILOSOPHY / Éa EXPERIENCE を下からふわっと表示
   PCは現在の表示を維持
   ========================================================== */

@media (max-width: 900px) {
  .story-reveal-sp {
    --rise: 22px;
    --dur-reveal: 1.35s;
    --ease-reveal: cubic-bezier(.22, .61, .36, 1);
  }
}

@media (min-width: 901px) {
  .js .story-reveal-sp {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
  }
}


/* ==========================================================
   SP — HERO → STORY seamless fade
   FV下端の直線を消して、STORYへ自然に溶かす
   ========================================================== */
@media (max-width: 900px) {

  .hero {
    position: relative;
  }

  .hero::after {
    content: "" !important;
    display: block !important;
    position: absolute !important;

    left: 0 !important;
    right: 0 !important;
    bottom: -4px !important;

    height: 154px !important;

    pointer-events: none !important;
    z-index: 8 !important;

    background: linear-gradient(
      to bottom,
      rgba(247,244,239,0) 0%,
      rgba(247,244,239,.08) 18%,
      rgba(247,244,239,.22) 36%,
      rgba(247,244,239,.46) 56%,
      rgba(247,244,239,.72) 76%,
      rgba(247,244,239,.92) 92%,
      #f7f4ef 100%
    ) !important;
  }

}


/* SP — Instagram heading right align only */
@media (max-width: 900px) {
  .instagram__head {
    text-align: right !important;
  }
}


/* SP — Instagram heading block to right */
@media (max-width: 900px) {
  .instagram__head {
    margin-left: auto !important;
    margin-right: 0 !important;
    text-align: right !important;
  }
}

/* ==========================================================
   SP MENU — editorial arrow
   細い横線＋右端に小さな斜め線
   ========================================================== */
@media (max-width: 900px) {

  .menu-entry__arrow {
    position: relative;
    display: block;
    width: 82px;
    height: 28px;
    font-size: 0;
    color: var(--ink-soft);
    background: none !important;
    border: 0 !important;
  }

  .menu-entry__arrow::before {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    top: 50%;
    height: 1px;
    background: currentColor;
    transform: translateY(-50%);
  }

  .menu-entry__arrow::after {
    content: "";
    position: absolute;
    right: 0;
    top: 50%;
    width: 10px;
    height: 1px;
    background: currentColor;
    transform-origin: right center;
    transform: rotate(45deg);
  }

}

/* SP — FOLLOW ON INSTAGRAM arrow = MENU arrow */
@media (max-width: 900px) {

  .instagram__follow .link-arrow__icon {
    position: relative !important;
    display: inline-block !important;
    width: 42px !important;
    height: 28px !important;
    background: none !important;
    border: 0 !important;
  }

  .instagram__follow .link-arrow__icon::before {
    content: "" !important;
    position: absolute !important;
    left: 0 !important;
    right: 0 !important;
    top: 50% !important;
    height: 1px !important;
    background: currentColor !important;
    transform: translateY(-50%) !important;
  }

  .instagram__follow .link-arrow__icon::after {
    content: "" !important;
    position: absolute !important;
    right: 0 !important;
    top: 50% !important;
    width: 7px !important;
    height: 1px !important;
    background: currentColor !important;
    transform-origin: right center !important;
    transform: rotate(45deg) !important;
  }

}


/* SP — FOLLOW arrow size fix */
@media (max-width: 900px) {
  .instagram__follow .link-arrow__icon {
    flex: 0 0 42px !important;
    width: 42px !important;
    min-width: 42px !important;
    max-width: 42px !important;
  }
}


/* SP — FOLLOW ON INSTAGRAM arrow smaller + lighter */
@media (max-width: 900px) {
  .instagram__follow .link-arrow__icon {
    flex: 0 0 28px !important;
    width: 28px !important;
    min-width: 28px !important;
    max-width: 28px !important;
    height: 18px !important;
    opacity: .55 !important;
  }

  .instagram__follow .link-arrow__icon::before {
    left: 0 !important;
    right: 0 !important;
    height: 1px !important;
    opacity: 1 !important;
  }

  .instagram__follow .link-arrow__icon::after {
    right: 0 !important;
    width: 6px !important;
    height: 1px !important;
    opacity: 1 !important;
  }
}

/* ==========================================================
   SP — RESERVATION centered layout
   ========================================================== */
@media (max-width: 720px) {

  .reservation__banner {
    display: flex !important;
    flex-direction: column !important;
    align-items: center !important;
    justify-content: center !important;
    gap: 42px !important;
  }

  .reservation__body {
    text-align: center !important;
  }

  .reservation__body .section-label {
    display: none !important;
  }

  .reservation__lead {
    margin-top: 0 !important;
    text-align: center !important;
  }

  .reservation__cta {
    margin: 0 !important;
    padding: 0 !important;
    justify-self: auto !important;
    align-self: center !important;
    text-align: center !important;
  }

  .reservation__cta .link-arrow__icon {
    display: none !important;
  }

}


/* ==========================================================
   SP — RESERVATION banner subtle depth
   予約バナーにほんのり立体感を追加
   ========================================================== */
@media (max-width: 720px) {

  .reservation__banner {
    position: relative;
    overflow: hidden;
    border: 1px solid rgba(86, 74, 63, 0.08);
    box-shadow:
      0 14px 34px rgba(86, 74, 63, 0.10),
      0 3px 10px rgba(86, 74, 63, 0.06);
  }

  .reservation__banner::after {
    content: "";
    position: absolute;
    inset: 0;
    pointer-events: none;
    box-shadow:
      inset 0 1px 0 rgba(255, 255, 255, 0.35),
      inset 0 0 0 1px rgba(255, 255, 255, 0.10);
  }

}



/* ACCESS — address as Google Maps link */
.access__address-link {
  color: inherit;
  text-decoration-line: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 5px;
  text-decoration-color: rgba(70, 64, 58, .55);
}

.access__address-link:hover {
  text-decoration-color: currentColor;
}

/* ==========================================================
   PC STORY bottom seam fix
   back-pc の下端を常時フェードして直線の一瞬表示を防ぐ
   SPは変更しない
   ========================================================== */
@media (min-width: 901px) {

  .story-scroll__visual {
    -webkit-mask-image: linear-gradient(
      to bottom,
      transparent 0px,
      rgba(0,0,0,.12) 24px,
      rgba(0,0,0,.36) 52px,
      rgba(0,0,0,.68) 82px,
      rgba(0,0,0,.90) 112px,
      #000 145px,
      #000 calc(100% - 150px),
      rgba(0,0,0,.92) calc(100% - 120px),
      rgba(0,0,0,.68) calc(100% - 82px),
      rgba(0,0,0,.36) calc(100% - 45px),
      transparent 100%
    ) !important;

    mask-image: linear-gradient(
      to bottom,
      transparent 0px,
      rgba(0,0,0,.12) 24px,
      rgba(0,0,0,.36) 52px,
      rgba(0,0,0,.68) 82px,
      rgba(0,0,0,.90) 112px,
      #000 145px,
      #000 calc(100% - 150px),
      rgba(0,0,0,.92) calc(100% - 120px),
      rgba(0,0,0,.68) calc(100% - 82px),
      rgba(0,0,0,.36) calc(100% - 45px),
      transparent 100%
    ) !important;
  }

}


/* STORY — PHILOSOPHY / Éa EXPERIENCE fade up */
.story-text-fadeup {
  --rise: 24px;
  --dur-reveal: 1.4s;
  --ease-reveal: cubic-bezier(.22, .61, .36, 1);
}

/* PC — MENU arrow left alignment */
@media (min-width: 901px) {
  .menu-entry__arrow {
    margin-left: 0 !important;
    transform: translateX(-12px);
  }
}

/* PC — MENU arrow = SP arrow */
@media (min-width: 901px) {
  .menu-entry__arrow {
    position: relative !important;
    display: block !important;
    width: 82px !important;
    height: 28px !important;
    font-size: 0 !important;
    color: var(--ink-soft) !important;
    background: none !important;
    border: 0 !important;
    margin-left: 0 !important;
    transform: translateX(0) !important;
  }

  .menu-entry__arrow::before {
    content: "" !important;
    position: absolute !important;
    left: 0 !important;
    right: 0 !important;
    top: 50% !important;
    height: 1px !important;
    background: currentColor !important;
    transform: translateY(-50%) !important;
  }

  .menu-entry__arrow::after {
    content: "" !important;
    position: absolute !important;
    right: 0 !important;
    top: 50% !important;
    width: 10px !important;
    height: 1px !important;
    background: currentColor !important;
    transform-origin: right center !important;
    transform: rotate(45deg) !important;
  }
}

/* PC — MENU arrow hover motion */
@media (min-width: 901px) {
  .menu-entry:hover .menu-entry__arrow {
    transform: translateX(8px) !important;
  }
}

/* PC — FOLLOW ON INSTAGRAM arrow = MENU arrow */
@media (min-width: 901px) {
  .instagram__follow .link-arrow__icon {
    position: relative !important;
    display: inline-block !important;
    flex: 0 0 82px !important;
    width: 82px !important;
    min-width: 82px !important;
    max-width: 82px !important;
    height: 28px !important;
    background: none !important;
    border: 0 !important;
    opacity: 1 !important;
    transform: translateX(0) !important;
    transition: transform .6s var(--ease) !important;
  }

  .instagram__follow .link-arrow__icon::before {
    content: "" !important;
    position: absolute !important;
    left: 0 !important;
    right: 0 !important;
    top: 50% !important;
    height: 1px !important;
    background: currentColor !important;
    transform: translateY(-50%) !important;
  }

  .instagram__follow .link-arrow__icon::after {
    content: "" !important;
    position: absolute !important;
    right: 0 !important;
    top: 50% !important;
    width: 10px !important;
    height: 1px !important;
    background: currentColor !important;
    transform-origin: right center !important;
    transform: rotate(45deg) !important;
  }

  .instagram__follow .link-arrow:hover .link-arrow__icon {
    transform: translateX(8px) !important;
  }
}

/* PC — FOLLOW arrow smaller + lighter */
@media (min-width: 901px) {
  .instagram__follow .link-arrow__icon {
    flex: 0 0 34px !important;
    width: 34px !important;
    min-width: 34px !important;
    max-width: 34px !important;
    height: 18px !important;
    opacity: .45 !important;
  }

  .instagram__follow .link-arrow__icon::after {
    width: 6px !important;
  }

  .instagram__follow .link-arrow:hover .link-arrow__icon {
    transform: translateX(5px) !important;
  }
}


/* PC — RESERVATION depth */
@media (min-width: 901px) {
  .reservation__banner {
    position: relative;
    overflow: hidden;
    border: 1px solid rgba(86, 74, 63, .08);
    box-shadow:
      0 22px 50px rgba(77, 66, 57, .12),
      0 6px 18px rgba(77, 66, 57, .07),
      inset 0 1px 0 rgba(255, 255, 255, .28);
    transition:
      transform .7s var(--ease),
      box-shadow .7s var(--ease);
  }

  .reservation__banner:hover {
    transform: translateY(-2px);
    box-shadow:
      0 28px 60px rgba(77, 66, 57, .14),
      0 8px 22px rgba(77, 66, 57, .08),
      inset 0 1px 0 rgba(255, 255, 255, .30);
  }

  .reservation__cta .link-arrow__icon {
    display: none !important;
  }
}



/* PC — soft cinematic transition */
@media (min-width: 901px) {

  .menu-page-turn {
    position: fixed !important;
    inset: 0 !important;
    z-index: 99999 !important;
    overflow: hidden !important;
    perspective: none !important;

    background: transparent !important;
  }

  .menu-page-turn::before {
    content: "" !important;
    position: absolute !important;
    inset: -4% !important;

    width: auto !important;
    height: auto !important;

    background:
      radial-gradient(
        circle at 50% 45%,
        rgba(248,245,240,.90) 0%,
        rgba(240,234,226,.97) 58%,
        #eae2d9 100%
      ) !important;

    transform: scale(1.08) !important;
    opacity: 0 !important;

    filter: blur(8px);

    box-shadow: none !important;

    will-change: transform, opacity, filter;
  }

  body.is-page-turning .menu-page-turn::before {
    animation:
      granEaSoftFadePC
      1s
      cubic-bezier(.22,.61,.36,1)
      forwards !important;
  }

  .menu-page-turn::after {
    content: none !important;
  }

  @keyframes granEaSoftFadePC {

    0% {
      opacity: 0;
      transform: scale(1.08);
      filter: blur(8px);
    }

    35% {
      opacity: .28;
    }

    70% {
      opacity: .82;
      transform: scale(1.025);
      filter: blur(2px);
    }

    100% {
      opacity: 1;
      transform: scale(1);
      filter: blur(0);
    }
  }

  body.is-page-turning > *:not(.menu-page-turn):not(script) {
    animation:
      granEaPageRecedePC
      .85s
      cubic-bezier(.22,.61,.36,1)
      forwards;
  }

  @keyframes granEaPageRecedePC {
    0% {
      transform: scale(1);
      opacity: 1;
      filter: blur(0);
    }

    100% {
      transform: scale(.975);
      opacity: .45;
      filter: blur(2px);
    }
  }
}



/* SP — Éa EXPERIENCE slightly higher */
@media (max-width: 900px) {
  .story-scene--experience {
    bottom: 8% !important;
  }
}

/* SP — Éa EXPERIENCE higher */
@media (max-width: 900px) {
  .story-scene--experience {
    bottom: 11% !important;
  }
}

/* SP — HERO NAIL SALON slightly lower */
@media (max-width: 900px) {
  .hero__tagline {
    transform: translateY(24px);
  }
}

/* ==========================================================
   HERO LOGO — base PNG + drawing overlay
   ========================================================== */

.hero__logo--stacked {
  position: relative;
  display: block;
}

/* 完成ロゴ：最初は隠して、描画完了後に表示 */
.hero__logo-base {
  display: block;
  width: 100%;
  height: auto;
  opacity: 0;
  transition: opacity .45s ease;
}

.hero__logo--stacked.is-complete .hero__logo-base {
  opacity: 1;
}

/* 手書きアニメを重ねるレイヤー */
.hero__logo-overlay {
  position: absolute;
  inset: 0;
  z-index: 2;
  pointer-events: none;
  opacity: 1;
  transition: opacity .45s ease;
}

.hero__logo-overlay svg {
  display: block;
  width: 100%;
  height: 100%;
}

/* 描画終了後に手書きレイヤーだけ消す */
.hero__logo-overlay.is-fading {
  opacity: 0;
}

/* JSが使えない場合の保険 */
.no-js .hero__logo-base {
  opacity: 1;
}


/* ACCESS — Japanese address lighter */
.access__address-ja {
  font-weight: 300;
  opacity: .82;
  letter-spacing: .035em;
}


/* MENU PAGE — footer text color */
.site-footer--menu {
  color: #77716c;
}

.site-footer--menu a,
.site-footer--menu .site-footer__tagline,
.site-footer--menu .site-footer__sister-label,
.site-footer--menu .site-footer__copy {
  color: #77716c;
}

.site-footer--menu a:hover {
  color: #4f4a46;
}


/* SISTER SALON — logo */
.site-footer__sister-logo {
  display: block;
  width: clamp(150px, 13vw, 220px);
  max-width: 100%;
  height: auto;
  object-fit: contain;
  margin-top: 12px;
}

@media (max-width: 900px) {
  .site-footer__sister-logo {
    width: clamp(150px, 42vw, 210px);
    margin-inline: auto;
    margin-top: 12px;
  }
}
