/* =========================
   Inview Entrance Animations
========================= */
.iv {
	opacity: 0;
	transform: translateY(18px) scale(0.97);
	transition: opacity .8s ease, transform .8s ease;
	-webkit-backface-visibility: hidden;
}
.iv.is-show {
	opacity: 1;
	transform: translateY(0) scale(1);
}

/* =========================
   FV Animations
========================= */
body.fv-only .fv_logo,
body.fv-only .fv_catch,
body.fv-only .fv_mask,
body.fv-only .fv_bottom,
body.fv-only .fv_wave1,
body.fv-only .fv_hana1,
body.fv-only .fv_human1,
body.fv-only .fv_human2,
body.fv-only .fv_human3,
body.fv-only .fv_itachi,
body.fv-only .fv_komori1,
body.fv-only .fv_kumo1,
body.fv-only .fv_kumo2,
body.fv-only .fv_kumo3,
body.fv-only .fv_kumo4,
body.fv-only .fv_kumo5,
body.fv-only .fv_kusa2,
body.fv-only .fv_mushi1,
body.fv-only .fv_mushi2,
body.fv-only .fv_mushi3,
body.fv-only .fv_sakana1,
body.fv-only .fv_sumo1,
body.fv-only .fv_tori,
body.fv-only .fv_train,
body.fv-only .fv_taiko {
	opacity: 0;
	transform: translateY(10px) scale(0.98);
	transition: opacity .9s ease, transform .9s ease;
	-webkit-backface-visibility: hidden;
}

body.fv-only.is-loaded .fv_logo,
body.fv-only.is-loaded .fv_catch,
body.fv-only.is-loaded .fv_mask,
body.fv-only.is-loaded .fv_bottom,
body.fv-only.is-loaded .fv_wave1,
body.fv-only.is-loaded .fv_hana1,
body.fv-only.is-loaded .fv_human1,
body.fv-only.is-loaded .fv_human2,
body.fv-only.is-loaded .fv_human3,
body.fv-only.is-loaded .fv_itachi,
body.fv-only.is-loaded .fv_komori1,
body.fv-only.is-loaded .fv_kumo1,
body.fv-only.is-loaded .fv_kumo2,
body.fv-only.is-loaded .fv_kumo3,
body.fv-only.is-loaded .fv_kumo4,
body.fv-only.is-loaded .fv_kumo5,
body.fv-only.is-loaded .fv_kusa2,
body.fv-only.is-loaded .fv_mushi1,
body.fv-only.is-loaded .fv_mushi2,
body.fv-only.is-loaded .fv_mushi3,
body.fv-only.is-loaded .fv_sakana1,
body.fv-only.is-loaded .fv_sumo1,
body.fv-only.is-loaded .fv_tori,
body.fv-only.is-loaded .fv_train,
body.fv-only.is-loaded .fv_taiko {
	opacity: 1;
	transform: translateY(0) scale(1);
}

body.fv-only.is-loaded .fv_mask { transition-delay: .05s; }
body.fv-only.is-loaded .fv_logo { transition-delay: .1s; }
body.fv-only.is-loaded .fv_catch { transition-delay: .2s; }
body.fv-only.is-loaded .fv_kumo1 { transition-delay: .25s; }
body.fv-only.is-loaded .fv_kumo2 { transition-delay: .3s; }
body.fv-only.is-loaded .fv_kumo3 { transition-delay: .35s; }
body.fv-only.is-loaded .fv_kumo4 { transition-delay: .4s; }
body.fv-only.is-loaded .fv_kumo5 { transition-delay: .45s; }
body.fv-only.is-loaded .fv_wave1 { transition-delay: .5s; }
body.fv-only.is-loaded .fv_hana1 { transition-delay: .55s; }
body.fv-only.is-loaded .fv_human1 { transition-delay: .6s; }
body.fv-only.is-loaded .fv_human2 { transition-delay: .65s; }
body.fv-only.is-loaded .fv_human3 { transition-delay: .7s; }
body.fv-only.is-loaded .fv_mushi1 { transition-delay: .75s; }
body.fv-only.is-loaded .fv_mushi2 { transition-delay: .8s; }
body.fv-only.is-loaded .fv_mushi3 { transition-delay: .85s; }
body.fv-only.is-loaded .fv_komori1 { transition-delay: .9s; }
body.fv-only.is-loaded .fv_sakana1 { transition-delay: .95s; }
body.fv-only.is-loaded .fv_tori { transition-delay: 1s; }
body.fv-only.is-loaded .fv_itachi { transition-delay: 1.05s; }
body.fv-only.is-loaded .fv_train { transition-delay: 1.1s; }
body.fv-only.is-loaded .fv_taiko { transition-delay: 1.15s; }
body.fv-only.is-loaded .fv_bottom { transition-delay: 1.2s; }

