/* ==========================================================================
   SoftKeys — Layout & polish (Porto theme) — VARIANTE ALT
   Ficheiro: softkeys-layout-alt.css — v2.3.4-alt — 2026-07-07 — FINAL
   ==========================================================================

   MAPA DE DISPOSITIVOS — o que se aplica, onde e quando
   --------------------------------------------------------------------------

   MOBILE / TABLET  (<992px)
   • Layout: 100% original do tema em TODO o site (conta incluída),
     com UMA exceção: carrinho VAZIO tem sticky footer e conteúdo
     centrado verticalmente (breadcrumb fica no sítio; carrinho com
     produtos fica intocado).
   • Aplica-se apenas cosmética:
     - Caixa "Total no carrinho" (paddings, cantos, linha fantasma)
     - Secção 7: cartão Descarregamentos (order-received e
       ver-encomenda) com botão dark full-width e células empilhadas
     - Secção 8: nota de encomenda (cantos, contorno, espaçamentos)

   LAPTOPS  (992–1599px)
   • Área de CONTA (apenas): sticky footer, centragem por auto
     margins, cadeia de larguras, goteira da navegação, e elevações
     por vista SUAVIZADAS (-2vh face ao monitor, via custom
     properties: -8/-8/-8/-8/-3/0).
   • Carrinho VAZIO: sticky footer + conteúdo centrado (com
     produtos: intocado).
   • Resto do site: layout 100% original do tema.
   • Cosmética das secções 7 e 8 (variante desktop: botão à direita).
   • ZOOM 0.85 apenas na sub-gama 1530–1599px E com rato
     (hover:hover + pointer:fine — tablets táteis na mesma largura
     ficam de fora). Alvo: laptops Windows Full HD @ 125% = 1536px
     CSS. Macs típicos (1440/1512px CSS) ficam fora da gama.
     A compensação de altura dos sticky footers (100vh ÷ fator)
     vive nas próprias secções B e B2 via var(--z, 1): fora da
     gama de zoom --z não existe e o fallback 1 devolve 100vh.
     Nesta sub-gama, o carrinho COM produtos também tem sticky
     footer (sem centragem; layout interno intocado).

   MONITORES  (≥1600px)
   • Tudo o de cima (conta com elevações completas: -10/-10/-10/
     -10/-5/0) MAIS o layout geral:
     - Sticky footer global em todas as páginas
     - Centragem vertical: Contacto, Termos, 404, carrinho vazio
     - Carrinho: terço superior, colunas 60/40, alargado a 1470px
     - Order-received: sticky footer com colunas intactas
     - Produto/loja/categorias: excluídos (100% originais, sempre)

   --------------------------------------------------------------------------
   Diferenças face ao softkeys-layout.css (v1.9.0): zoom em laptops
   Windows; conta ativa a partir de 992px (na v1.9.0 só ≥1600px);
   carrinho vazio com sticky footer em todas as gamas.
   v2.3.4-alt: compensação do zoom deixou de estar duplicada na
   secção 0 (onde perdia o cascade para as redeclarações de
   min-height:100vh das secções B/B2, com o mesmo seletor e
   especificidade — motivo pelo qual só funcionava injetada no fim,
   via Stylus/Additional CSS). Agora B e B2 usam diretamente
   min-height: calc(100vh / var(--z, 1)) — independente da ordem.
   Carregado via Code Snippets (wp_enqueue_style, prioridade 99).
   Para remover: desativar o snippet no Code Snippets.
   ========================================================================== */

/* ===== Cosmética global (todas as resoluções) ===== */

.woocommerce-cart .cart_totals .card {
    padding: 2rem;
    border-radius: 12px;
    border-color: #ececec;
}
.woocommerce-cart .cart-total th,
.woocommerce-cart .cart-total td {
    padding: 0.9rem 0;
}
.woocommerce-cart .cart-total tr.border-bottom-0 {
    display: none;
}
.woocommerce-cart .wc-proceed-to-checkout > .btn {
    margin-top: 1.75rem;
}
.cart-empty-page .empty-cart-icon,
.wc-empty-cart-message {
    margin-bottom: 1.5rem;
}

