/* ================================================================
 *  Grid Gallery Viloer — v1.1.0
 *  Flex-row layout with percentage-based sizing.
 * ================================================================ */

/* ── Grid container ────────────────────────────────────────────── */
.ggv-grid {
    display: flex;
    flex-direction: column;
    /* Defaults — overridden by Elementor selectors via CSS vars */
    --ggv-r1: 50;
    --ggv-r1b1: 42;
    --ggv-r2b3: 55;
    --ggv-gap: 12px;
    --ggv-anim-dur: 600ms;
    --ggv-anim-ease: ease;
    gap: var(--ggv-gap);
    box-sizing: border-box;
}

/* ── Rows ──────────────────────────────────────────────────────── */
.ggv-row {
    display: flex;
    gap: var(--ggv-gap);
    min-height: 0; /* allow flex shrink properly */
}

/* Row heights by percentage — calc accounts for the gap between rows */
.ggv-row-1 {
    flex: 0 0 calc(var(--ggv-r1) * 1% - var(--ggv-gap) / 2);
}
.ggv-row-2 {
    flex: 0 0 calc((100 - var(--ggv-r1)) * 1% - var(--ggv-gap) / 2);
}

/* Box widths within rows — calc accounts for gap within the row */
.ggv-row-1 > .ggv-box-1 {
    flex: 0 0 calc(var(--ggv-r1b1) * 1% - var(--ggv-gap) / 2);
}
.ggv-row-1 > .ggv-box-2 {
    flex: 0 0 calc((100 - var(--ggv-r1b1)) * 1% - var(--ggv-gap) / 2);
}
.ggv-row-2 > .ggv-box-3 {
    flex: 0 0 calc(var(--ggv-r2b3) * 1% - var(--ggv-gap) / 2);
}
.ggv-row-2 > .ggv-box-4 {
    flex: 0 0 calc((100 - var(--ggv-r2b3)) * 1% - var(--ggv-gap) / 2);
}

/* ── Box base ──────────────────────────────────────────────────── */
.ggv-box {
    position: relative;
    overflow: hidden;
    border-radius: 16px;
    background-color: #F5F5F5;
    min-width: 0; /* flex child shrink fix */
}

/* ── Full image ────────────────────────────────────────────────── */
.ggv-box .ggv-full-img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center center;
}

/* ── Text + image box ──────────────────────────────────────────── */
.ggv-box .ggv-text-wrap {
    position: absolute;
    left: var(--ggv-tx, 5%);
    top: var(--ggv-ty, 10%);
    pointer-events: none;
    box-sizing: border-box;
}

.ggv-box .ggv-text {
    font-size: 2rem;
    font-weight: 700;
    line-height: 1.15;
    color: #1B3A2D;
    word-break: break-word;
    pointer-events: auto;
}

/* ── Overlay image ─────────────────────────────────────────────── */
.ggv-box .ggv-overlay-img {
    position: absolute;
    left: var(--ggv-ox, 60%);
    top: var(--ggv-oy, 50%);
    width: var(--ggv-os, 70%);
    height: auto;
    transform: translate(-50%, -50%)
               rotate(var(--ggv-or, 0deg))
               scaleX(var(--ggv-ofh, 1))
               scaleY(var(--ggv-ofv, 1));
    pointer-events: none;
    object-fit: contain;
}

/* ── Hover effects ─────────────────────────────────────────────── */
[data-hover="zoom"] .ggv-box .ggv-full-img {
    transition: transform 0.4s ease;
}
[data-hover="zoom"] .ggv-box:hover .ggv-full-img {
    transform: scale(1.05);
}

[data-hover="brighten"] .ggv-box {
    transition: filter 0.4s ease;
}
[data-hover="brighten"] .ggv-box:hover {
    filter: brightness(1.08);
}

[data-hover="shadow"] .ggv-box {
    transition: box-shadow 0.4s ease, transform 0.4s ease;
}
[data-hover="shadow"] .ggv-box:hover {
    box-shadow: 0 8px 24px rgba(0,0,0,0.12);
    transform: translateY(-3px);
}

/* ── Scroll animations ─────────────────────────────────────────── */
.ggv-has-anim {
    opacity: 0;
    transition-property: opacity, transform;
    transition-duration: var(--ggv-anim-dur);
    transition-timing-function: var(--ggv-anim-ease);
}

.ggv-has-anim[data-ggv-anim="fade-up"]    { transform: translateY(24px); }
.ggv-has-anim[data-ggv-anim="fade-in"]    { transform: none; }
.ggv-has-anim[data-ggv-anim="fade-left"]  { transform: translateX(24px); }
.ggv-has-anim[data-ggv-anim="fade-right"] { transform: translateX(-24px); }
.ggv-has-anim[data-ggv-anim="zoom-in"]    { transform: scale(0.92); }
.ggv-has-anim[data-ggv-anim="slide-up"]   { transform: translateY(40px); }

.ggv-has-anim.ggv-visible {
    opacity: 1;
    transform: none;
}

@media (prefers-reduced-motion: reduce) {
    .ggv-has-anim {
        opacity: 1 !important;
        transform: none !important;
        transition: none !important;
    }
}

/* In Elementor editor — always visible */
.elementor-editor-active .ggv-has-anim {
    opacity: 1 !important;
    transform: none !important;
}

/* ── Responsive: Tablet (≤1024px) ──────────────────────────────── */
@media (max-width: 1024px) {
    .ggv-box .ggv-text {
        font-size: 1.6rem;
    }
}

/* ── Responsive: Mobile (≤767px) ───────────────────────────────── */
@media (max-width: 767px) {
    .ggv-box .ggv-text {
        font-size: 1.4rem;
    }
}