@keyframes drift-cloud {
	0% { transform: translateX(0); }
	50% { transform: translateX(3%); }
	100% { transform: translateX(0); }
}

@keyframes flutter {
	0% { transform: translate(0, 0) rotate(0deg); }
	40% { transform: translate(6%, -8%) rotate(6deg); }
	80% { transform: translate(-6%, 6%) rotate(-6deg); }
	100% { transform: translate(0, 0) rotate(0deg); }
}

@keyframes bob {
	0% { transform: translateY(0); }
	50% { transform: translateY(-3%); }
	100% { transform: translateY(0); }
}

@keyframes float-vertical {
	0% { transform: translateY(0); }
	50% { transform: translateY(-10%); }
	100% { transform: translateY(0); }
}

@keyframes swim {
	0% { transform: translateX(8%) scaleX(1); }
	49% { transform: translateX(-8%) scaleX(1); }
	50% { transform: translateX(-8%) scaleX(-1); }
	100% { transform: translateX(8%) scaleX(-1); }
}

@keyframes wiggle {
	0% { transform: rotate(0deg); }
	50% { transform: rotate(4deg); }
	100% { transform: rotate(0deg); }
}

@keyframes playful-float {
	0% { transform: translate(0, 0); }
	35% { transform: translate(-6%, 5%); }
	70% { transform: translate(7%, -6%); }
	100% { transform: translate(0, 0); }
}

@keyframes sway-grass {
	0% { transform: rotate(0deg); }
	50% { transform: rotate(-2.5deg); }
	100% { transform: rotate(0deg); }
}

@keyframes peck-left {
	0% { transform: translate(0, 0) rotate(0deg); }
	45% { transform: translate(-3%, 3.5%) rotate(-4deg); }
	100% { transform: translate(0, 0) rotate(0deg); }
}

@keyframes pulse-catch {
	0% { transform: scale(1); }
	50% { transform: scale(1.14); }
	100% { transform: scale(1); }
}

@keyframes pulse-taiko {
	0% { transform: scale(1); }
	4% { transform: scale(1.06); }
	6% { transform: scale(0.99); }
	10% { transform: scale(1); }
	100% { transform: scale(1); }
}

body.fv-only.is-loop .fv_kumo1 { animation: drift-cloud 13s ease-in-out infinite; animation-delay: -2s; }
body.fv-only.is-loop .fv_kumo2 { animation: drift-cloud 11s ease-in-out infinite; animation-delay: -6s; }
body.fv-only.is-loop .fv_kumo3 { animation: drift-cloud 14s ease-in-out infinite; animation-delay: -9s; }
body.fv-only.is-loop .fv_kumo4 { animation: drift-cloud 10s ease-in-out infinite; animation-delay: -4s; }
body.fv-only.is-loop .fv_kumo5 { animation: drift-cloud 12.5s ease-in-out infinite; animation-delay: -7s; }

body.fv-only.is-loop .fv_wave1 { animation: bob 6s ease-in-out infinite; }
body.fv-only.is-loop .fv_hana1 { animation: none; }
body.fv-only.is-loop .fv_mushi1 { animation: flutter 6.8s ease-in-out infinite; }
body.fv-only.is-loop .fv_mushi2 { animation: flutter 7.6s ease-in-out infinite; }
body.fv-only.is-loop .fv_mushi3 { animation: float-vertical 5.8s ease-in-out infinite; }
body.fv-only.is-loop .fv_komori1 { animation: float-vertical 6.2s ease-in-out infinite; }
body.fv-only.is-loop .fv_sakana1 { animation: swim 7.8s ease-in-out infinite; }
body.fv-only.is-loop .fv_tori { transform-origin: 60% 25%; animation: peck-left 5.5s ease-in-out infinite; }
body.fv-only.is-loop .fv_itachi { animation: none; }
body.fv-only.is-loop .fv_train { animation: none; }
body.fv-only.is-loop .fv_taiko { transform-origin: center; animation: pulse-taiko 2.6s ease-in-out infinite; }

body.fv-only.is-loop .fv_kusa2 { transform-origin: right bottom; animation: sway-grass 5.5s ease-in-out infinite; }
body.fv-only.is-loop .fv_catch { transform-origin: center; animation: pulse-catch 2.2s ease-in-out infinite; }