/* ==========================================================================
   0. Zoom — laptops Windows típicos (Full HD @ 125% = 1536px CSS)
   Réplica do "Ctrl -" a 85%, apenas nesta gama e com rato
   (hover+pointer:fine exclui tablets táteis na mesma largura).
   COMPENSAÇÃO: 100vh dentro de zoom renderiza a 85% da altura real.
   O --z definido aqui herda para os .page-wrapper; as secções B e
   B2 compensam com min-height: calc(100vh / var(--z, 1)) — fora
   desta gama --z não existe e o fallback 1 devolve 100vh normal.
   (Não redeclarar min-height aqui: com o mesmo seletor, as regras
   posteriores de B/B2 ganhariam o cascade e anulariam a
   compensação.)
   ========================================================================== */
@media (min-width: 1530px) and (max-width: 1599px) and (hover: hover) and (pointer: fine) {
    body {
        --z: 0.85;
        zoom: var(--z);
    }

    /* Carrinho COM produtos: sticky footer, sem centragem
       (#main mantém o display do tema; só cresce como flex item).
       Este bloco só existe nesta gama, por isso o min-height
       compensado pode viver aqui sem conflito de cascade. */
    .woocommerce-cart .page-wrapper {
        display: flex;
        flex-direction: column;
        min-height: calc(100vh / var(--z, 1));
    }
    .woocommerce-cart .page-wrapper #main {
        flex: 1 0 auto;
    }
    .woocommerce-cart .page-wrapper .footer-wrapper,
    .woocommerce-cart .page-wrapper #footer {
        flex-shrink: 0;
    }
}

/* ==========================================================================
   B. Conta — layout completo em laptops E monitores (≥992px)
   Mobile: 100% original do tema.
   ========================================================================== */
