/* ============================================
   VIEW TRANSITIONS & MICRO-INTERACTIONS
   CSS View Transition API + Enhanced Card Effects
   ============================================ */

/* ============================================
   VIEW TRANSITION API (Cross-Document)
   ============================================ */
@view-transition {
    navigation: auto;
}

/* Default transition: crossfade */
::view-transition-old(root) {
    animation: vt-fade-out 0.25s ease-in forwards;
}

::view-transition-new(root) {
    animation: vt-fade-in 0.3s ease-out forwards;
}

@keyframes vt-fade-out {
    from {
        opacity: 1;
        transform: scale(1);
    }

    to {
        opacity: 0;
        transform: scale(0.98);
    }
}

@keyframes vt-fade-in {
    from {
        opacity: 0;
        transform: scale(1.02);
    }

    to {
        opacity: 1;
        transform: scale(1);
    }
}

/* Named transitions for key elements */
.site-header {
    view-transition-name: site-header;
}

.site-footer {
    view-transition-name: site-footer;
}

/* Header stays stable during transition */
::view-transition-old(site-header),
::view-transition-new(site-header) {
    animation: none;
}

/* ============================================
   CARD 3D TILT EFFECT
   ============================================ */
.card-tilt {
    --tilt-x: 0deg;
    --tilt-y: 0deg;
    --glow-x: 50%;
    --glow-y: 50%;
    transform-style: preserve-3d;
    perspective: 1000px;
    transition: transform 0.15s ease-out, box-shadow 0.3s ease;
}

.card-tilt:hover {
    transform: rotateX(var(--tilt-x)) rotateY(var(--tilt-y)) translateY(-6px);
    box-shadow:
        0 20px 40px rgba(0, 0, 0, 0.12),
        0 8px 16px rgba(0, 0, 0, 0.08);
}

/* Glow border effect on hover */
.card-tilt::after {
    content: '';
    position: absolute;
    inset: 0;
    border-radius: inherit;
    opacity: 0;
    transition: opacity 0.3s ease;
    pointer-events: none;
    background: radial-gradient(circle at var(--glow-x) var(--glow-y),
            rgba(var(--primary-rgb, 211, 47, 47), 0.15) 0%,
            transparent 60%);
    z-index: 1;
}

.card-tilt:hover::after {
    opacity: 1;
}

/* Subtle border glow */
.card-glow {
    position: relative;
    transition: box-shadow 0.35s ease;
}

.card-glow:hover {
    box-shadow:
        0 0 0 1px rgba(var(--primary-rgb, 211, 47, 47), 0.2),
        0 8px 30px rgba(var(--primary-rgb, 211, 47, 47), 0.1),
        0 4px 12px rgba(0, 0, 0, 0.08);
}

/* ============================================
   IMAGE ZOOM ON CARD HOVER
   ============================================ */
.card-img-zoom {
    overflow: hidden;
}

.card-img-zoom img {
    transition: transform 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94);
    will-change: transform;
}

.card-img-zoom:hover img,
.card-tilt:hover .card-img-zoom img {
    transform: scale(1.08);
}

/* ============================================
   SCROLL-TRIGGERED STAGGERED FADE-IN
   ============================================ */
.card-animate-on-scroll {
    opacity: 0;
    transform: translateY(30px);
    transition: opacity 0.5s ease, transform 0.5s ease;
}

.card-animate-on-scroll.is-visible {
    opacity: 1;
    transform: translateY(0);
}

/* Stagger children */
.stagger-container .card-animate-on-scroll:nth-child(1) {
    transition-delay: 0.05s;
}

.stagger-container .card-animate-on-scroll:nth-child(2) {
    transition-delay: 0.10s;
}

.stagger-container .card-animate-on-scroll:nth-child(3) {
    transition-delay: 0.15s;
}

.stagger-container .card-animate-on-scroll:nth-child(4) {
    transition-delay: 0.20s;
}

.stagger-container .card-animate-on-scroll:nth-child(5) {
    transition-delay: 0.25s;
}

.stagger-container .card-animate-on-scroll:nth-child(6) {
    transition-delay: 0.30s;
}

.stagger-container .card-animate-on-scroll:nth-child(7) {
    transition-delay: 0.35s;
}

.stagger-container .card-animate-on-scroll:nth-child(8) {
    transition-delay: 0.40s;
}

/* ============================================
   READING PROGRESS BAR (Enhanced)
   ============================================ */