.top_return_img { animation: float-vertical 4.5s ease-in-out infinite; }

/* =========================
   Section Illustration Animations
   — New keyframes
========================= */

/* Crane: pivot swing from top-right corner */
@keyframes swing-crane {
	0%   { transform: rotate(0deg); }
	50%  { transform: rotate(3deg); }
	100% { transform: rotate(0deg); }
}

/* Fish jump / splash */
@keyframes jump-fish {
	0%   { transform: translateY(0) rotate(0deg); }
	30%  { transform: translateY(-8%) rotate(-4deg); }
	60%  { transform: translateY(2%) rotate(2deg); }
	100% { transform: translateY(0) rotate(0deg); }
}

/* Slow turtle crawl */
@keyframes crawl-slow {
	0%   { transform: translateX(0) translateY(0); }
	25%  { transform: translateX(-2%) translateY(-1%); }
	50%  { transform: translateX(0) translateY(0); }
	75%  { transform: translateX(2%) translateY(-1%); }
	100% { transform: translateX(0) translateY(0); }
}

/* Sumo tumble float */
@keyframes tumble-float {
	0%   { transform: translate(0, 0) rotate(0deg); }
	25%  { transform: translate(3%, -5%) rotate(4deg); }
	50%  { transform: translate(-2%, -8%) rotate(-3deg); }
	75%  { transform: translate(-4%, -3%) rotate(2deg); }
	100% { transform: translate(0, 0) rotate(0deg); }
}

/* Warrior fighting stance */
@keyframes fight-stance {
	0%   { transform: translateX(0) rotate(0deg); }
	20%  { transform: translateX(-3%) rotate(-2deg); }
	40%  { transform: translateX(1%) rotate(1deg); }
	60%  { transform: translateX(-2%) rotate(-1deg); }
	100% { transform: translateX(0) rotate(0deg); }
}

/* Train chugging */
@keyframes train-chug {
	0%   { transform: translateX(0) translateY(0); }
	10%  { transform: translateX(-1%) translateY(-1px); }
	20%  { transform: translateX(0) translateY(0); }
	30%  { transform: translateX(-1%) translateY(-1px); }
	40%  { transform: translateX(0) translateY(0); }
	100% { transform: translateX(0) translateY(0); }
}

/* Crab sideways scuttle */
@keyframes crab-scuttle {
	0%   { transform: translateX(0) rotate(0deg); }
	25%  { transform: translateX(5%) rotate(3deg); }
	50%  { transform: translateX(0) rotate(0deg); }
	75%  { transform: translateX(-5%) rotate(-3deg); }
	100% { transform: translateX(0) rotate(0deg); }
}

/* Bats hanging swing */
@keyframes hang-swing {
	0%   { transform: rotate(0deg); }
	30%  { transform: rotate(5deg); }
	70%  { transform: rotate(-5deg); }
	100% { transform: rotate(0deg); }
}

/* Frog breathing */
@keyframes frog-breathe {
	0%   { transform: scale(1) translateY(0); }
	50%  { transform: scale(1.04) translateY(-2%); }
	100% { transform: scale(1) translateY(0); }
}

/* Explorer looking around */
@keyframes explorer-look {
	0%   { transform: rotate(0deg) translateY(0); }
	30%  { transform: rotate(2deg) translateY(-1%); }
	60%  { transform: rotate(-2deg) translateY(0); }
	100% { transform: rotate(0deg) translateY(0); }
}

