/* ============================================================
   BIFROST — RESPONSIVIDADE MOBILE (2026-09-10)
   Correção para celulares: páginas não rolavam na vertical.

   Causa raiz: app-shell fixo (body {height:100vh; overflow:hidden})
   + .main-grid com min-height:720px e colunas laterais fixas
   (240px + 270px). Em portrait o conteúdo transborda um
   contêiner overflow:hidden => scroll impossível.

   Estratégia (tudo em media query — desktop intocado):
   - <=1024px: libera o scroll do documento, derruba travas de
     altura fixa e deixa o main-grid fluir naturalmente.
   - <=768px: sidebar vira off-canvas (controlada pelo MESMO botão
     #sidebar-toggle / body.sidebar-collapsed já existente no
     nav.js), grids empilham, tabelas rolam na horizontal,
     fontes >=16px em inputs (evita auto-zoom do iOS).
   ============================================================ */

/* ============================================================
   FASE 1 — TABLET / portrait (<=1024px): liberar o scroll
   ============================================================ */
@media (max-width: 1024px) {

    /* Document volta a rolar: o shell deixa de ser viewport-fixo */
    body, html {
        height: auto;
        min-height: 100%;
        overflow-x: hidden;
        overflow-y: auto;
        -webkit-overflow-scrolling: touch;
    }
    body {
        display: block;              /* flex column do shell impediria crescer */
    }

    /* Alturas amarradas ao viewport liberadas */
    .app-container {
        display: block;
        height: auto !important;
        min-height: 0;
        overflow: visible;
    }

    .main-content {
        height: auto !important;
        overflow: visible !important;
        max-width: 100%;
    }

    /* Trava de altura mínima do grid de 3 colunas derrubada;
        colunas empilham (a regra de 1 coluna abaixo mantém compat). */
    .main-grid {
        flex: 0 0 auto !important;
        min-height: 0 !important;
        height: auto !important;
        grid-template-columns: minmax(0, 1fr) !important;
    }
    .col { height: auto !important; }

    /* Áreas de scroll interno passam a crescer com o documento
        (scroll único e natural da página) */
    .soc-view,
    .soc-view.active {
        overflow: visible !important;
        min-height: 0 !important;
    }

    /* Painéis internos: sem tetos de altura fixa */
    .main-grid .card-body,
    .soc-grid2 .card-body,
    .soc-grid2 .soc-wide .card-body,
    .soc-grid2 .soc-full .card-body {
        max-height: none !important;
        overflow: visible !important;
    }
    .main-grid #alerts-list {
        max-height: none !important;
        overflow: visible !important;
    }

    /* Gráficos com canvas 100%/100% precisam de uma altura definida */
    .nd-chart-box { height: 240px; }
    .nd-chart-box canvas { height: 240px !important; }
    .nd-donut, .nd-vectors-chart { width: 110px; height: 110px; }
    .nd-gauge canvas { width: 55px !important; height: 38px !important; }
}

/* ============================================================
   FASE 2 — CELULARES (<=768px)
   ============================================================ */