.reading-progress-bar {
    position: fixed;
    top: 0;
    left: 0;
    width: 0%;
    height: 3px;
    background: linear-gradient(90deg,
            var(--primary-color, #D32F2F),
            color-mix(in srgb, var(--primary-color, #D32F2F), #ff6b6b 40%),
            var(--primary-color, #D32F2F));
    background-size: 200% 100%;
    animation: progress-shimmer 2s linear infinite;
    z-index: 9999;
    transition: width 0.1s linear;
    box-shadow: 0 0 10px rgba(var(--primary-rgb, 211, 47, 47), 0.5),
        0 0 4px rgba(var(--primary-rgb, 211, 47, 47), 0.3);
}

@keyframes progress-shimmer {
    0% {
        background-position: 200% 0;
    }

    100% {
        background-position: -200% 0;
    }
}

/* ============================================
   HEADLINE TEXT REVEAL ANIMATION
   ============================================ */
.text-reveal {
    overflow: hidden;
}

.text-reveal>* {
    transform: translateY(110%);
    transition: transform 0.6s cubic-bezier(0.16, 1, 0.3, 1);
}

.text-reveal.is-visible>* {
    transform: translateY(0);
}

/* Clip-path reveal from left */
.text-clip-reveal {
    clip-path: inset(0 100% 0 0);
    transition: clip-path 0.8s cubic-bezier(0.16, 1, 0.3, 1);
}

.text-clip-reveal.is-visible {
    clip-path: inset(0 0 0 0);
}

/* ============================================
   HERO PARALLAX EFFECT
   ============================================ */
.hero-parallax {
    position: relative;
    overflow: hidden;
    will-change: transform;
}

.hero-parallax img,
.hero-parallax .parallax-bg {
    transition: transform 0.1s linear;
    will-change: transform;
}

/* ============================================
   ENHANCED CARD ENTRANCE (Scale + Fade + Slide)
   ============================================ */
.card-entrance {
    opacity: 0;
    transform: translateY(40px) scale(0.95);
    transition: opacity 0.6s cubic-bezier(0.16, 1, 0.3, 1),
        transform 0.6s cubic-bezier(0.16, 1, 0.3, 1);
}

.card-entrance.is-visible {
    opacity: 1;
    transform: translateY(0) scale(1);
}

/* Slide from left variant */
.card-entrance-left {
    opacity: 0;
    transform: translateX(-40px) scale(0.95);
    transition: opacity 0.6s cubic-bezier(0.16, 1, 0.3, 1),
        transform 0.6s cubic-bezier(0.16, 1, 0.3, 1);
}

.card-entrance-left.is-visible {
    opacity: 1;
    transform: translateX(0) scale(1);
}

/* Stagger children with faster timing */
.stagger-fast>*:nth-child(1) {
    transition-delay: 0.02s;
}

.stagger-fast>*:nth-child(2) {
    transition-delay: 0.06s;
}

.stagger-fast>*:nth-child(3) {
    transition-delay: 0.10s;
}

.stagger-fast>*:nth-child(4) {
    transition-delay: 0.14s;
}

.stagger-fast>*:nth-child(5) {
    transition-delay: 0.18s;
}

.stagger-fast>*:nth-child(6) {
    transition-delay: 0.22s;
}

.stagger-fast>*:nth-child(7) {
    transition-delay: 0.26s;
}

.stagger-fast>*:nth-child(8) {
    transition-delay: 0.30s;
}

/* ============================================
   COUNTER / NUMBER ANIMATION
   ============================================ */
.counter-animate {
    display: inline-block;
    transition: transform 0.3s ease;
}

.counter-animate.counting {
    animation: counter-tick 0.3s ease;
}

@keyframes counter-tick {
    0% {
        transform: translateY(0);
        opacity: 1;
    }

    50% {
        transform: translateY(-8px);
        opacity: 0.4;
    }

    100% {
        transform: translateY(0);
        opacity: 1;
    }
}

/* ============================================
   LINK HOVER UNDERLINE EFFECT
   ============================================ */
.link-hover-slide {
    position: relative;
    text-decoration: none;
}

.link-hover-slide::after {
    content: '';
    position: absolute;
    bottom: -2px;
    left: 0;
    width: 0;
    height: 2px;
    background: currentColor;
    transition: width 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}

.link-hover-slide:hover::after {
    width: 100%;
}

/* ============================================
   BUTTON RIPPLE EFFECT
   ============================================ */
.btn-ripple {
    position: relative;
    overflow: hidden;
}

.btn-ripple .ripple-effect {
    position: absolute;
    border-radius: 50%;
    background: rgba(255, 255, 255, 0.35);
    transform: scale(0);
    animation: ripple-animation 0.6s ease-out forwards;
    pointer-events: none;
}

@keyframes ripple-animation {
    to {
        transform: scale(4);
        opacity: 0;
    }
}

/* ============================================
   CARD LIFT EFFECT (Simpler alternative)
   ============================================ */
.card-lift {
    transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1),
        box-shadow 0.3s ease;
}

.card-lift:hover {
    transform: translateY(-8px);
    box-shadow: 0 12px 28px rgba(0, 0, 0, 0.12),
        0 4px 8px rgba(0, 0, 0, 0.06);
}

/* ============================================
   CATEGORY BADGE SHINE
   ============================================ */
.badge-shine {
    position: relative;
    overflow: hidden;
}

.badge-shine::before {
    content: '';
    position: absolute;
    top: 0;
    left: -75%;
    width: 50%;
    height: 100%;
    background: linear-gradient(90deg,
            transparent,
            rgba(255, 255, 255, 0.3),
            transparent);
    transition: left 0.5s ease;
}

.badge-shine:hover::before {
    left: 125%;
}

/* ============================================
   FOCUS RING ANIMATION
   ============================================ */
.focus-ring:focus-visible {
    outline: none;
    box-shadow: 0 0 0 2px var(--bg-color, #fff),
        0 0 0 4px var(--primary-color, #D32F2F);
    transition: box-shadow 0.2s ease;
}

/* ============================================
   REDUCED MOTION PREFERENCE
   Always respect user preference
   ============================================ */
@media (prefers-reduced-motion: reduce) {

    *,
    *::before,
    *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
        scroll-behavior: auto !important;
    }

    .card-tilt:hover {
        transform: none;
    }

    .card-animate-on-scroll {
        opacity: 1;
        transform: none;
    }

    ::view-transition-old(root),
    ::view-transition-new(root) {
        animation: none;
    }
}