/* Owl hopping walk — hop along wave contour (crest → trough → crest), flip, return */
@keyframes owl-hop-walk {
	/* === Start on wave crest, facing left === */
	0%   { transform: translateX(0) translateY(0) scaleX(1); }

	/* Hop 1 peak — wave starts descending */
	4%   { transform: translateX(-12px) translateY(-10px) rotate(-5deg) scaleX(1); }
	/* Hop 1 land — on descending slope */
	8%   { transform: translateX(-24px) translateY(12px) rotate(0deg) scaleX(1); }

	/* Hop 2 peak — approaching trough */
	12%  { transform: translateX(-36px) translateY(2px) rotate(-5deg) scaleX(1); }
	/* Hop 2 land — wave trough (lowest point) */
	16%  { transform: translateX(-48px) translateY(22px) rotate(0deg) scaleX(1); }

	/* Hop 3 peak — ascending from trough */
	20%  { transform: translateX(-58px) translateY(6px) rotate(-5deg) scaleX(1); }
	/* Hop 3 land — on next crest */
	24%  { transform: translateX(-70px) translateY(14px) rotate(0deg) scaleX(1); }

	/* Pause — look around on far crest */
	34%  { transform: translateX(-70px) translateY(14px) rotate(0deg) scaleX(1); }

	/* Flip to face right */
	36%  { transform: translateX(-70px) translateY(14px) rotate(0deg) scaleX(-1); }
	40%  { transform: translateX(-70px) translateY(14px) rotate(0deg) scaleX(-1); }

	/* === Return journey, facing right === */
	/* Hop 4 peak — descending from crest back into trough */
	44%  { transform: translateX(-58px) translateY(0px) rotate(5deg) scaleX(-1); }
	/* Hop 4 land — trough */
	48%  { transform: translateX(-48px) translateY(22px) rotate(0deg) scaleX(-1); }

	/* Hop 5 peak — ascending from trough */
	52%  { transform: translateX(-36px) translateY(4px) rotate(5deg) scaleX(-1); }
	/* Hop 5 land — ascending slope */
	56%  { transform: translateX(-24px) translateY(12px) rotate(0deg) scaleX(-1); }

	/* Hop 6 peak — almost home */
	60%  { transform: translateX(-12px) translateY(-8px) rotate(5deg) scaleX(-1); }
	/* Hop 6 land — back on original crest */
	64%  { transform: translateX(0) translateY(0) rotate(0deg) scaleX(-1); }

	/* Pause at home */
	78%  { transform: translateX(0) translateY(0) rotate(0deg) scaleX(-1); }

	/* Flip back to face left */
	80%  { transform: translateX(0) translateY(0) rotate(0deg) scaleX(1); }

	/* Rest */
	100% { transform: translateX(0) translateY(0) rotate(0deg) scaleX(1); }
}

/* Wave bob for footer waves */
@keyframes wave-bob {
	0%   { transform: translateY(0) translateX(0); }
	50%  { transform: translateY(-4px) translateX(3px); }
	100% { transform: translateY(0) translateX(0); }
}

/* Flower/plant gentle sway */
@keyframes flower-sway {
	0%   { transform: rotate(0deg); }
	50%  { transform: rotate(2deg); }
	100% { transform: rotate(0deg); }
}

/* =========================
   Concept Section
========================= */
.cp_kumo1 { animation: drift-cloud 14s ease-in-out infinite; }
.cp_kumo2 { animation: drift-cloud 16s ease-in-out infinite; animation-delay: -5s; }
.cp_img1  { transform-origin: 0% 100%; animation: swing-crane 6s ease-in-out infinite; }   /* owl crane — pivot bottom-left */
.cp_img2  { animation: jump-fish 5s ease-in-out infinite; }                                 /* mahi-mahi fish */
.cp_img3  { animation: explorer-look 7s ease-in-out infinite; }                             /* explorer boy */
.cp_img4  { animation: swim 8s ease-in-out infinite; }                                      /* barracuda fish */
.cp_img5  { animation: swim 7s ease-in-out infinite; animation-delay: -3s; }                /* tropical fish */
.cp_img6  { animation: crawl-slow 10s ease-in-out infinite; }                               /* turtle */
.cp_img7  { animation: flutter 5.5s ease-in-out infinite; }                                 /* cicada */
.cp_img8  { animation: flutter 6s ease-in-out infinite; animation-delay: -2s; }             /* butterfly */
.cp_img9  { animation: playful-float 7s ease-in-out infinite; }                             /* mongoose */

/* =========================
   Movie Section
========================= */
.movie_komori { animation: float-vertical 5s ease-in-out infinite; }    /* bat */
.movie_tori   { transform-origin: 50% 100%; animation: peck-left 6s ease-in-out infinite; } /* egret */
.movie_kumo1  { animation: drift-cloud 12s ease-in-out infinite; }
.movie_kumo2  { animation: drift-cloud 11s ease-in-out infinite; animation-delay: -4s; }

/* =========================
   About Section
========================= */
.about_img1 { animation: tumble-float 8s ease-in-out infinite; }     /* sumo wrestlers */
.about_img2 { animation: fight-stance 5s ease-in-out infinite; }     /* warrior */

/* =========================
   Map Section
========================= */
.map_kumo1 { animation: drift-cloud 15s ease-in-out infinite; animation-delay: -3s; }
.map_kumo2 { animation: drift-cloud 13s ease-in-out infinite; animation-delay: -7s; }