@media (max-width: 768px) {

    /* ===== Sidebar off-canvas ===== */
    .sidebar {
        position: fixed !important;
        top: 0; left: 0; bottom: 0;
        width: 240px !important;
        min-width: 240px !important;
        max-width: 85vw;
        z-index: 1000;
        transform: translateX(-100%);
        transition: transform .22s ease;
        box-shadow: 4px 0 24px rgba(0,0,0,.45);
        overflow-y: auto;
        height: 100vh;
        height: 100dvh;
        padding-top: 12px;
    }
    body:not(.sidebar-collapsed) .sidebar { transform: translateX(0); }
    body.sidebar-collapsed .sidebar {
        width: 240px !important;      /* cancela o width:0 do desktop */
        min-width: 240px !important;
        opacity: 1;
        border-right-width: 1px;
        padding-left: 0;
        padding-right: 0;
        overflow-y: auto;             /* cancela overflow:hidden do desktop */
        transform: translateX(-100%);
    }

    /* Overlay escuro quando o menu está aberto.
       S73 (11/10/2026): só em página COM sidebar. Em `body::after` puro ele
       também nascia na página de login — que nunca recebe .sidebar-collapsed
       (o nav.js sai antes, sem #sidebar-toggle) — e o pseudo-elemento ficava
       com pointer-events:auto cobrindo o card: o formulário aparecia, mas
       NENHUM toque entrava (bug relatado no celular). As páginas sem painel
       (login, landing de DNS e certificados) levam a classe .no-sidebar. */
    body:not(.no-sidebar)::after {
        content: "";
        position: fixed;
        inset: 0;
        background: rgba(0,0,0,.5);
        z-index: 999;
        opacity: 0;
        pointer-events: none;
        transition: opacity .2s ease;
    }
    body:not(.no-sidebar):not(.sidebar-collapsed)::after {
        opacity: 1;
        pointer-events: auto;
    }

    /* Conteúdo principal ocupa a tela toda */
    .main-content {
        width: 100% !important;
        max-width: 100% !important;
        padding: 8px 10px 24px;
    }

    /* ===== Headers ===== */
    .top-header {
        flex-wrap: wrap;
        gap: 6px;
        position: sticky;
        top: 0;
        z-index: 50;
        background-color: var(--bg-sidebar);
    }
    .header-title { font-size: 13px; min-width: 0; }
    .header-actions { gap: 8px; margin-left: auto; }
    .user-link, .user-link-simple { max-width: 110px; }
    .sub-header { flex-wrap: wrap; gap: 6px; }

    /* ===== Abas SOC rolam na horizontal ===== */
    .soc-tabs {
        overflow-x: auto;
        -webkit-overflow-scrolling: touch;
        scrollbar-width: none;
        max-width: 100%;
        padding-bottom: 2px;
    }
    .soc-tabs::-webkit-scrollbar { display: none; }
    .soc-tab { white-space: nowrap; padding: 6px 14px; font-size: 12px; }
    .nd-mini-tabs { overflow-x: auto; scrollbar-width: none; }
    .nd-mini-tabs::-webkit-scrollbar { display: none; }

    /* ===== Cards/grids ===== */
    .top-cards-row {
        grid-template-columns: 1fr 1fr !important;
        height: auto !important;
        gap: 8px;
    }
    .top-cards-row .top-card:last-child { grid-column: span 2; }
    .top-card { padding: 8px 10px; }
    .top-card-value { font-size: 20px; }
    .soc-grid2 {
        grid-template-columns: 1fr !important;
    }
    .soc-grid2 > .card { height: auto; }
    .soc-live-grid { grid-template-columns: repeat(3, minmax(0,1fr)) !important; }

    /* ===== Blocos de linha viram colunas ===== */
    .nd-donut-wrap { flex-direction: column; gap: 10px; }
    .nd-split { grid-template-columns: 1fr; gap: 10px; }
    .nd-kpi-row { flex-wrap: wrap; gap: 10px; }
    .nd-kpi-row > div { flex: 1 1 40%; }
    .nd-timeline { overflow-x: auto; -webkit-overflow-scrolling: touch; }
    .soc-eff-row, .nd-eff-row, .nd-gauges-row, .nd-vectors-row {
        flex-wrap: wrap;
        justify-content: center;
        gap: 12px;
    }

    /* ===== Tabelas: rolagem horizontal dentro do card =====
       (mesmos seletores da fase 1 para vencer na cascata) */
    .main-grid .card-body,
    .soc-grid2 .card-body,
    .soc-grid2 .soc-wide .card-body,
    .soc-grid2 .soc-full .card-body {
        overflow-x: auto !important;
        overflow-y: visible !important;
        -webkit-overflow-scrolling: touch;
    }
    .card-body { overflow-x: auto !important; -webkit-overflow-scrolling: touch; }
    .soc-table { min-width: 480px; }
    .soc-heat-scroll { -webkit-overflow-scrolling: touch; }
    .soc-log-row {
        grid-template-columns: 90px 1fr 90px;
        font-size: 10px;
    }
    .soc-log-row .soc-log-port, .soc-log-row .soc-log-bytes { display: none; }

    /* ===== Elementos tocáveis maiores ===== */
    .nav-item { padding: 11px 15px; font-size: 14px; }
    .nav-item i { width: 18px; font-size: 14px; }
    .soc-btn, .nd-tab, .soc-period-btn, .soc-rule-h {
        padding: 8px 12px;
        font-size: 12px;
    }
    .theme-toggle, .btn-logout, .sidebar-toggle {
        padding: 7px 10px;
        font-size: 13px;
    }
    .badge { font-size: 10px; }

    /* S116: header estourava e CORTAVA os botões de ação (medido 401px em
       tela de 368px, overflow-x hidden) — título/subtítulo quebram linha e
       os botões de ação descem para a linha de baixo em vez de vazar. */
    .top-header { overflow-x: auto; }
    .header-title {
        display: flex;
        flex-wrap: wrap;
        align-items: center;
        row-gap: 6px;
    }
    .header-title button { flex: none; }

    /* S116: KPI de gauge — o lado textual precisa poder encolher (badge de
       19px estourava os 58px da coluna em /usuarios). */
    .sys-gauge-side { min-width: 0; }

    /* ===== Evita auto-zoom do iOS em inputs ===== */
    input, select, textarea, .soc-search-input, .soc-select {
        font-size: 16px !important;
    }
    .soc-search-input, .soc-select { padding: 9px 11px; }

    /* ===== Mapas ===== */
    .nd-map-dark { min-height: 200px; }
    .nd-map-dark .leaflet-container { min-height: 200px; }

    /* ===== Toast/rodapé ===== */
    .toast-container { left: 12px; right: 12px; width: auto; bottom: 12px; }
    .bottom-bar { font-size: 9px; padding: 0 8px; }
    .bottom-left { width: auto; gap: 8px; }

    /* Texto base um pouco maior para leitura confortável */
    body { font-size: 13px; }
    .soc-alert-msg { font-size: 12px; }
    .soc-table { font-size: 11px; }
    .soc-table .mono { font-size: 10.5px; }
}