@media (min-width: 992px) {

    /* --- Sticky footer da conta (laptops + monitores) ---
       min-height compensado pelo zoom da secção 0 quando --z
       existe (gama 1530–1599px); caso contrário var(--z, 1) = 100vh. */
    body.woocommerce-account .page-wrapper {
        display: flex;
        flex-direction: column;
        min-height: calc(100vh / var(--z, 1));
    }
    body.woocommerce-account .page-wrapper #main {
        flex: 1 0 auto; /* cresce e empurra o footer (sobreposto pela 6.2) */
    }
    body.woocommerce-account .page-wrapper .footer-wrapper,
    body.woocommerce-account .page-wrapper #footer {
        flex-shrink: 0;
    }

    /* --- 5. Conta, visitante: separador Login | Registo + centragem --- */
    body.woocommerce-account:not(.logged-in) .page-wrapper #main {
        display: flex;
        flex-direction: column;
        justify-content: center;
        padding-bottom: 6vh;
    }
    body.woocommerce-account #customer_login > .u-column1,
    body.woocommerce-account #customer_login > div:first-child {
        border-right: 1px solid #e7e7e7;
        padding-right: 3rem;
    }
    body.woocommerce-account #customer_login > .u-column2,
    body.woocommerce-account #customer_login > div:last-child {
        padding-left: 3rem;
    }

    /* --- 6. Conta, autenticado --- */

    /* 6.1 Largura total em toda a cadeia até ao .woocommerce */
    body.woocommerce-account #main:has(.woocommerce-MyAccount-navigation),
    body.woocommerce-account #main:has(.woocommerce-MyAccount-navigation) .main-content,
    body.woocommerce-account #main:has(.woocommerce-MyAccount-navigation) #content,
    body.woocommerce-account #main:has(.woocommerce-MyAccount-navigation) article,
    body.woocommerce-account #main:has(.woocommerce-MyAccount-navigation) .page-content,
    body.woocommerce-account .woocommerce {
        width: 100% !important;
        max-width: none !important;
    }

    /* 6.2 Centragem por auto margins + respiração mínima */
    body.woocommerce-account .page-wrapper #main:has(.woocommerce-MyAccount-navigation) {
        display: block;
        flex: 0 0 auto;
        margin-top: auto;
        margin-bottom: auto;
        padding-top: clamp(2rem, 5vh, 4rem);
        padding-bottom: clamp(2rem, 4vh, 3.5rem);
    }
    body.woocommerce-account .page-wrapper:has(.woocommerce-MyAccount-navigation) .footer-wrapper,
    body.woocommerce-account .page-wrapper:has(.woocommerce-MyAccount-navigation) #footer {
        margin-top: 0;
    }

    /* 6.3 Elevação (centro ótico) por vista — deteção pela navegação.
       Valores por CSS custom properties:
       - fallback = monitores (≥1600px)
       - override de laptops (<1600px) no fim desta secção
       Gama recomendada: -3vh a -15vh. 0vh = centragem pura. */
    body.woocommerce-account .page-wrapper #main:has(.woocommerce-MyAccount-navigation-link--orders.is-active) {
        transform: translateY(var(--lift-orders, -10vh));
    }
    body.woocommerce-account .page-wrapper #main:has(.woocommerce-MyAccount-navigation-link--downloads.is-active) {
        transform: translateY(var(--lift-downloads, -10vh));
    }
    body.woocommerce-account .page-wrapper #main:has(.woocommerce-MyAccount-navigation-link--edit-address.is-active) {
        transform: translateY(var(--lift-address, -10vh));
    }
    body.woocommerce-account .page-wrapper #main:has(.woocommerce-MyAccount-navigation-link--payment-methods.is-active) {
        transform: translateY(var(--lift-payment, -10vh));
    }
    body.woocommerce-account .page-wrapper #main:has(.woocommerce-MyAccount-navigation-link--dashboard.is-active) {
        transform: translateY(var(--lift-dashboard, -5vh));
    }
    body.woocommerce-account .page-wrapper #main:has(.woocommerce-MyAccount-navigation-link--edit-account.is-active) {
        transform: translateY(var(--lift-account, 0vh));
    }
    /* Blindagem: Ver encomenda nunca eleva. Manter no fim da 6.3. */
    body.woocommerce-account.woocommerce-view-order .page-wrapper #main {
        transform: none !important;
    }

    /* Laptops (992–1599px): elevações 2vh mais suaves por vista */
    @media (max-width: 1599px) {
        body.woocommerce-account {
            --lift-orders: -8vh;
            --lift-downloads: -8vh;
            --lift-address: -8vh;
            --lift-payment: -8vh;
            --lift-dashboard: -3vh;
            --lift-account: 0vh;
        }
    }

    /* 6.4 Goteira entre a navegação e o conteúdo */
    body.woocommerce-account .woocommerce-MyAccount-navigation {
        padding-right: 3.5rem;
        border-right: 1px solid #e7e7e7;
    }
    body.woocommerce-account .woocommerce-MyAccount-content {
        padding-left: 1.5rem;
    }

} /* fim @media (min-width: 992px) — conta */

/* ==========================================================================
   B2. Carrinho VAZIO — sticky footer + conteúdo centrado
   em mobile e laptops (<1600px)
   Detetado via :has(); o carrinho COM produtos fica 100% original
   (exceto na gama de zoom — ver secção 0).
   O breadcrumb vive FORA do #main (irmão no .page-wrapper), pelo
   que a centragem do #main não lhe mexe.
   Em ≥1600px o layout global (bloco C) assume, com a sua centragem.
   min-height compensado pelo zoom via var(--z, 1) — ver secção 0.
   ========================================================================== */
@media (max-width: 1599px) {
    .woocommerce-cart .page-wrapper:has(.cart-empty, .wc-empty-cart-message) {
        display: flex;
        flex-direction: column;
        min-height: calc(100vh / var(--z, 1));
    }
    .woocommerce-cart .page-wrapper:has(.cart-empty, .wc-empty-cart-message) #main {
        flex: 1 0 auto;
        display: flex;
        flex-direction: column;
        justify-content: center;
        padding-bottom: 4vh; /* centro ótico */
    }
    .woocommerce-cart .page-wrapper:has(.cart-empty, .wc-empty-cart-message) .footer-wrapper,
    .woocommerce-cart .page-wrapper:has(.cart-empty, .wc-empty-cart-message) #footer {
        flex-shrink: 0;
    }
}