/* =========================
   Key Visual Section
========================= */
.key_img1 { animation: none; }  /* man + flowers — composite image */
.key_img2 { animation: none; } /* taiko + person + hibiscus — composite image */
.key_img3 { animation: frog-breathe 4s ease-in-out infinite; }                               /* frog */
.key_img4 { animation: playful-float 7.5s ease-in-out infinite; }                            /* mongoose */
.key_img5 { animation: wiggle 5s ease-in-out infinite; }                                     /* stag beetle */
.key_img6 { animation: flutter 6s ease-in-out infinite; animation-delay: -1s; }              /* cicada */
.key_img7 { animation: none; }   /* egret + lizard — composite image */
.key_img8 { transform-origin: 50% 0%; animation: hang-swing 5s ease-in-out infinite; }      /* hanging bats */

/* =========================
   News Section
========================= */
.news_img1  { animation: swim 9s ease-in-out infinite; }              /* large fish */
.news_kumo1 { animation: drift-cloud 13s ease-in-out infinite; animation-delay: -2s; }
.news_kumo2 { animation: drift-cloud 11.5s ease-in-out infinite; animation-delay: -6s; }

/* =========================
   Facility Section
========================= */
.facility_img1 { animation: playful-float 7s ease-in-out infinite; }  /* mongoose */
.facility_img2 { animation: train-chug 2s ease-in-out infinite; }     /* train */
.facility_img3 { animation: wiggle 5.5s ease-in-out infinite; }       /* stag beetle */

/* =========================
   Archive Section
========================= */
.archive_img1 { animation: jump-fish 5.5s ease-in-out infinite; }                 /* jumping mahi-mahi */
.archive_img2 { animation: crab-scuttle 6s ease-in-out infinite; }                /* crab */
.archive_img3 { animation: swim 8s ease-in-out infinite; animation-delay: -2s; }  /* barracuda fish */
.archive_img4 { animation: swim 7s ease-in-out infinite; animation-delay: -4s; }  /* tropical fish */

/* =========================
   Footer
========================= */
.footer_img1  { animation: jump-fish 6s ease-in-out infinite; }        /* mahi-mahi */
.footer_img2  { animation: owl-hop-walk 12s ease-in-out infinite; } /* owl hopping along waves */
.footer_nami1 { animation: none; } /* composite image */
.footer_nami2 { animation: none; } /* composite image */

/* Fixed grass — no animation */

@media (prefers-reduced-motion: reduce) {
	body.fv-only .fv_logo,
	body.fv-only .fv_catch,
	body.fv-only .fv_mask,
	body.fv-only .fv_bottom,
	body.fv-only .fv_wave1,
	body.fv-only .fv_hana1,
	body.fv-only .fv_human1,
	body.fv-only .fv_human2,
	body.fv-only .fv_human3,
	body.fv-only .fv_itachi,
	body.fv-only .fv_komori1,
	body.fv-only .fv_kumo1,
	body.fv-only .fv_kumo2,
	body.fv-only .fv_kumo3,
	body.fv-only .fv_kumo4,
	body.fv-only .fv_kumo5,
	body.fv-only .fv_kusa2,
	body.fv-only .fv_mushi1,
	body.fv-only .fv_mushi2,
	body.fv-only .fv_mushi3,
	body.fv-only .fv_sakana1,
	body.fv-only .fv_sumo1,
	body.fv-only .fv_tori,
	body.fv-only .fv_train,
	body.fv-only .fv_taiko {
		opacity: 1;
		transform: none;
		transition: none;
		animation: none !important;
	}
	/* Section illustrations */
	.cp_kumo1, .cp_kumo2,
	.cp_img1, .cp_img2, .cp_img3, .cp_img4, .cp_img5,
	.cp_img6, .cp_img7, .cp_img8, .cp_img9,
	.movie_komori, .movie_tori, .movie_kumo1, .movie_kumo2,
	.about_img1, .about_img2,
	.map_kumo1, .map_kumo2,
	.key_img1, .key_img2, .key_img3, .key_img4, .key_img5,
	.key_img6, .key_img7, .key_img8,
	.news_img1, .news_kumo1, .news_kumo2,
	.facility_img1, .facility_img2, .facility_img3,
	.archive_img1, .archive_img2, .archive_img3, .archive_img4,
	.footer_img1, .footer_img2, .footer_nami1, .footer_nami2,
	.top_return_img {
		animation: none !important;
	}
}
