.menu-list{padding:6px 16px 30px;flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;}
.menu-item{display:flex;align-items:center;gap:13px;padding:14px 4px;border-bottom:1px solid var(--line);}
.menu-item:last-child{border-bottom:none;}
.menu-icon{width:36px;height:36px;border-radius:10px;background:#EFEBDD;display:flex;align-items:center;justify-content:center;color:var(--navy-2);flex-shrink:0;}
.menu-title{font-size:14.5px;font-weight:650;color:var(--ink);}
.menu-sub{font-size:12px;color:var(--ink-soft);margin-top:1px;}

.dropzone{border:2px dashed var(--line);border-radius:14px;padding:28px 16px;text-align:center;background:#fff;margin-bottom:14px;}
.dropzone .dz-title{font-weight:650;font-size:14.5px;color:var(--ink);margin-bottom:3px;}
.dropzone .dz-sub{font-size:12px;color:var(--ink-soft);}
.progress-bar{height:8px;background:#EFEBDD;border-radius:4px;overflow:hidden;margin:14px 0;}
.progress-fill{height:100%;background:linear-gradient(90deg,var(--gold-dim),var(--gold));width:0%;transition:width .2s ease;}
.summary-row{display:flex;justify-content:space-between;padding:9px 0;border-bottom:1px solid var(--line);font-size:13.5px;}
.summary-row:last-child{border-bottom:none;}
.summary-row .lab{color:var(--ink-soft);}
.summary-row .val{font-weight:700;color:var(--ink);}
input[type=file]{display:none;}

.boot-screen{position:fixed;inset:0;background:linear-gradient(160deg,var(--navy) 0%,var(--navy-2) 70%);z-index:500;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#fff;transition:opacity .25s ease;}
.boot-screen.fading{opacity:0;pointer-events:none;}
.boot-logo{width:64px;height:64px;border-radius:18px;background:rgba(232,182,90,.15);border:1px solid rgba(232,182,90,.35);display:flex;align-items:center;justify-content:center;margin-bottom:18px;font-family:Georgia,serif;font-size:30px;color:var(--gold);}
.spinner{width:22px;height:22px;border:2.5px solid rgba(255,255,255,.25);border-top-color:var(--gold);border-radius:50%;animation:spin .8s linear infinite;margin-bottom:12px;}
@keyframes spin{to{transform:rotate(360deg)}}
.boot-label{font-size:13px;color:rgba(255,255,255,.6);margin-top:4px;}

.toast{position:fixed;bottom:calc(env(safe-area-inset-bottom) + 20px);left:50%;transform:translateX(-50%) translateY(20px);background:var(--ink);color:#fff;padding:12px 20px;border-radius:30px;font-size:13.5px;font-weight:600;z-index:200;opacity:0;pointer-events:none;transition:all .25s ease;max-width:88%;text-align:center;box-shadow:0 6px 20px rgba(0,0,0,.25);}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0);}

/* ── La puerta ──────────────────────────────────────────────────────────────
   Por encima de TODO lo demás. Los z-index a superar están repartidos por el
   proyecto: .sheet-overlay 100, .sheet 101, .toast 200, .lightbox-overlay 300,
   .boot-screen 500, y las dos barras que inyecta el JavaScript — #swUpdateBar
   9998 (sw_init.js) y #offlineBar 9999 (offline_indicator.js). De ahí el
   10000: la barra de "sin conexión" no puede quedar por encima de la puerta,
   porque justo sin conexión es cuando más se usa esto.
   Se ve por defecto y el JavaScript la esconde. Si no llega a correr, la
   puerta se queda cerrada, que es el lado correcto por el que fallar. */
.acceso-puerta{position:fixed;inset:0;z-index:10000;display:flex;align-items:center;justify-content:center;padding:24px;background:linear-gradient(160deg,var(--navy) 0%,var(--navy-2) 70%);transition:opacity .25s ease;}
.acceso-puerta.abierta{opacity:0;pointer-events:none;}
.acceso-caja{width:100%;max-width:300px;display:flex;flex-direction:column;align-items:center;text-align:center;}
.acceso-logo{width:64px;height:64px;border-radius:18px;display:block;margin-bottom:16px;}
.acceso-titulo{color:#fff;font-size:17px;font-weight:700;letter-spacing:.2px;margin-bottom:26px;}
.acceso-etiqueta{color:rgba(255,255,255,.6);font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:1px;margin-bottom:8px;}
/* Monoespaciada y espaciada: un código se teclea mirando carácter a carácter,
   y en una proporcional un 0 y una O no se distinguen. */
.acceso-campo{width:100%;padding:14px 16px;border:1px solid rgba(232,182,90,.35);border-radius:var(--radius);background:rgba(255,255,255,.06);color:#fff;font-family:var(--mono);font-size:20px;letter-spacing:5px;text-align:center;text-transform:uppercase;outline:none;}
.acceso-campo:focus{border-color:var(--gold);background:rgba(255,255,255,.1);}
.acceso-boton{width:100%;margin-top:14px;padding:14px;border:0;border-radius:var(--radius);background:var(--gold);color:var(--navy);font-size:15px;font-weight:700;cursor:pointer;}
.acceso-boton:active{background:var(--gold-dim);}
/* Alto reservado: sin él, el aviso empuja el botón hacia abajo justo cuando
   el dedo va a tocarlo otra vez. */
.acceso-aviso{min-height:34px;margin-top:12px;color:#F3B3AA;font-size:13px;line-height:1.35;}
