/**
 * NPC ABC Theme - Animations
 * テーマ別アニメーション
 */

/* ==========================================================================
   AOS (Animate On Scroll) Styles
   ========================================================================== */

/* AOS初期化済み要素: ふわっと表示 */
[data-aos].aos-init {
    opacity: 0;
    transition-property: opacity, transform;
    transition-duration: 0.8s;
    transition-timing-function: cubic-bezier(0.25, 0.1, 0.25, 1);
}

[data-aos="fade-up"].aos-init {
    transform: translateY(30px);
}

[data-aos="fade-down"].aos-init {
    transform: translateY(-30px);
}

[data-aos="fade-left"].aos-init {
    transform: translateX(30px);
}

[data-aos="fade-right"].aos-init {
    transform: translateX(-30px);
}

[data-aos="zoom-in"].aos-init {
    transform: scale(0.9);
}

[data-aos].aos-animate {
    opacity: 1;
    transform: translateY(0) translateX(0) scale(1);
}


/* ==========================================================================
   Business Theme Animations
   ========================================================================== */

/* Business shapeはstyle.cssで定義済み（hero-bg-business .shape-1〜4）
   ここでは重複定義しない */


/* Gamerテーマの装飾アニメーションはすべてstyle.cssで定義済み
   hero-bg-gamer .cyber-grid / .neon-line-h-1~v-2 / .glow-orb / .scanlines
   ここでは重複定義しない（後から読み込まれてstyle.cssを上書きするため） */


/* Cosmeテーマの装飾アニメーションはすべてstyle.cssで定義済み
   hero-bg-cosme .bubble / .gradient-blob / .deco-circle / .deco-square
   ここでは重複定義しない */

/* sparkleのキーフレームだけ残す（style.cssに未定義の場合） */
@keyframes sparkle {
    0%, 100% {
        transform: scale(0) rotate(0deg);
        opacity: 0;
    }
    50% {
        transform: scale(1) rotate(180deg);
        opacity: 1;
    }
}


/* ==========================================================================
   Shared Animations
   ========================================================================== */

/* Scroll indicator */
.scroll-indicator {
    animation: bounce 2s ease-in-out infinite;
}

@keyframes bounce {
    0%, 100% { transform: translateY(0); }
    50% { transform: translateY(10px); }
}

.scroll-dot {
    animation: scroll-dot 2s ease-in-out infinite;
}

@keyframes scroll-dot {
    0% { top: 0; opacity: 1; }
    100% { top: 100%; opacity: 0; }
}

/* Button hover effects */
.btn {
    transition: all 0.3s ease;
}

.btn:hover {
    transform: translateY(-2px);
}

[data-theme="gamer"] .btn:hover {
    transform: none;
}

.btn-primary:hover {
    box-shadow: 0 10px 30px rgba(var(--color-primary-rgb), 0.3);
}

/* Card hover effects */
.service-card,
.work-card,
.blog-card {
    transition: transform 0.3s ease, box-shadow 0.3s ease;
}

/* hover時の浮き上がりはテーマごとにstyle.cssで個別制御 */

/* Skill bar animation */
.skill-progress {
    width: 0;
    transition: width 1.5s ease-out;
}

/* Header transitions */
.header {
    transition: transform 0.3s ease, background-color 0.3s ease, backdrop-filter 0.3s ease;
}

.header-hidden {
    transform: translateY(-100%);
}

.header-scrolled {
    background-color: var(--color-surface);
    backdrop-filter: blur(10px);
}

/* Work card overlay */
.work-overlay {
    opacity: 0;
    transition: opacity 0.3s ease;
}

.work-card:hover .work-overlay {
    opacity: 1;
}

/* Blog card image zoom */
.blog-image img {
    transition: transform 0.5s ease;
}

.blog-card:hover .blog-image img {
    transform: scale(1.05);
}

/* Form input focus */
.form-input,
.form-select,
.form-textarea {
    transition: border-color 0.3s ease, box-shadow 0.3s ease;
}

.form-input:focus,
.form-select:focus,
.form-textarea:focus {
    border-color: var(--color-primary);
    box-shadow: 0 0 0 3px rgba(var(--color-primary-rgb), 0.1);
}

/* Theme switcher button */
.theme-btn {
    transition: all 0.3s ease;
}

.theme-btn:hover {
    transform: scale(1.1);
}

.theme-btn.active {
    transform: scale(1.15);
}

/* Mobile menu animation */
.header-nav {
    transition: transform 0.3s ease, opacity 0.3s ease;
}

@media (max-width: 768px) {
    .header-nav {
        transform: translateX(100%);
        opacity: 0;
    }
    
    .header-nav.nav-open {
        transform: translateX(0);
        opacity: 1;
    }
}

/* Hamburger menu animation */
.mobile-menu-toggle span {
    transition: transform 0.3s ease, opacity 0.3s ease;
}

.mobile-menu-toggle.active span:nth-child(1) {
    transform: rotate(45deg) translate(5px, 5px);
}

.mobile-menu-toggle.active span:nth-child(2) {
    opacity: 0;
}

.mobile-menu-toggle.active span:nth-child(3) {
    transform: rotate(-45deg) translate(7px, -6px);
}


/* ==========================================================================
   Fade In Animation (Scroll)
   ========================================================================== */

.fade-in-element {
    opacity: 0;
    transform: translateY(30px);
    transition: opacity 0.6s ease, transform 0.6s ease;
}

.fade-in-visible {
    opacity: 1;
    transform: translateY(0);
}

/* Staggered children animation */
.fade-in-visible .service-card,
.fade-in-visible .work-card,
.fade-in-visible .process-step,
.fade-in-visible .blog-card,
.fade-in-visible .stat-item,
.fade-in-visible .value-card {
    animation: fade-up 0.6s ease forwards;
}

.fade-in-visible .service-card:nth-child(1),
.fade-in-visible .work-card:nth-child(1),
.fade-in-visible .stat-item:nth-child(1) { animation-delay: 0.1s; }
.fade-in-visible .service-card:nth-child(2),
.fade-in-visible .work-card:nth-child(2),
.fade-in-visible .stat-item:nth-child(2) { animation-delay: 0.2s; }
.fade-in-visible .service-card:nth-child(3),
.fade-in-visible .work-card:nth-child(3),
.fade-in-visible .stat-item:nth-child(3) { animation-delay: 0.3s; }
.fade-in-visible .service-card:nth-child(4),
.fade-in-visible .work-card:nth-child(4),
.fade-in-visible .stat-item:nth-child(4) { animation-delay: 0.4s; }
.fade-in-visible .service-card:nth-child(5),
.fade-in-visible .work-card:nth-child(5) { animation-delay: 0.5s; }
.fade-in-visible .service-card:nth-child(6),
.fade-in-visible .work-card:nth-child(6) { animation-delay: 0.6s; }

@keyframes fade-up {
    from {
        opacity: 0;
        transform: translateY(20px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

/* 上部のdata-aosセクションで統一済み — 重複定義を削除 */


/* ==========================================================================
   Reduced Motion
   ========================================================================== */

/* prefers-reduced-motion: 装飾アニメーションのみ停止（UIトランジションは維持） */
@media (prefers-reduced-motion: reduce) {
    .shape,
    .bubble,
    .orb,
    .sparkle,
    .neon-line,
    /* .cyber-grid はグリッド背景の流れなので停止しない */
    .glitch-overlay,
    .scroll-indicator,
    .geo-animate,
    .float-soft {
        animation: none !important;
    }

    .fade-in-element {
        opacity: 1;
        transform: none;
    }
}