/* ============================================================
   CELULARES PEQUENOS (<=380px)
   ============================================================ */
@media (max-width: 380px) {
    .top-cards-row { grid-template-columns: 1fr !important; }
    .top-cards-row .top-card:last-child { grid-column: span 1; }
    .soc-live-grid { grid-template-columns: repeat(2, minmax(0,1fr)) !important; }
    .user-link, .user-link-simple { max-width: 80px; }
}

/* ============================================================
   Ajuste de segurança — iPad/desktop touch entre 769-1024px:
   sidebar continua inline (não off-canvas), mas o documento
   rola (herdado da fase 1).
   ============================================================ */
@media (min-width: 769px) and (max-width: 1024px) {
    .sidebar {
        position: relative;
        transform: none;
        transition: none;
        box-shadow: none;
    }
    body::after { display: none; }
}

/* ============================================================
   S72 (10/10/2026) — SCROLL DA AUDITORIA NO CELULAR
   Causa: seguranca.css trava a view no viewport (.seg-view { overflow:hidden })
   e, só na Auditoria, abre scroll INTERNO (.seg-view.aud-view { overflow-y:auto },
   .seg-row { height:340px }, .card-body { max-height:340px; overflow-y:auto }).
   No celular isso vira gesto preso: o toque rola o card (ou nada), nunca a
   página. Aqui nada tem altura fixa e o documento rola uma vez só.
   ============================================================ */
@media (max-width: 1024px) {
    html, body {
        touch-action: pan-y;
        overscroll-behavior-y: auto;
    }
    .seg-view,
    .seg-view.aud-view,
    .cgnat-view {
        height: auto !important;
        max-height: none !important;
        min-height: 0 !important;
        overflow: visible !important;
    }
    .seg-view .seg-row,
    .seg-view.aud-view .seg-row {
        height: auto !important;
        min-height: 0 !important;
        flex: none !important;
    }
    .seg-view > .card > .card-body,
    .seg-view.aud-view > .card > .card-body,
    .cgnat-view > .card > .card-body {
        max-height: none !important;
        overflow: visible !important;
    }
    /* tabela rola na horizontal sem sequestrar o gesto vertical */
    .card-body table { touch-action: pan-x pan-y; }

    /* S116 (15/10/2026, relato do operador — /otimizacao no celular):
       o S72 consertou o eixo Y (fim do scroll interno preso) mas deixou
       overflow-x: visible nos MESMOS card-body. Tabela de 7 colunas
       (candidatos: ~1100px medidos) atravessa o card de 366px, empurra o
       documento na horizontal e o gesto de rolagem "pega" na lateral ao
       chegar na seção dos cards. O X passa a rolar DENTRO do card
       (mesma tática da fase 2), o Y segue no documento — sem sequestro. */
    .seg-view > .card > .card-body,
    .seg-view.aud-view > .card > .card-body,
    .cgnat-view > .card > .card-body {
        overflow-x: auto !important;
        overflow-y: visible !important;
        -webkit-overflow-scrolling: touch;
    }
}

/* ============================================================
   S72 — páginas fora do layout do painel (login e landing de DNS)
   login.css também trava html/body em overflow:hidden; com .login-bg
   position:fixed isso deixava o card de login/2FA preso sem rolagem em
   tela pequena. A landing de DNS é pública e precisa caber no celular.
   ============================================================ */
@media (max-width: 768px) {
    .login-bg {
        position: relative;
        inset: auto;
        min-height: 100dvh;
        height: auto;
        overflow-y: auto;
        padding: 18px 0;
    }
    .dns-features { grid-template-columns: 1fr !important; }
    .dns-servers { flex-wrap: wrap !important; }
    .dns-landing { padding: 28px 14px !important; justify-content: flex-start; }
}