/* ==========================================================================
   C. Layout geral — APENAS monitores (≥1600px), como na v1.9.0
   ========================================================================== */
@media (min-width: 1600px) {

    /* --- 1. Sticky footer global --- */
    .page-wrapper {
        display: flex;
        flex-direction: column;
        min-height: 100vh;
    }
    .page-wrapper #main {
        flex: 1 0 auto;
        display: flex;
        flex-direction: column;
        justify-content: flex-start;
    }
    .page-wrapper .footer-wrapper,
    .page-wrapper #footer {
        flex-shrink: 0;
        margin-top: auto;
    }
    /* Na conta, o margin-top:auto do footer é anulado pela 6.2
       quando há sidebar; nas vistas de visitante não interfere. */

    /* --- 2. Templates com layout interno próprio --- */
    .single-product .page-wrapper,
    .post-type-archive-product .page-wrapper,
    .tax-product_cat .page-wrapper {
        display: block;
        min-height: 0;
    }
    .single-product .page-wrapper #main,
    .post-type-archive-product .page-wrapper #main,
    .tax-product_cat .page-wrapper #main {
        display: block;
        flex: none;
    }

    /* Order received: sticky footer real, layout interno intocado */
    .woocommerce-order-received .page-wrapper #main {
        display: block;
        flex: 1 0 auto;
    }
    .woocommerce-order-received .page-wrapper #main,
    .woocommerce-order-received #main .main-content-wrap,
    .woocommerce-order-received #main .main-content,
    .woocommerce-order-received #main #content,
    .woocommerce-order-received #main article,
    .woocommerce-order-received #main .page-content,
    .woocommerce-order-received #main .woocommerce {
        width: 100% !important;
        max-width: none !important;
    }

    /* --- 3. Centragem vertical: páginas de vista única --- */
    body.page-id-2124 .page-wrapper #main,                        /* Contacto */
    body.page-id-2260 .page-wrapper #main,                        /* Termos */
    .woocommerce-cart .page-wrapper #main:has(.cart-empty, .wc-empty-cart-message) {
        justify-content: center;
        padding-bottom: 6vh;
    }
    body.page-id-2260 .page-wrapper #main {
        padding-bottom: 2vh;
    }

    /* 404: centrada por auto margins */
    .error404 .page-wrapper #main {
        display: block;
        flex: 0 0 auto;
        margin-top: auto;
        margin-bottom: auto;
        padding-bottom: 4vh;
    }
    .error404 .page-wrapper .footer-wrapper,
    .error404 .page-wrapper #footer {
        margin-top: 0;
    }

    /* --- 4. Carrinho: terço superior + colunas 60/40 + alargamento --- */
    .woocommerce-cart .woo-page-header {
        margin-top: clamp(2.5rem, 8vh, 6.5rem);
        margin-bottom: clamp(1.5rem, 3.5vh, 3rem);
    }
    .woocommerce-cart .cart-v2 > .row {
        margin-bottom: 0 !important;
        padding-bottom: 0 !important;
    }
    .woocommerce-cart .cart-v2 .col-lg-8 {
        flex: 0 0 60%;
        max-width: 60%;
    }
    .woocommerce-cart .cart-v2 .col-lg-4 {
        flex: 0 0 40%;
        max-width: 40%;
        padding-left: 2rem;
    }
    .woocommerce-cart #main.boxed,
    .woocommerce-cart #main > .container {
        width: min(1470px, 94vw) !important;
        max-width: none !important;
    }

} /* fim @media (min-width: 1600px) */

/* ==========================================================================
   7. Descarregamentos — order-received E ver-encomenda
   (todas as resoluções)
   ========================================================================== */

