/* ==========================================================
   ASSEC Modal Premium
   LS System
========================================================== */

.assec-modal{

position:fixed;

inset:0;

display:flex;

align-items:center;

justify-content:center;

padding:10px;

background:rgba(15,23,42,.55);

backdrop-filter:blur(14px);

-webkit-backdrop-filter:blur(14px);

opacity:0;

visibility:hidden;

transition:.25s;

z-index:999999;

}

.assec-modal.show{

opacity:1;

visibility:visible;

}

.assec-modal-box{

width:100%;

max-width:470px;

background:var(--card-bg,#fff);

border-radius:var(--radius);

padding:35px;

box-shadow:

0 20px 60px rgba(0,0,0,.25);

transform:translateY(20px) scale(.95);

transition:.30s cubic-bezier(.175,.885,.32,1.275);

position:relative;

overflow:hidden;

/* Nunca deixa a modal sair da área visível: 10px livres em cima e embaixo. */
max-height:calc(100dvh - 20px);
display:flex;
flex-direction:column;

}

.assec-modal.show .assec-modal-box{

transform:none;

}

.assec-modal-box::before{

content:"";

position:absolute;

left:0;

top:0;

width:100%;

height:5px;

background:var(--primary-gradient);

}

.assec-modal-icon{

width:90px;

height:90px;

margin:auto;

border-radius:50%;

display:flex;

align-items:center;

justify-content:center;

font-size:38px;

margin-bottom:22px;

transition:.3s;

}

.modal-success{

background:rgba(22,163,74,.10);

color:#16a34a;

}

.modal-error{

background:rgba(220,38,38,.10);

color:#dc2626;

}

.modal-warning{

background:rgba(245,158,11,.12);

color:#f59e0b;

}

.modal-info{

background:rgba(37,99,235,.10);

color:#2563eb;

}

.assec-modal-title{

font-size:1.45rem;

font-weight:800;

text-align:center;

color:var(--text-primary);

margin-bottom:10px;

}

.assec-modal-text{

font-size:.96rem;

line-height:1.7;

text-align:center;

color:var(--text-secondary);

margin-bottom:30px;

/* Conteúdos extensos rolam aqui; título, fechar e ações ficam disponíveis. */
overflow-y:auto;
min-height:0;
padding-right:4px;

}

.assec-modal-buttons{

display:flex;

gap:12px;

justify-content:center;

flex-wrap:wrap;

flex-shrink:0;

}

.assec-modal-buttons button{

min-width:130px;

padding:14px 20px;

border:none;

border-radius:var(--radius);

cursor:pointer;

font-weight:700;

font-size:.95rem;

transition:.25s;

}

.modal-primary{

background:var(--primary-gradient);

color:#fff;

}

.modal-primary:hover{

transform:translateY(-2px);

box-shadow:0 10px 25px rgba(0,0,0,.18);

}

.modal-danger{

background:#dc2626;

color:#fff;

}

.modal-danger:hover{

transform:translateY(-2px);

}

.modal-secondary{

background:#edf2f7;

color:#334155;

}

.modal-secondary:hover{

background:#e2e8f0;

}

body.dark-mode .modal-secondary{

background:#334155;

color:#fff;

}

.assec-modal-close{

position:absolute;

top:15px;

right:15px;

width:38px;

height:38px;

border:none;

background:transparent;

cursor:pointer;

border-radius:50%;

font-size:18px;

transition:.25s;

color:var(--text-secondary);

}

.assec-modal-close:hover{

background:rgba(0,0,0,.08);

transform:rotate(90deg);

}

.assec-modal-loading{

width:70px;

height:70px;

margin:auto;

border-radius:50%;

border:6px solid rgba(0,102,204,.15);

border-top-color:var(--primary);

animation:assecSpin .8s linear infinite;

margin-bottom:25px;

}

@keyframes assecSpin{

100%{

transform:rotate(360deg);

}

}

@media(max-width:600px){

.assec-modal{

padding:10px;

}

.assec-modal-box{

padding:28px;

border-radius:var(--radius);

}

.assec-modal-buttons{

flex-direction:column;

}

.assec-modal-buttons button{

width:100%;

}

}

/* ==========================================================
   V29.47 · LS Security / LS Face / Biometria Nativa - 10px de margem e sem rolagem externa
========================================================== */
html.assec-modal-lock, body.assec-modal-lock{overflow:hidden!important;overscroll-behavior:none}
.assec-modal.assec-modal-viewport10{padding:10px!important}
.assec-modal-box.modal-fullscreen,
.assec-modal-box.modal-ls-security-scan{
    width:min(760px,calc(100vw - 20px));
    height:calc(100dvh - 20px);
    max-width:760px;
    max-height:calc(100dvh - 20px);
    padding:18px;
    border-radius:calc(var(--radius)*1.2);
}
.assec-modal-box.modal-ls-security-scan .assec-modal-icon{display:none}
.assec-modal-box.modal-ls-security-scan .assec-modal-title{font-size:1.05rem;text-align:left;padding-right:42px;margin:0 0 10px}
.assec-modal-box.modal-ls-security-scan .assec-modal-text{flex:1;min-height:0;overflow:hidden;margin:0;padding:0;text-align:left}
.assec-modal-box.modal-ls-security-scan .assec-modal-buttons{display:none}
.lssec-scan{height:100%;min-height:0;display:grid;grid-template-rows:auto minmax(0,1fr) auto;gap:12px}
.lssec-scan-kicker{display:flex;align-items:center;gap:8px;color:var(--text-secondary);font-size:.74rem;font-weight:800}
.lssec-scan-kicker i{color:var(--primary)}
.lssec-camera{position:relative;min-height:0;border-radius:var(--radius);overflow:hidden;background:#07111f;border:1px solid rgba(148,163,184,.24)}
.lssec-camera video{width:100%;height:100%;display:block;object-fit:cover;transform:scaleX(-1)}
.lssec-camera:after{content:"";position:absolute;inset:8% 23%;border:2px solid rgba(103,232,249,.88);border-radius:48% 48% 44% 44%;box-shadow:0 0 0 999px rgba(2,6,23,.20),0 0 34px rgba(34,211,238,.28);pointer-events:none}
.lssec-scanline{position:absolute;z-index:2;left:27%;right:27%;height:2px;top:22%;background:linear-gradient(90deg,transparent,#67e8f9,transparent);box-shadow:0 0 10px #22d3ee;animation:lssecBeam 2.1s ease-in-out infinite}
@keyframes lssecBeam{0%,100%{top:22%;opacity:.3}50%{top:73%;opacity:1}}
.lssec-live-pill{position:absolute;z-index:3;left:12px;top:12px;border-radius:999px;padding:7px 10px;background:rgba(2,6,23,.72);color:#fff;font-size:.68rem;font-weight:850;display:flex;align-items:center;gap:6px;backdrop-filter:blur(8px)}
.lssec-live-pill:before{content:"";width:7px;height:7px;border-radius:50%;background:#22c55e;box-shadow:0 0 10px #22c55e}
.lssec-scan-foot{display:grid;gap:9px}
.lssec-copy{display:grid;gap:3px}.lssec-copy strong{font-size:.92rem;color:var(--text-primary)}.lssec-copy span{font-size:.76rem;line-height:1.35;color:var(--text-secondary)}
.lssec-progress{height:6px;border-radius:99px;overflow:hidden;background:color-mix(in srgb,var(--border) 75%,transparent)}.lssec-progress span{display:block;height:100%;width:0;border-radius:inherit;background:var(--primary-gradient);transition:width .2s}
.lssec-checks{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}.lssec-check{padding:7px 5px;border:1px solid var(--border);border-radius:var(--radius);text-align:center;font-size:.62rem;color:var(--text-muted);font-weight:800;background:var(--bg)}.lssec-check.on{border-color:rgba(34,197,94,.28);background:rgba(34,197,94,.08);color:#15803d}
.lssec-consent{display:flex;align-items:flex-start;gap:8px;padding:9px 10px;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);font-size:.68rem;line-height:1.35;color:var(--text-secondary)}.lssec-consent input{margin-top:2px;accent-color:var(--primary)}
.lssec-scan-actions{display:flex;gap:8px}.lssec-scan-actions button{flex:1;min-height:42px;border:0;border-radius:var(--radius);font-weight:850;cursor:pointer}.lssec-scan-actions .primary{background:var(--primary-gradient);color:#fff}.lssec-scan-actions .secondary{background:var(--bg);border:1px solid var(--border);color:var(--text-primary)}
.lssec-inline-error{display:none;padding:8px 10px;border-radius:var(--radius);background:rgba(220,38,38,.09);color:#b91c1c;font-size:.72rem}.lssec-inline-error.show{display:block}
.lssec-qr-card{display:grid;place-items:center;gap:14px}.lssec-qr-box{width:220px;height:220px;max-width:68vw;max-height:68vw;background:#fff;border:1px solid var(--border);border-radius:var(--radius);padding:12px;display:grid;place-items:center}.lssec-device-summary{width:100%;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;text-align:left}.lssec-device-summary div{padding:10px;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg)}.lssec-device-summary small{display:block;color:var(--text-muted);font-size:.66rem}.lssec-device-summary strong{display:block;margin-top:2px;font-size:.78rem;color:var(--text-primary);word-break:break-word}
@media(max-width:600px){
 .assec-modal{padding:10px}
 .assec-modal-box.modal-fullscreen,.assec-modal-box.modal-ls-security-scan{width:calc(100vw - 20px);height:calc(100dvh - 20px);max-height:calc(100dvh - 20px);padding:12px;border-radius:var(--radius)}
 .assec-modal-box.modal-ls-security-scan .assec-modal-title{font-size:.95rem;margin-bottom:7px}
 .lssec-scan{gap:8px}.lssec-checks{gap:4px}.lssec-check{padding:6px 2px;font-size:.56rem}.lssec-scan-actions button{min-height:40px}
 .lssec-device-summary{grid-template-columns:1fr 1fr}
}
@media(max-height:650px){
 .lssec-checks{display:none}.lssec-copy span{font-size:.68rem}.lssec-scan{gap:6px}.lssec-scan-actions button{min-height:36px}
}


/* ==========================================================
   V29.50 · LS Security Premium · radius global + estabilidade visual
========================================================== */
.assec-modal-box{
    border-radius:var(--radius)!important;
    border:1px solid color-mix(in srgb,var(--border,#dbe4ee) 82%,transparent);
    box-shadow:0 30px 90px rgba(15,23,42,.24),0 1px 0 rgba(255,255,255,.72) inset;
}
.assec-modal-icon{
    width:76px;
    height:76px;
    border-radius:var(--radius)!important;
    margin-bottom:18px;
    box-shadow:inset 0 1px 0 rgba(255,255,255,.62);
}
.assec-modal-close{
    border-radius:var(--radius)!important;
    background:color-mix(in srgb,var(--card-bg,#fff) 88%,var(--primary,#06c) 12%);
    border:1px solid color-mix(in srgb,var(--border,#dbe4ee) 80%,transparent);
}
.assec-modal-buttons button{border-radius:var(--radius)!important;min-height:46px}
.assec-modal.show .assec-modal-buttons button{animation:lsModalButtonIn .22s ease both}
.assec-modal.show .assec-modal-buttons button:nth-child(2){animation-delay:.035s}
.assec-modal.show .assec-modal-buttons button:nth-child(3){animation-delay:.07s}
.assec-modal.show .assec-modal-buttons button:nth-child(4){animation-delay:.105s}
@keyframes lsModalButtonIn{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:none}}

/* Marca visual estável do LS Face. Não depende do ícone Face Viewfinder Pro. */
.ls-face-mark{position:relative;display:inline-grid;place-items:center;width:44px;height:44px;border-radius:var(--radius);background:var(--primary-gradient,linear-gradient(135deg,#0066cc,#34bdeb));color:#fff;box-shadow:0 10px 24px color-mix(in srgb,var(--primary,#0066cc) 20%,transparent);flex:none}
.ls-face-mark i{font-size:1rem;position:relative;z-index:2}
.ls-face-mark:before{content:"";position:absolute;inset:7px;border:1.5px solid rgba(255,255,255,.70);border-radius:calc(var(--radius) * .58)}
.ls-face-mark:after{content:"";position:absolute;right:6px;bottom:6px;width:7px;height:7px;border-radius:50%;background:#4ade80;border:2px solid color-mix(in srgb,var(--primary,#0066cc) 60%,#0f172a);box-shadow:0 0 10px rgba(74,222,128,.75)}
.ls-face-mark.sm{width:34px;height:34px}.ls-face-mark.sm i{font-size:.78rem}.ls-face-mark.sm:before{inset:5px}.ls-face-mark.sm:after{width:6px;height:6px;right:4px;bottom:4px}

/* Leitor QR remoto dentro da modal de segurança. */
.assec-modal-box.modal-ls-security-remote{
    width:min(820px,calc(100vw - 20px));
    max-width:820px;
    height:min(720px,calc(100dvh - 20px));
    max-height:calc(100dvh - 20px);
    padding:16px;
    border-radius:var(--radius)!important;
}
.assec-modal-box.modal-ls-security-remote .assec-modal-icon{display:none}
.assec-modal-box.modal-ls-security-remote .assec-modal-title{text-align:left;font-size:1.02rem;margin:0 44px 10px 0}
.assec-modal-box.modal-ls-security-remote .assec-modal-text{flex:1;min-height:0;overflow:auto;text-align:left;margin:0;padding:0 2px 2px}
.assec-modal-box.modal-ls-security-remote .assec-modal-buttons{display:none}
.lssec-remote-reader{display:grid;grid-template-columns:minmax(0,1.22fr) minmax(250px,.78fr);gap:12px;min-height:100%}
.lssec-remote-camera{position:relative;min-height:320px;border-radius:var(--radius);overflow:hidden;background:#020617;border:1px solid rgba(148,163,184,.22)}
.lssec-remote-camera video{width:100%;height:100%;display:block;object-fit:cover}
.lssec-remote-frame{position:absolute;inset:15%;border:2px solid rgba(255,255,255,.9);border-radius:var(--radius);box-shadow:0 0 0 999px rgba(2,6,23,.28),0 0 28px rgba(56,189,248,.22);pointer-events:none}
.lssec-remote-scanline{position:absolute;left:20%;right:20%;top:22%;height:2px;background:linear-gradient(90deg,transparent,#67e8f9,transparent);box-shadow:0 0 10px #22d3ee;animation:lsRemoteBeam 2s ease-in-out infinite}
@keyframes lsRemoteBeam{0%,100%{top:22%;opacity:.32}50%{top:73%;opacity:1}}
.lssec-remote-side{display:flex;flex-direction:column;gap:9px}
.lssec-remote-kicker{display:flex;align-items:center;gap:8px;font-size:.67rem;font-weight:900;color:var(--primary);letter-spacing:.06em;text-transform:uppercase}
.lssec-remote-title{font-size:.92rem;font-weight:900;color:var(--text-primary)}
.lssec-remote-copy{font-size:.72rem;line-height:1.5;color:var(--text-secondary)}
.lssec-remote-status{padding:9px 10px;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);font-size:.68rem;line-height:1.4;color:var(--text-secondary)}
.lssec-direct-methods{display:grid;gap:7px;margin-top:auto}.lssec-direct-methods button{min-height:43px;border-radius:var(--radius);border:1px solid var(--border);font:inherit;font-size:.72rem;font-weight:850;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:8px}.lssec-direct-methods .primary{background:var(--primary-gradient);color:#fff;border-color:transparent}.lssec-direct-methods .secondary{background:var(--card-bg);color:var(--text-primary)}.lssec-direct-methods .danger{background:#fff1f2;color:#be123c;border-color:#fecdd3}
@media(max-width:680px){.assec-modal-box.modal-ls-security-remote{height:calc(100dvh - 20px);padding:11px}.lssec-remote-reader{grid-template-columns:1fr;grid-template-rows:minmax(240px,1fr) auto}.lssec-remote-camera{min-height:240px}.lssec-direct-methods{grid-template-columns:1fr 1fr}.lssec-direct-methods .danger{grid-column:1/-1}}


/* ==========================================================
   V29.51 · LS Face geometry lock + QR global
   O guia facial usa proporção biométrica fixa (0,72:1), independente
   da proporção da câmera/tela. Nunca vira "ovo" em telas estreitas/largas.
========================================================== */
.lssec-camera{
    --ls-face-guide-ratio:.72;
    --ls-face-guide-height:min(76%,390px);
}
.lssec-camera:after{
    inset:auto!important;
    left:50%!important;
    top:50%!important;
    width:auto!important;
    height:var(--ls-face-guide-height)!important;
    aspect-ratio:.72 / 1!important;
    transform:translate(-50%,-50%)!important;
    border-radius:48% 48% 45% 45% / 43% 43% 57% 57%!important;
    box-shadow:0 0 0 999px rgba(2,6,23,.20),0 0 0 1px rgba(255,255,255,.12) inset,0 0 36px rgba(34,211,238,.32)!important;
}
.lssec-scanline{
    left:50%!important;
    right:auto!important;
    width:min(46%,220px)!important;
    transform:translateX(-50%)!important;
}
@media(max-width:600px){
    .lssec-camera{--ls-face-guide-height:min(74%,350px)}
    .lssec-camera:after{border-width:2px!important}
    .lssec-scanline{width:min(52%,205px)!important}
}
@media(orientation:landscape) and (max-height:600px){
    .lssec-camera{--ls-face-guide-height:min(82%,300px)}
}

/* Botão discreto do leitor QR LS Security disponível em qualquer tela autenticada. */
.lssec-global-qr-trigger{
    position:fixed;
    right:max(14px,env(safe-area-inset-right));
    bottom:calc(86px + env(safe-area-inset-bottom));
    z-index:950000;
    min-height:44px;
    padding:9px 12px;
    border:1px solid color-mix(in srgb,var(--primary,#0066cc) 22%,var(--border,#dbe4ee));
    border-radius:var(--radius)!important;
    background:color-mix(in srgb,var(--card-bg,#fff) 94%,var(--primary,#0066cc) 6%);
    color:var(--primary,#0066cc);
    box-shadow:0 14px 34px rgba(15,23,42,.16),inset 0 1px 0 rgba(255,255,255,.75);
    display:flex;
    align-items:center;
    gap:8px;
    font:inherit;
    font-size:.72rem;
    font-weight:900;
    cursor:pointer;
    backdrop-filter:blur(14px);
    -webkit-backdrop-filter:blur(14px);
    transition:transform .18s ease,box-shadow .18s ease,opacity .18s ease;
}
.lssec-global-qr-trigger:hover{transform:translateY(-2px);box-shadow:0 18px 42px rgba(15,23,42,.2)}
.lssec-global-qr-trigger i{font-size:.95rem}
.lssec-global-qr-trigger .lssec-qr-live-dot{width:7px;height:7px;border-radius:50%;background:#22c55e;box-shadow:0 0 0 5px rgba(34,197,94,.12),0 0 10px rgba(34,197,94,.55)}
.lssec-global-qr-trigger.has-request{animation:lsSecQrPulse 1.65s ease-in-out infinite;border-color:color-mix(in srgb,var(--primary,#0066cc) 46%,var(--border,#dbe4ee))}
@keyframes lsSecQrPulse{0%,100%{box-shadow:0 14px 34px rgba(15,23,42,.16)}50%{box-shadow:0 14px 42px color-mix(in srgb,var(--primary,#0066cc) 26%,transparent)}}
@media(max-width:600px){
    .lssec-global-qr-trigger{width:46px;height:46px;min-height:46px;padding:0;justify-content:center;bottom:calc(76px + env(safe-area-inset-bottom))}
    .lssec-global-qr-trigger .lssec-global-qr-label,.lssec-global-qr-trigger .lssec-qr-live-dot{display:none}
}


/* ==========================================================
   V29.53 · LS Face automático, voz persistente e Check-in fila
========================================================== */
.lssec-scan-kicker{justify-content:space-between}
.lssec-scan-kicker>span{display:flex;align-items:center;gap:8px}
.lssec-voice-toggle{width:38px;height:38px;display:grid;place-items:center;flex:none;border:1px solid var(--border);border-radius:var(--radius);background:var(--card-bg);color:var(--primary);cursor:pointer;box-shadow:0 6px 18px rgba(15,23,42,.08)}
.lssec-voice-toggle.muted{color:var(--text-muted);background:var(--bg)}
.lssec-voice-toggle:hover{transform:translateY(-1px)}
.lssec-scan-actions [hidden]{display:none!important}
.assec-modal-box.modal-checkin-face-queue{width:min(760px,calc(100vw - 20px));height:calc(100dvh - 20px);max-height:calc(100dvh - 20px);padding:14px;border-radius:var(--radius)!important}
.assec-modal-box.modal-checkin-face-queue .assec-modal-icon{display:none}
.assec-modal-box.modal-checkin-face-queue .assec-modal-title{text-align:left;margin:0 48px 8px 0;font-size:1rem}
.assec-modal-box.modal-checkin-face-queue .assec-modal-text{flex:1;min-height:0;overflow:hidden;margin:0;padding:0;text-align:left}
.assec-modal-box.modal-checkin-face-queue .assec-modal-buttons{display:none}
.ck-face-queue{height:100%;display:grid;grid-template-rows:minmax(0,1fr) auto;gap:10px}
.ck-face-camera{position:relative;min-height:0;border-radius:var(--radius);overflow:hidden;background:#020617;border:1px solid rgba(148,163,184,.24)}
.ck-face-camera video{width:100%;height:100%;display:block;object-fit:cover;transform:scaleX(-1)}
.ck-face-camera:after{content:"";position:absolute;left:50%;top:50%;height:min(76%,390px);aspect-ratio:.72/1;transform:translate(-50%,-50%);border:2px solid rgba(103,232,249,.9);border-radius:48% 48% 45% 45% / 43% 43% 57% 57%;box-shadow:0 0 0 999px rgba(2,6,23,.20),0 0 34px rgba(34,211,238,.3);pointer-events:none}
.ck-face-beam{position:absolute;z-index:2;left:50%;width:min(46%,220px);height:2px;top:24%;transform:translateX(-50%);background:linear-gradient(90deg,transparent,#67e8f9,transparent);box-shadow:0 0 10px #22d3ee;animation:lssecBeam 2s ease-in-out infinite}
.ck-face-status{position:absolute;z-index:4;left:12px;right:12px;bottom:12px;padding:11px 12px;border-radius:var(--radius);background:rgba(2,6,23,.78);color:#fff;backdrop-filter:blur(12px);border:1px solid rgba(255,255,255,.11)}
.ck-face-status strong{display:block;font-size:.9rem}.ck-face-status span{display:block;margin-top:3px;font-size:.72rem;line-height:1.4;opacity:.84}
.ck-face-status.ok{background:rgba(5,80,57,.88);border-color:rgba(74,222,128,.34)}
.ck-face-status.err{background:rgba(127,29,29,.9);border-color:rgba(248,113,113,.35)}
.ck-face-queue-foot{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 2px 0}
.ck-face-queue-info{display:flex;align-items:center;gap:8px;color:var(--text-secondary);font-size:.7rem;font-weight:800}
.ck-face-queue-actions{display:flex;align-items:center;gap:7px}
.ck-face-queue-actions button{min-height:40px;padding:8px 11px;border-radius:var(--radius);border:1px solid var(--border);background:var(--card-bg);color:var(--text-primary);font-weight:850;cursor:pointer}
.ck-face-queue-actions .voice{width:40px;padding:0;color:var(--primary)}
.ck-face-queue-actions .voice.muted{color:var(--text-muted)}
@media(max-width:600px){.assec-modal-box.modal-checkin-face-queue{padding:10px}.ck-face-camera:after{height:min(74%,340px)}.ck-face-queue-foot{align-items:stretch}.ck-face-queue-info{font-size:.64rem}.ck-face-queue-actions button:not(.voice){padding:7px 9px;font-size:.7rem}}
