h1:focus {
    outline: none;
}

.valid.modified:not([type=checkbox]) {
    outline: 1px solid #26b050;
}

.invalid {
    outline: 1px solid #e50000;
}

.validation-message {
    color: #e50000;
}

.blazor-error-boundary {
    background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121;
    padding: 1rem 1rem 1rem 3.7rem;
    color: white;
}

    .blazor-error-boundary::after {
        content: "An error has occurred."
    }

.darker-border-checkbox.form-check-input {
    border-color: #929292;
}

.form-floating > .form-control-plaintext::placeholder, .form-floating > .form-control::placeholder {
    color: var(--bs-secondary-color);
    text-align: end;
}

.form-floating > .form-control-plaintext:focus::placeholder, .form-floating > .form-control:focus::placeholder {
    text-align: start;
}
/* --- Escanear facturas --- */
body { font-family: system-ui, "Segoe UI", sans-serif; margin: 0; color: #1f2430; }
.topbar { background:#1f2937; color:#fff; }
.topbar-inner { display:flex; align-items:center; gap:1rem; padding:.6rem 1.2rem; }
.topbar .brand { font-weight:700; color:#fff; text-decoration:none; font-size:1.1rem; margin-left:auto; }
.topbar nav { display:flex; align-items:center; gap:1rem; }
.topbar nav a { color:#cbd5e1; text-decoration:none; }
.topbar nav a:hover { color:#fff; }
.topbar .user { color:#93c5fd; font-size:.9rem; }
.topbar form { margin:0; }
.selector-empresa select { background:#111827; color:#e5e7eb; border:1px solid #374151; border-radius:6px; padding:.25rem .4rem; font:inherit; font-size:.9rem; max-width:16rem; }
.topbar .empresa-actual { color:#e5e7eb; font-size:.9rem; max-width:16rem; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
/* Saldo de creditos: pastilla discreta que se enciende cuando el saldo aprieta. */
.topbar nav a.creditos, .topbar nav span.creditos { font-size:.85rem; color:#93c5fd;
    background:rgba(255,255,255,.08); border-radius:999px; padding:.15rem .65rem;
    text-decoration:none; white-space:nowrap; }
.topbar nav a.creditos:hover { color:#fff; background:rgba(255,255,255,.18); }
.topbar nav a.creditos.bajo, .topbar nav span.creditos.bajo { color:#fde68a; background:rgba(253,230,138,.14); }
.topbar nav a.creditos.agotado, .topbar nav span.creditos.agotado { color:#fecaca;
    background:rgba(248,113,113,.20); font-weight:600; }
.linkbtn { background:none; border:none; color:#cbd5e1; cursor:pointer; font:inherit; padding:0; }
.linkbtn:hover { color:#fff; text-decoration:underline; }
main { padding:1.5rem 2rem; max-width:1200px; margin:0 auto; }

.login-box { max-width:340px; margin:8vh auto; padding:2rem; border:1px solid #e5e7eb;
    border-radius:12px; box-shadow:0 6px 24px rgba(0,0,0,.06); text-align:center; }
.login-box h1 { margin:0 0 .2rem; }
.login-box .sub { color:#6b7280; margin:0 0 1.2rem; }
.login-box form { display:flex; flex-direction:column; gap:.6rem; }
/* Enlaces bajo el formulario (recuperar contraseña, registrarse). */
.login-alt { margin:.9rem 0 0; font-size:.88rem; color:#6b7280; text-align:center; }
.login-alt a { color:#2563eb; }
.login-box input { padding:.6rem .7rem; border:1px solid #d1d5db; border-radius:8px; font-size:1rem; }
.login-box button { padding:.6rem; background:#2563eb; color:#fff; border:none; border-radius:8px;
    font-size:1rem; cursor:pointer; }
.login-box button:hover { background:#1d4ed8; }
.login-error { color:#b91c1c; background:#fee2e2; padding:.5rem; border-radius:8px; }

table.grid { border-collapse:collapse; width:100%; font-size:.92rem; }
table.grid th, table.grid td { border-bottom:1px solid #e5e7eb; padding:.5rem .6rem; text-align:left; }
table.grid th { background:#f9fafb; color:#374151; }
.estado { display:inline-block; min-width:104px; text-align:center; box-sizing:border-box;
    padding:.15rem .5rem; border-radius:999px; font-size:.8rem; font-weight:600; }
.estado-recibido { background:#e0e7ff; color:#3730a3; }
.estado-procesando { background:#fef3c7; color:#92400e; }
.estado-ok { background:#dcfce7; color:#166534; }
.estado-error { background:#fee2e2; color:#991b1b; }
.estado-descartado { background:#e5e7eb; color:#374151; }
.estado-no_fra { background:#f3f4f6; color:#6b7280; }
/* Nivel de una regla (migración 0028) */
.ambito { display:inline-block; padding:.05rem .45rem; border-radius:999px; font-size:.75rem; font-weight:600; white-space:nowrap; }
.ambito-global { background:#fee2e2; color:#991b1b; }
.ambito-gestor { background:#e0e7ff; color:#3730a3; }
.ambito-empresa { background:#f3f4f6; color:#4b5563; }
.estado-duplicado { background:#ede9fe; color:#5b21b6; text-decoration:none; cursor:pointer; }
a.estado-duplicado:hover { background:#ddd6fe; }
.aviso-duplicado { display:flex; align-items:center; gap:.6rem; flex-wrap:wrap;
    padding:.5rem .8rem; margin:.5rem 0; border-radius:8px;
    background:#ede9fe; color:#5b21b6; border:1px solid #ddd6fe; font-size:.9rem; }

/* --- Subida manual --- */
.dropzone { position:relative; display:block; border:2px dashed #93c5fd; border-radius:12px;
    padding:1.6rem; text-align:center; color:#2563eb; cursor:pointer; margin-bottom:1rem; background:#f8fafc; }
.dropzone:hover { background:#eff6ff; }
/* El input cubre TODA la zona (transparente): el clic y el SOLTAR archivo caen sobre el
   input, así el navegador no abre/visualiza el fichero en lugar de subirlo. */
.dropzone input[type=file] { position:absolute; inset:0; width:100%; height:100%; opacity:0; cursor:pointer; }
.upload-msgs { list-style:none; padding:0; margin:0 0 1rem; display:flex; flex-direction:column; gap:.25rem; }
.upload-msgs li { padding:.35rem .6rem; border-radius:8px; font-size:.9rem; }
.msg-ok { background:#dcfce7; color:#166534; }
.msg-warn { background:#fef3c7; color:#92400e; }
.msg-err { background:#fee2e2; color:#991b1b; }

/* --- Administración --- */
.admin-form { display:flex; flex-wrap:wrap; align-items:center; gap:.6rem; margin-bottom:1rem;
    padding:.9rem; background:#f8fafc; border:1px solid #e5e7eb; border-radius:10px; }
.admin-form.vert { flex-direction:column; align-items:stretch; }
.admin-form input[type=text], .admin-form input:not([type]), .admin-form input[type=password],
.admin-form select { padding:.45rem .6rem; border:1px solid #d1d5db; border-radius:8px; font-size:.95rem; }
.admin-form textarea { width:100%; padding:.5rem .6rem; border:1px solid #d1d5db; border-radius:8px;
    font-family:ui-monospace, monospace; font-size:.9rem; box-sizing:border-box; }
.admin-form label { display:flex; flex-direction:column; gap:.3rem; font-size:.9rem; color:#374151; }
.admin-form label.chk { flex-direction:row; align-items:center; gap:.35rem; }
.btn { padding:.5rem .9rem; background:#2563eb; color:#fff; border:none; border-radius:8px; cursor:pointer; font-size:.95rem; }
.btn:hover { background:#1d4ed8; }
.btn.ghost { background:#e5e7eb; color:#374151; }
.linkbtn2 { background:none; border:none; color:#2563eb; cursor:pointer; padding:0; font:inherit; margin-right:.6rem; }
.linkbtn2:hover { text-decoration:underline; }
.acciones a { margin-right:.6rem; }
table.grid td.acciones, table.grid td.nowrap { white-space:nowrap; }   /* acciones y fechas en una sola línea */
.roles-leyenda { color:#6b7280; font-size:.85rem; margin-top:.6rem; }
.msg-ok.inline, .msg-warn.inline, .msg-err.inline { display:inline-block; margin-left:.6rem; }

/* --- Revisión (Fase 3) --- */
.rev-head { display:flex; align-items:center; gap:1rem; flex-wrap:wrap; }
.rev-head h1 { margin:.2rem 0; font-size:1.3rem; }
.rev-layout { display:flex; gap:1rem; align-items:stretch; margin-top:.6rem; }
.rev-visor { flex:1 1 55%; min-width:0; }
.rev-visor .visor { width:100%; height:72vh; border:1px solid #e5e7eb; border-radius:8px; background:#fff; }
.rev-visor .pdf-host, .rev-visor .img-host { overflow:auto; background:#f1f5f9; cursor:grab; }
.rev-visor .pdf-host.grabbing, .rev-visor .img-host.grabbing { cursor:grabbing; }
/* Sin align-items:center (flex/grid centrado bloquea el scroll: al desbordar, el borde
   izquierdo queda inalcanzable). El centrado va con margin:auto en cada página, que
   colapsa a 0 al desbordar en vez de anclar fuera de rango. Igual que .img-host img. */
.rev-visor .pdf-pages { display:flex; flex-direction:column; gap:8px; padding:8px 0; }
.rev-visor .pdf-page { display:block; margin:0 auto; background:#fff; box-shadow:0 1px 4px rgba(0,0,0,.2); }
.rev-visor .img-host img { display:block; max-width:none; margin:0 auto; }
.rev-panel { flex:1 1 45%; min-width:0; max-height:72vh; overflow:auto; }
.rev-panel h3 { margin:.4rem 0 .3rem; }
.rev-panel-cab { display:flex; align-items:center; justify-content:space-between; gap:.6rem; flex-wrap:wrap; }
.enlace-generado { margin:1rem 0; padding:.8rem 1rem; border:1px solid #93c5fd; background:#eff6ff; border-radius:8px; }
.enlace-generado .enlace-url { width:100%; margin-top:.4rem; font-family:monospace; font-size:.85rem; padding:.4rem; }
.rev-lista { list-style:none; padding:0; margin:0 0 1rem; }
.rev-lista li { display:flex; align-items:center; gap:.5rem; padding:.4rem .5rem; border-bottom:1px solid #eee; }
.rev-lista li.sel { background:#eff6ff; border-radius:6px; }
.rev-lista li span:nth-child(2) { flex:1; font-size:.9rem; }
.rev-editor { margin-top:1rem; padding:1rem; border:1px solid #e5e7eb; border-radius:10px; background:#f8fafc; }
.rev-editor h3, .rev-editor h4 { margin:.3rem 0 .6rem; }
.ed-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); gap:.6rem; margin-bottom:1rem; }
.ed-grid.ed-grid-3 { grid-template-columns:repeat(3,1fr); }
.ed-grid.ed-grid-2 { grid-template-columns:repeat(2,1fr); }
.ed-grid.ed-grid-1 { grid-template-columns:1fr; }
@media (max-width:640px) { .ed-grid.ed-grid-3, .ed-grid.ed-grid-2 { grid-template-columns:1fr; } }
.receptor-ok .receptor-txt { flex:1 1 auto; min-width:0; padding:.4rem .5rem; border:1px solid #e5e7eb;
    border-radius:6px; background:#f8fafc; color:#111827; font-weight:600; }
.ed-grid.tot { grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); }
.ed-grid label, .rev-editor > label { display:flex; flex-direction:column; gap:.25rem; font-size:.85rem; color:#374151; }
.ed-grid label.ancho { grid-column:1 / -1; }
.ed-grid input { padding:.4rem .5rem; border:1px solid #d1d5db; border-radius:6px; }
.con-boton { display:flex; gap:.4rem; align-items:center; }
.con-boton input { flex:1 1 auto; min-width:0; }
.con-boton button { flex:0 0 auto; white-space:nowrap; }
.btn.sm { padding:.3rem .5rem; font-size:.8rem; }
.btn.danger { background:#fee2e2; color:#b91c1c; }
.btn.danger:hover { background:#fecaca; }

/* Botón que late para reclamar atención (hoy: "Descargar Excel" en modo demo, que es la
   acción que cierra la prueba: subir → revisar → llevárselo). Verde de "llévatelo", no el
   azul de una acción cualquiera. Mismo ritmo de 1,6 s que los demás latidos de la app. */
.btn.late { animation:btn-late 1.6s ease-in-out infinite; }
/* Al pasar el ratón manda la respuesta a la interacción, no el latido. */
.btn.late:hover { animation:none; background:#bbf7d0; color:#14532d; }
@keyframes btn-late {
    0%, 100% { background:#e5e7eb; color:#374151; box-shadow:0 0 0 0 rgba(22,163,74,0); }
    50%      { background:#dcfce7; color:#14532d; box-shadow:0 0 0 4px rgba(22,163,74,.18); }
}
@media (prefers-reduced-motion: reduce) {
    .btn.late, .btn.late:hover { animation:none; background:#dcfce7; color:#14532d; }
}
.doc-filtro { display:flex; align-items:center; gap:1rem; margin:.6rem 0; flex-wrap:wrap; }
.doc-filtro label { display:flex; align-items:center; gap:.4rem; font-size:.9rem; color:#374151; }
.doc-filtro .buscador { width:18rem; max-width:100%; padding:.45rem .6rem; border:1px solid #d1d5db; border-radius:6px; }
.doc-filtro .mostrar { margin-left:auto; }
.doc-filtro select { padding:.3rem .4rem; border:1px solid #d1d5db; border-radius:6px; }
th.sortable { cursor:pointer; user-select:none; white-space:nowrap; }
table.grid.docs td { white-space:nowrap; }
table.grid.docs .recorte { max-width:clamp(9rem, 16vw, 20rem); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
table.grid.docs .recorte.archivo { max-width:clamp(10rem, 20vw, 22rem); }
th.sortable:hover { background:#eef2ff; }
.doc-pag { display:flex; align-items:center; gap:1rem; margin:.6rem 0; flex-wrap:wrap; }
.doc-pag select { padding:.3rem .4rem; border:1px solid #d1d5db; border-radius:6px; }
.doc-pag-info { color:#6b7280; font-size:.9rem; }
.doc-pag-nav { display:flex; align-items:center; gap:.6rem; margin-left:auto; font-size:.9rem; }
.ed-lineas input { width:100%; padding:.3rem; border:1px solid #d1d5db; border-radius:6px; }
.ed-lineas td { padding:.25rem; }
.ed-acciones { display:flex; gap:.6rem; margin-top:.8rem; }
@media (max-width:900px){ .rev-layout{ flex-direction:column; } .rev-visor .visor{ height:50vh; } }

/* --- Acciones de bloque --- */
.rev-lista.bloques li { display:block; }
.bloque-cab { display:flex; align-items:center; gap:.5rem; }
.bloque-acc { display:flex; flex-wrap:wrap; align-items:center; gap:.6rem; margin:.35rem 0 .2rem 0; padding-left:.2rem; }
.bloque-acc .dividir { display:inline-flex; align-items:center; gap:.35rem; color:#6b7280; font-size:.85rem; }
.bloque-acc .dividir input { width:64px; padding:.2rem .3rem; border:1px solid #d1d5db; border-radius:6px; }

/* --- Enlaces en la tabla de documentos --- */
table.grid td a { color:#2563eb; text-decoration:none; }
table.grid td a:hover { text-decoration:underline; }
table.grid td a.btn { color:#fff; text-decoration:none; }
table.grid td a.btn:hover { color:#fff; text-decoration:none; }
.rev-link { margin-left:.5rem; font-size:.8rem; }

/* --- Formulario clásico (etiqueta izquierda / campo derecha) --- */
.bloque-form { border:1px solid #e5e7eb; border-radius:10px; padding:1rem 1.2rem; margin:1rem 0; background:#fff; }
.bloque-form legend { font-weight:600; color:#374151; padding:0 .4rem; }
.form-clasico { display:grid; grid-template-columns:150px 1fr; gap:.55rem .9rem; align-items:center; max-width:680px; }
.form-clasico > label { text-align:right; color:#374151; font-size:.9rem; }
.form-clasico > label.top { align-self:start; padding-top:.35rem; }
.form-clasico input:not([type=checkbox]), .form-clasico select, .form-clasico textarea {
    width:100%; padding:.4rem .5rem; border:1px solid #d1d5db; border-radius:6px; box-sizing:border-box; }
.form-clasico textarea { font-family:ui-monospace, monospace; font-size:.88rem; }
.form-clasico input.mono { font-family:ui-monospace, monospace; }
/* Alta/edición bajo una tabla: cerrado hasta pulsar «Editar» o «+ Añadir» (patrón de todo el portal) */
.alta-form { margin-top:1rem; }
.checks-empresas { display:flex; flex-direction:column; gap:.25rem; }
.checks-empresas .chk { display:flex; align-items:center; gap:.4rem; font-size:.9rem; color:#374151; }
.form-clasico.ancho { max-width:100%; }
table.grid tr.sel td { background:#eff6ff; }

/* --- Cabecera Documentos + aviso de estado del análisis --- */
.doc-head { display:flex; align-items:center; gap:1rem; }
.doc-head h1 { margin:.2rem 0; }
.aviso-cerrable { display:flex; align-items:flex-start; justify-content:space-between; gap:1rem; }
.aviso-cerrable .linkbtn2 { margin:0; flex:none; }
.aviso { padding:.6rem .8rem; border-radius:8px; margin:.4rem 0 1rem; font-size:.9rem; }
.aviso.info { background:#e0f2fe; color:#075985; border:1px solid #bae6fd; }
.aviso.warn { background:#fef3c7; color:#92400e; border:1px solid #fde68a; }
.aviso.ok { background:#dcfce7; color:#166534; border:1px solid #bbf7d0; }
.aviso.err { background:#fee2e2; color:#991b1b; border:1px solid #fecaca; }

/* --- Créditos (carrito y compra) --- */
.cred-head { display:flex; align-items:center; gap:1.2rem; flex-wrap:wrap; }
.cred-head h1 { margin:.2rem 0; }
.cred-saldo { display:flex; align-items:baseline; gap:.45rem; padding:.4rem .9rem;
    background:#eff6ff; border:1px solid #bfdbfe; border-radius:999px; color:#1e40af; font-size:.95rem; }
.cred-saldo strong { font-size:1.35rem; }
.packs { display:grid; grid-template-columns:repeat(auto-fit,minmax(180px,1fr)); gap:.9rem; margin:1rem 0; }
.pack { position:relative; border:2px solid #e5e7eb; border-radius:12px; padding:1.1rem 1rem .9rem;
    text-align:center; cursor:pointer; background:#fff; transition:border-color .15s, box-shadow .15s; }
.pack:hover { border-color:#93c5fd; }
.pack.sel { border-color:#2563eb; box-shadow:0 4px 16px rgba(37,99,235,.15); }
/* El pack entero es clicable, pero el botón hace visible que la acción es AÑADIR (se
   pueden combinar varios), no elegir uno solo como antes. */
.pack-add { margin-top:.7rem; width:100%; }

/* Importe a medida: entra al carrito como una línea más. */
.cred-libre { display:flex; align-items:center; gap:.5rem; flex-wrap:wrap; margin:.4rem 0 1rem; }
.cred-libre label { color:#374151; font-size:.9rem; }
.cred-libre input { width:7rem; padding:.4rem .5rem; border:1px solid #d1d5db; border-radius:6px; }

/* Detalle del carrito: una fila por línea, con sus unidades. */
.carrito-detalle { width:100%; border-collapse:collapse; margin-bottom:.8rem; font-size:.92rem; }
.carrito-detalle th { text-align:left; color:#6b7280; font-weight:600; font-size:.82rem;
    border-bottom:1px solid #e5e7eb; padding:.3rem .4rem; }
.carrito-detalle td { padding:.4rem; border-bottom:1px solid #f3f4f6; }
.carrito-detalle .num { text-align:right; font-variant-numeric:tabular-nums; white-space:nowrap; }
.carrito-detalle .num .linkbtn2 { padding:0 .35rem; font-size:1rem; line-height:1; }

/* Datos fiscales dentro de la caja de compra. */
.cred-fiscales { margin-top:1rem; padding-top:.9rem; border-top:1px solid #e5e7eb; }
.cred-fiscales h4 { margin:0 0 .6rem; font-size:.98rem; }
.pack-badge { position:absolute; top:-.7rem; left:50%; transform:translateX(-50%); white-space:nowrap;
    background:#2563eb; color:#fff; font-size:.72rem; font-weight:600; padding:.15rem .6rem; border-radius:999px; }
.pack-badge.mejor { background:#166534; }
.pack-importe { font-size:1.5rem; font-weight:700; color:#111827; }
.pack-facturas { color:#2563eb; font-weight:600; margin:.15rem 0; }
.pack-dto { color:#6b7280; font-size:.82rem; }
.carrito { max-width:460px; border:1px solid #e5e7eb; border-radius:12px; padding:1rem 1.2rem;
    background:#f8fafc; margin-bottom:1.4rem; }
.carrito h3 { margin:.2rem 0 .6rem; }
.carrito-lineas { width:100%; border-collapse:collapse; font-size:.95rem; }
.carrito-lineas td { padding:.3rem 0; }
.carrito-lineas td:last-child { text-align:right; font-weight:600; }
.carrito-total td { border-top:1px solid #d1d5db; padding-top:.5rem; font-size:1.05rem; color:#1e40af; }
.btn.pagar { width:100%; margin-top:.8rem; padding:.7rem; font-size:1.05rem; }
.carrito-nota { color:#6b7280; font-size:.82rem; margin:.5rem 0 0; }
td.mono { font-family:ui-monospace, monospace; font-size:.85rem; }

/* --- Árbol de revisión (facturas protagonistas, bloques secundarios) --- */
.arbol-bloque { border:1px solid #e5e7eb; border-radius:8px; margin-bottom:.7rem; overflow:hidden; }
.arbol-bloque.descartado { opacity:.6; }
.arbol-bloque .bloque-cab { display:flex; align-items:center; gap:.5rem; flex-wrap:wrap;
    background:#f3f4f6; padding:.3rem .55rem; font-size:.78rem; color:#6b7280; }
.bloque-tag { font-weight:600; color:#6b7280; }
.bloque-motivo { color:#b45309; }
.arbol-bloque .bloque-acc { margin-left:auto; display:flex; align-items:center; gap:.5rem; }
.bloque-facturas { padding:.35rem .5rem; display:flex; flex-direction:column; gap:.35rem; }
.arbol-sinbloque { display:flex; flex-direction:column; gap:.35rem; margin-bottom:.7rem; }
.factura-row { display:flex; align-items:center; gap:.6rem; padding:.45rem .55rem; border:1px solid #e5e7eb;
    border-radius:8px; background:#fff; }
.factura-row.sel { background:#eff6ff; border-color:#93c5fd; }
.factura-row .factura-desc { flex:1; font-size:.95rem; }
.factura-row .emisor { color:#6b7280; font-weight:400; }
.linkbtn2.danger { color:#b91c1c; }
.dividir input { width:56px; padding:.15rem .3rem; border:1px solid #d1d5db; border-radius:5px; }

/* --- Revisión: formato ancho + editor de factura en línea --- */
.rev-page { position:relative; left:50%; transform:translateX(-50%); width:min(97vw, 1700px); }
.rev-page .rev-layout { align-items:flex-start; }
.rev-page .rev-visor { flex:1 1 38%; position:sticky; top:.5rem; }
.rev-page .rev-visor .visor { height:84vh; }
.rev-page .rev-panel { flex:1 1 62%; max-height:none; overflow:visible; }
.rev-editor-inline { border:1px solid #93c5fd; background:#f8fafc; border-radius:8px;
    padding:.8rem; margin:-.15rem 0 .4rem; }
.rev-editor-inline .ed-grid { margin-bottom:.7rem; }
.rev-editor-inline h4 { margin:.2rem 0 .5rem; }
/* Importes alineados a la derecha; campos calculados en solo lectura, atenuados */
.rev-editor-inline input[type=number] { text-align:right; }
.rev-editor-inline input[readonly] { background:#eef2f7; color:#374151; cursor:default; }
.ed-lineas th:not(:last-child) { text-align:right; }
/* TOTAL destacado */
.rev-editor-inline .tot-total { font-weight:700; color:#111827; }
.rev-editor-inline .tot-total input { font-weight:700; background:#e0e7ff; color:#111827; }

/* --- Autocompletar emisor (CIF/nombre ya grabados) --- */
.autocomplete { position:relative; }
.autocomplete input { width:100%; box-sizing:border-box; }
.ac-lista { position:absolute; z-index:20; top:100%; left:0; right:0; margin:.15rem 0 0;
    padding:.2rem; list-style:none; background:#fff; border:1px solid #93c5fd; border-radius:8px;
    box-shadow:0 6px 18px rgba(15,23,42,.15); max-height:15rem; overflow-y:auto; }
.ac-lista li { display:flex; align-items:baseline; gap:.5rem; padding:.35rem .5rem; border-radius:6px;
    cursor:pointer; font-size:.88rem; }
.ac-lista li:hover { background:#eff6ff; }
.ac-lista li strong { color:#111827; font-weight:600; white-space:nowrap; }
.ac-lista li span { color:#6b7280; font-size:.82rem; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }

/* Diario de notificaciones del TPV: el color dice de un vistazo si hubo que preocuparse. */
.notif-ok   { color:#166534; font-weight:600; }
.notif-warn { color:#92400e; font-weight:600; }
.notif-err  { color:#b91c1c; font-weight:600; }

/* Columna de selección de la lista de documentos: estrecha y sin robar clic al enlace. */
table.grid th.sel, table.grid td.sel { width:2rem; text-align:center; }
table.grid .sel input { cursor:pointer; }

/* Reglas de empresa aplicadas por la IA a una factura: pastilla discreta, enlaza a su gestión. */
.reglas-tag { margin-left:.4rem; font-size:.78rem; color:#6d28d9; background:#ede9fe; border-radius:999px;
    padding:.05rem .55rem; text-decoration:none; white-space:nowrap; }
.reglas-tag:hover { background:#ddd6fe; }
.regla-ia { display:inline-block; margin-left:.3rem; padding:0 .35rem; border-radius:4px; font-size:.7rem; font-weight:700;
    color:#6d28d9; background:#ede9fe; text-decoration:none; vertical-align:middle; }   /* regla aprendida */

/* --- Revisar: una pantalla, una factura ------------------------------------------ */
.rv-cab { display:flex; align-items:center; gap:.8rem; flex-wrap:wrap; margin:0 0 .6rem; }
.rv-cab h2 { margin:0; font-size:1.05rem; font-weight:600; }
.rv-pos { color:#6b7280; font-size:.9rem; }
/* Fichas de las facturas del documento (solo si hay más de una) y marca de sus páginas en el visor */
.rv-fichas { display:flex; flex-wrap:wrap; gap:.5rem .7rem; margin-right:.3rem; }
.rv-ficha { position:relative; display:inline-flex; font-size:.8rem; border-radius:999px; }
.rv-ficha-sel { font:inherit; border:none; background:none; color:inherit; padding:.15rem .6rem; cursor:pointer; border-radius:999px; }
.rv-ficha.ok { color:#15803d; background:#dcfce7; }
.rv-ficha.mal { color:#b45309; background:#fef3c7; }
.rv-ficha.nofra { color:#6b7280; background:#f3f4f6; align-items:center; }
.rv-ficha.nofra .rv-ficha-sel { cursor:default; }
.rv-ficha .rv-esfra { font-size:.75rem; margin:0 .5rem 0 0; }
.rv-ficha.actual { box-shadow:0 0 0 2px #2563eb; font-weight:600; }
.rv-ficha.actual .rv-ficha-sel { cursor:default; }
.rv-ficha:not(.actual):hover { filter:brightness(.93); }
/* × roja en superíndice: descarta ese rango de páginas (con deshacer) */
.rv-ficha-x { position:absolute; top:-.45rem; right:-.4rem; width:1.05rem; height:1.05rem; border:none; border-radius:50%;
    background:#dc2626; color:#fff; font:700 .7rem/1.05rem system-ui, sans-serif; padding:0; cursor:pointer; }
.rv-ficha-x:hover { background:#b91c1c; }
.rev-visor .pdf-page.actual { outline:3px solid #2563eb; outline-offset:-3px; }
.rev-visor .pdf-pages.marcado .pdf-page:not(.actual) { opacity:.5; }
.rev-visor .pdf-page.oculta { display:none; }   /* páginas descartadas */
.rv-estado { font-size:.85rem; border-radius:999px; padding:.15rem .7rem; font-weight:600; }
.rv-estado.ok { color:#15803d; background:#dcfce7; }
.rv-estado.mal { color:#b45309; background:#fef3c7; }
.rv-form label { display:block; font-size:.82rem; color:#6b7280; margin:.55rem 0 0; }
.rv-form label input { display:block; width:100%; box-sizing:border-box; margin-top:.15rem; padding:.4rem .5rem;
    border:1px solid #d1d5db; border-radius:6px; font:inherit; color:#1f2937; }
.rv-form input.inv { border-color:#dc2626; background:#fef2f2; }
.rv-grid2 { display:grid; grid-template-columns:1fr 1fr; gap:.6rem; }
.rv-chip { display:flex; align-items:center; gap:.6rem; margin-top:.15rem; padding:.4rem .6rem; background:#f0fdf4;
    border:1px solid #bbf7d0; border-radius:6px; font-size:.95rem; }
.rv-lineas { width:100%; border-collapse:collapse; margin-top:.3rem; }
.rv-lineas th { font-size:.78rem; color:#6b7280; font-weight:500; text-align:left; padding:.2rem .3rem; }
.rv-lineas td { padding:.15rem .3rem; }
.rv-lineas input { width:100%; box-sizing:border-box; padding:.35rem .45rem; border:1px solid #d1d5db; border-radius:6px;
    font:inherit; text-align:right; }
.rv-num { color:#b45309; font-size:.85rem; margin:.4rem 0 0; }
.rv-total { display:flex; justify-content:space-between; align-items:baseline; margin-top:.9rem; padding-top:.6rem;
    border-top:2px solid #e5e7eb; font-size:1.25rem; font-weight:700; }
.rv-mas { margin-top:.5rem; }
.rv-mas summary { cursor:pointer; color:#2563eb; font-size:.88rem; }
/* Las cuatro acciones siempre en una fila: sin salto, huecos y relleno algo más justos */
.rv-bar { display:flex; align-items:center; gap:.45rem; flex-wrap:nowrap; margin-top:1.2rem; padding-top:.8rem; border-top:1px solid #e5e7eb; }
.rv-bar .btn { white-space:nowrap; padding:.5rem .7rem; }
/* Con el panel estrecho la barra no salta de línea: se acortan los textos (el título los dice enteros) */
.rv-bar { container-type:inline-size; }
@container (max-width: 560px) { .rv-bar .rv-t1 { display:none; } }
@container (max-width: 400px) { .rv-bar .rv-t2 { display:none; } }
.rv-sep { flex:1; }
.rv-bar .btn.principal { padding:.55rem 1rem; font-weight:600; }
.rv-guardado { font-size:.8rem; line-height:1rem; color:#9ca3af; text-align:right; margin:.1rem 0 -1.1rem; }
.rv-menu { position:relative; }
/* Confirmación propia (Components/Confirmar.razor), en lugar del confirm() del navegador */
.confirmar-fondo { position:fixed; inset:0; background:rgba(17,24,39,.35); z-index:50; }
.confirmar-caja { position:fixed; z-index:51; left:50%; top:30%; transform:translate(-50%,-30%); width:min(440px, calc(100vw - 2rem));
    background:#fff; border-radius:10px; box-shadow:0 12px 40px rgba(0,0,0,.25); padding:1.1rem 1.2rem 1rem; }
.confirmar-texto { margin:0 0 .8rem; color:#1f2937; line-height:1.45; }
.confirmar-chk { display:flex; align-items:center; gap:.45rem; font-size:.88rem; color:#4b5563; margin-bottom:.9rem; cursor:pointer; }
.confirmar-botones { display:flex; justify-content:flex-end; gap:.5rem; }
.btn.rojo { background:#dc2626; color:#fff; }
.btn.rojo:hover { background:#b91c1c; }
.rv-bar .btn.rv-mas-btn { background:#fce7f3; color:#9d174d; font-weight:700; }   /* «···» en rosa */
.rv-bar .btn.rv-mas-btn:hover { background:#fbcfe8; }
.rv-menu-lista { position:absolute; right:0; bottom:110%; min-width:290px; background:#fff; border:1px solid #d1d5db;
    border-radius:8px; box-shadow:0 8px 24px rgba(0,0,0,.12); padding:.3rem; z-index:20; }
.rv-menu-lista button, .rv-menu-lista a { display:block; width:100%; text-align:left; background:none; border:0;
    padding:.45rem .7rem; font:inherit; color:#1f2937; cursor:pointer; text-decoration:none; border-radius:6px; }
.rv-menu-lista button:hover, .rv-menu-lista a:hover { background:#f3f4f6; }
.rv-menu-lista .peligro { color:#b91c1c; }
.rv-menu-lista { z-index:6; }
.rv-menu-fondo { position:fixed; inset:0; z-index:5; }   /* pulsar fuera del menú lo cierra */
.rv-dividir { display:flex; gap:.4rem; align-items:center; padding:.45rem .7rem; font-size:.9rem; }
.rv-dividir input { width:4.5rem; }
.rv-aviso { display:flex; gap:.6rem; align-items:center; background:#fffbeb; border:1px solid #fde68a; border-radius:6px;
    padding:.45rem .7rem; font-size:.9rem; margin-bottom:.6rem; }
.rv-vacio { text-align:center; padding:4rem 1rem; color:#6b7280; }
.rev-page.rv .rev-visor { flex:1 1 55%; }
.rev-page.rv .rev-panel { flex:0 1 45%; max-width:600px; }
.fis-resumen { margin:.3rem 0 0; color:#374151; line-height:1.6; }
.relanzar { display:flex; align-items:center; gap:.8rem; flex-wrap:wrap; margin:-.4rem 0 .9rem; }
.aviso-txt { color:#b45309; }

.login-legal { margin:.7rem 0 0; font-size:.78rem; color:#9ca3af; text-align:center; }
.login-legal a { color:#2563eb; }

/* Espacio del gestor (/espacio) */
.espacio-uso { max-width:640px; margin:.2rem 0 1rem; }
.espacio-barra { height:12px; background:#e5e7eb; border-radius:6px; overflow:hidden; }
.espacio-barra span { display:block; height:100%; background:#16a34a; }
.espacio-barra span.alto { background:#d97706; }
.espacio-barra span.lleno { background:#dc2626; }
.espacio-uso p { margin:.4rem 0 0; }
.check-inline { display:inline-flex; align-items:center; gap:.35rem; white-space:nowrap; font-weight:normal; }