:is(.woocommerce-order-received, .woocommerce-view-order) .woocommerce-order-downloads {
    background: #fafafa;
    border: 1px solid #ececec;
    border-radius: 12px;
    padding: 1.75rem 2rem;
    margin: 2.5rem 0;
}
:is(.woocommerce-order-received, .woocommerce-view-order) .woocommerce-order-downloads__title {
    margin-top: 0 !important;
    margin-bottom: 1.25rem;
    font-size: 1.05rem;
    font-weight: 600;
    text-transform: none;
    letter-spacing: 0;
}
:is(.woocommerce-order-received, .woocommerce-view-order) .woocommerce-order-downloads *:not(.button) {
    background: transparent !important;
    box-shadow: none !important;
}
:is(.woocommerce-order-received, .woocommerce-view-order) .download-remaining,
:is(.woocommerce-order-received, .woocommerce-view-order) .download-expires {
    display: none !important;
}
:is(.woocommerce-order-received, .woocommerce-view-order) .woocommerce-table--order-downloads thead {
    display: none !important;
}
:is(.woocommerce-order-received, .woocommerce-view-order) .woocommerce-table--order-downloads td::before {
    display: none !important;
}
:is(.woocommerce-order-received, .woocommerce-view-order) .woocommerce-table--order-downloads {
    margin-bottom: 0;
    border: 0;
}
:is(.woocommerce-order-received, .woocommerce-view-order) .woocommerce-table--order-downloads td {
    padding: 0.9rem 0;
    vertical-align: middle;
    border: 0;
}
:is(.woocommerce-order-received, .woocommerce-view-order) .download-product a {
    font-weight: 600;
    color: inherit;
}
:is(.woocommerce-order-received, .woocommerce-view-order) .woocommerce-MyAccount-downloads-file.button {
    background: #212529 !important;
    color: #fff !important;
    border: 0;
    border-radius: 8px;
    padding: 0.55rem 1.1rem !important;
    font-size: 0.82rem;
    font-weight: 600;
    letter-spacing: 0.02em;
    transition: background 0.2s ease, transform 0.15s ease;
}
:is(.woocommerce-order-received, .woocommerce-view-order) .woocommerce-MyAccount-downloads-file.button:hover {
    background: #000 !important;
    transform: translateY(-1px);
}
@media (min-width: 992px) {
    :is(.woocommerce-order-received, .woocommerce-view-order) .download-file {
        text-align: right !important;
    }
    :is(.woocommerce-order-received, .woocommerce-view-order) .woocommerce-table--order-downloads tbody tr + tr td {
        border-top: 1px solid #ececec;
    }
}
@media (max-width: 991px) {
    :is(.woocommerce-order-received, .woocommerce-view-order) .woocommerce-order-downloads {
        padding: 1.25rem 1.25rem 1.5rem;
        margin: 1.75rem 0;
    }
    :is(.woocommerce-order-received, .woocommerce-view-order) .woocommerce-table--order-downloads tbody tr {
        border: 0 !important;
        padding: 0 !important;
        margin: 0 !important;
        display: block;
    }
    :is(.woocommerce-order-received, .woocommerce-view-order) .woocommerce-table--order-downloads td {
        display: block;
        width: 100%;
        text-align: left !important;
        padding: 0 !important;
        border: 0 !important;
    }
    :is(.woocommerce-order-received, .woocommerce-view-order) .woocommerce-table--order-downloads td.download-product {
        padding-bottom: 0.75rem !important;
    }
    :is(.woocommerce-order-received, .woocommerce-view-order) .woocommerce-table--order-downloads tbody tr + tr {
        margin-top: 1.5rem !important;
        padding-top: 1.5rem !important;
        border-top: 1px solid #e4e4e4 !important;
    }
    :is(.woocommerce-order-received, .woocommerce-view-order) .woocommerce-MyAccount-downloads-file.button {
        display: block;
        width: 100%;
        text-align: center;
        padding: 0.85rem 1rem !important;
    }
}

/* ==========================================================================
   8. Ver encomenda: nota de encomenda (todas as resoluções)
   ========================================================================== */

.woocommerce-view-order .woocommerce-OrderUpdates {
    margin-top: -1rem;
    margin-bottom: 2rem;
}
.woocommerce-view-order .woocommerce-OrderUpdate,
.woocommerce-view-order .woocommerce-OrderUpdate * {
    border-radius: 12px;
}