/*
Theme Name: Beaver Builder Child Theme
Theme URI: https://www.wpbeaverbuilder.com
Version: 1.0
Description: An example child theme that can be used as a starting point for custom development.
Author: The Beaver Builder Team
Author URI: https://www.fastlinemedia.com
template: bb-theme
*/

/* Add your custom styles here...Remember to change the Version number above! */ 

/**
 * Rain BDM — Save reading time as post meta on publish/update.
 * Stored as: rain_reading_time (e.g. "4 min read")
 * Display in BB Posts module via Custom Field: rain_reading_time
 */
function rain_save_reading_time( $post_id ) {
    if ( wp_is_post_revision( $post_id ) ) return;
    if ( get_post_type( $post_id ) !== 'post' ) return;
    $content = get_post_field( 'post_content', $post_id );
    $word_count = str_word_count( strip_tags( $content ) );
    $minutes = max( 1, (int) ceil( $word_count / 200 ) );
    update_post_meta( $post_id, 'rain_reading_time', $minutes . ' min read' );
}
add_action( 'save_post', 'rain_save_reading_time' );

function rain_append_reading_time( $display_name ) {
    if ( ! in_the_loop() || is_singular() ) return $display_name;
    $reading_time = get_post_meta( get_the_ID(), 'rain_reading_time', true );
    if ( $reading_time ) {
        return $display_name . '<span class="rain-card-read-time">' . esc_html( strtoupper( $reading_time ) ) . '</span>';
    }
    return $display_name;
}
add_filter( 'the_author', 'rain_append_reading_time' );

function rain_append_reading_time( $display_name ) {
    if ( ! in_the_loop() || is_singular() ) return $display_name;
    $reading_time = get_post_meta( get_the_ID(), 'rain_reading_time', true );
    if ( $reading_time ) {
        return $display_name . '<span class="rain-card-read-time">' . esc_html( strtoupper( $reading_time ) ) . '</span>';
    }
    return $display_name;
}
add_filter( 'the_author', 'rain_append_reading_time' );

/* ============================================================
   ANIMATION TIMING PATCH v1
   Fixes cluttered/out-of-sync animations on fast scroll.
   Applied: 2026-05-14
   ============================================================ */

/* --- BB fl-animation duration override (all sections) ---
   Reduces BB-managed element animations from 0.8s to 0.4s.
   Applies to headings, eyebrows, and body text in all rows.  */
.fl-animated.fl-slide-in-up {
  animation-duration: 0.4s !important;
}
.fl-animated.fl-fade-up {
  animation-duration: 0.4s !important;
}


/* --- Problems section (Row 3) ---
   Before: 0.65s dur, delays 1.0s / 1.3s / 1.6s → total 2.25s
   After:  0.4s dur,  delays 0.2s / 0.35s / 0.5s → total 0.9s  */

.rain-card-problem-1 .fl-col-content,
.rain-card-problem-2 .fl-col-content,
.rain-card-problem-3 .fl-col-content {
  transition: opacity 0.4s, transform 0.4s, background 0.25s, box-shadow 0.2s;
}
.rain-card-problem-1.rain-card-visible .fl-col-content {
  transition: opacity 0.4s 0.2s, transform 0.4s 0.2s, background 0.25s, box-shadow 0.2s;
}
.rain-card-problem-2.rain-card-visible .fl-col-content {
  transition: opacity 0.4s 0.35s, transform 0.4s 0.35s, background 0.25s, box-shadow 0.2s;
}
.rain-card-problem-3.rain-card-visible .fl-col-content {
  transition: opacity 0.4s 0.5s, transform 0.4s 0.5s, background 0.25s, box-shadow 0.2s;
}


/* --- Services section (Row 4) ---
   Before: 0.65s dur, individual delays from 1.25s to 2.65s → total 3.3s
   After:  0.4s dur, two groups (cards 1–4 together, cards 5–8 together) → total 0.85s

   Cards 1–4 animate as a group (row 1 of the grid)
   Cards 5–8 animate as a group (row 2 of the grid), 0.25s later  */

[class*="rain-card-way-"] .fl-col-content {
  transition: opacity 0.4s, transform 0.4s, background 0.3s;
}
.rain-card-way-1.rain-card-visible .fl-col-content,
.rain-card-way-2.rain-card-visible .fl-col-content,
.rain-card-way-3.rain-card-visible .fl-col-content,
.rain-card-way-4.rain-card-visible .fl-col-content {
  transition: opacity 0.4s 0.2s, transform 0.4s 0.2s, background 0.3s;
}
.rain-card-way-5.rain-card-visible .fl-col-content,
.rain-card-way-6.rain-card-visible .fl-col-content,
.rain-card-way-7.rain-card-visible .fl-col-content,
.rain-card-way-8.rain-card-visible .fl-col-content {
  transition: opacity 0.4s 0.45s, transform 0.4s 0.45s, background 0.3s;
}


/* --- Differentiators section (Row 5) ---
   Before: 0.8s dur, delays 2.0s / 2.2s / 2.4s / 2.6s → total 3.4s
   After:  0.45s dur, delays 0.2s / 0.35s / 0.5s / 0.65s → total 1.1s  */

.rain-diff-block-1.rain-diff-visible,
.rain-diff-text-1.rain-diff-visible {
  transition: opacity 0.45s 0.2s, transform 0.45s 0.2s;
}
.rain-diff-block-2.rain-diff-visible,
.rain-diff-text-2.rain-diff-visible {
  transition: opacity 0.45s 0.35s, transform 0.45s 0.35s;
}
.rain-diff-block-3.rain-diff-visible,
.rain-diff-text-3.rain-diff-visible {
  transition: opacity 0.45s 0.5s, transform 0.45s 0.5s;
}
.rain-diff-block-4.rain-diff-visible,
.rain-diff-text-4.rain-diff-visible {
  transition: opacity 0.45s 0.65s, transform 0.45s 0.65s;
}
// Rain Single Post — Sidebar Freeze
function rain_sidebar_freeze_js() {
    if ( ! is_singular( 'post' ) ) return;
    ?>
    <script>
    (function () {
      'use strict';
      function initBlogV5() {
        var sidebarEl  = document.querySelector('#rain-sticky-sidebar');
        var tocEl      = document.querySelector('#ez-toc-container');
        var relatedRow = document.querySelector('.rain-related-row');
        if (!sidebarEl || !relatedRow) return;
        new IntersectionObserver(function(entries) {
          entries.forEach(function(entry) {
            if (entry.isIntersecting) {
              var docTop = (window.scrollY || window.pageYOffset) + 120;
              sidebarEl.style.setProperty('position', 'absolute', 'important');
              sidebarEl.style.setProperty('top', docTop + 'px', 'important');
              if (tocEl) {
                tocEl.style.setProperty('position', 'relative', 'important');
                tocEl.style.setProperty('top', 'auto', 'important');
              }
            } else if (entry.boundingClientRect.top > 0) {
              sidebarEl.style.setProperty('position', 'fixed', 'important');
              sidebarEl.style.setProperty('top', '120px', 'important');
              if (tocEl) {
                tocEl.style.removeProperty('position');
                tocEl.style.removeProperty('top');
              }
            }
          });
        }, { threshold: 0 }).observe(relatedRow);
      }
      setTimeout(initBlogV5, 600);
    }());
    </script>
    <?php
}
add_action( 'wp_footer', 'rain_sidebar_freeze_js', 20 );