/* v15: rendimiento visual, accesibilidad, móvil y seguimiento longitudinal. */
.apv15 { min-width: 0; }
.apv15-tabs { display:flex; flex-wrap:wrap; gap:.55rem; margin:0 0 1rem; padding:.55rem; border:1px solid var(--border,#cbd8d5); border-radius:18px; background:var(--surface,#fff); }
.apv15-tabs button { appearance:none; border:1px solid var(--border,#cbd8d5); border-radius:999px; background:transparent; padding:.65rem 1rem; font:inherit; font-weight:800; cursor:pointer; color:inherit; }
.apv15-tabs button.active, .apv15-tabs button:focus-visible { background:var(--primary,#08765f); color:#fff; border-color:var(--primary,#08765f); outline:3px solid color-mix(in srgb, var(--primary,#08765f) 30%, transparent); outline-offset:2px; }
.apv15-metrics { display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:.75rem; margin-bottom:1rem; }
.apv15-metrics button { text-align:left; border:1px solid var(--border,#cbd8d5); border-radius:16px; background:var(--surface,#fff); padding:1rem; cursor:pointer; color:inherit; min-height:94px; }
.apv15-metrics button:hover, .apv15-metrics button:focus-visible { border-color:var(--primary,#08765f); box-shadow:0 0 0 3px color-mix(in srgb, var(--primary,#08765f) 16%, transparent); outline:none; }
.apv15-metrics strong { display:block; font-size:1.8rem; color:var(--primary,#08765f); }
.apv15-metrics span { display:block; margin-top:.2rem; font-weight:700; }
.apv15-grid-2 { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:1rem; }
.apv15-grid-care { display:grid; grid-template-columns:minmax(300px,.8fr) minmax(0,1.4fr); gap:1rem; align-items:start; }
.apv15-card { min-width:0; border:1px solid var(--border,#cbd8d5); border-radius:18px; background:var(--surface,#fff); padding:1rem; margin-bottom:1rem; overflow:hidden; }
.apv15-card > header { display:flex; align-items:flex-start; justify-content:space-between; gap:1rem; margin-bottom:.75rem; }
.apv15-card h4 { margin:0; font-size:1.2rem; }
.apv15-card header p { margin:.2rem 0 0; color:var(--muted,#5c6b68); }
.apv15-list { list-style:none; margin:0; padding:0; display:grid; gap:.55rem; }
.apv15-list li { display:grid; grid-template-columns:auto minmax(0,1fr) auto; gap:.65rem; align-items:center; border-top:1px solid var(--border,#dbe4e2); padding:.65rem 0; }
.apv15-list li:first-child { border-top:0; }
.apv15-list small, .apv15-table small { display:block; color:var(--muted,#5c6b68); overflow-wrap:anywhere; }
.apv15-severity, .apv15-status, .apv15-health { display:inline-flex; align-items:center; justify-content:center; border-radius:999px; padding:.25rem .55rem; font-size:.78rem; font-weight:900; white-space:nowrap; }
.apv15-severity.critica { background:#7f1d1d; color:#fff; }
.apv15-severity.alta { background:#fee2e2; color:#991b1b; }
.apv15-severity.media { background:#fef3c7; color:#854d0e; }
.apv15-severity.baja { background:#dbeafe; color:#1e40af; }
.apv15-severity.informativa { background:#e5e7eb; color:#374151; }
.apv15-status.pending { background:#fef3c7; color:#854d0e; }
.apv15-status.in_progress { background:#dbeafe; color:#1e40af; }
.apv15-status.completed, .apv15-health.ok { background:#dcfce7; color:#166534; }
.apv15-status.cancelled, .apv15-health.warn { background:#f3f4f6; color:#4b5563; }
.apv15-disclaimer { border-left:5px solid var(--primary,#08765f); background:color-mix(in srgb, var(--primary,#08765f) 6%, var(--surface,#fff)); }
.apv15-filters { display:grid; grid-template-columns:minmax(220px,2fr) repeat(2,minmax(150px,1fr)) auto; gap:.65rem; align-items:end; margin:.7rem 0 1rem; }
.apv15-filters label, .apv15-form label { display:grid; gap:.3rem; font-weight:750; min-width:0; }
.apv15-filters input, .apv15-filters select, .apv15-form input, .apv15-form select, .apv15-form textarea { width:100%; min-width:0; box-sizing:border-box; }
.apv15-table-wrap { overflow:auto; max-width:100%; border:1px solid var(--border,#dbe4e2); border-radius:14px; }
.apv15-table { width:100%; border-collapse:collapse; min-width:880px; }
.apv15-table th, .apv15-table td { padding:.65rem; border-bottom:1px solid var(--border,#dbe4e2); text-align:left; vertical-align:top; }
.apv15-table th { position:sticky; top:0; background:var(--soft,#edf5f2); z-index:1; }
.apv15-pagination { display:flex; justify-content:center; align-items:center; gap:.75rem; margin-top:.8rem; flex-wrap:wrap; }
.apv15-pagination button { border:1px solid var(--border,#cbd8d5); border-radius:999px; background:var(--surface,#fff); padding:.45rem .8rem; font:inherit; font-weight:750; cursor:pointer; color:inherit; }
.apv15-pagination button:disabled { opacity:.45; cursor:not-allowed; }
.apv15-form { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:.75rem; }
.apv15-form .span-2 { grid-column:span 2; }
.apv15-care-list { display:grid; gap:.75rem; }
.apv15-care-list article { border:1px solid var(--border,#dbe4e2); border-radius:14px; padding:.85rem; overflow-wrap:anywhere; }
.apv15-care-list article header { display:flex; align-items:center; gap:.55rem; margin-bottom:.45rem; }
.apv15-care-list article p { margin:.35rem 0; }
.apv15-care-list details { margin:.5rem 0; }
.apv15-timeline { list-style:none; padding:0; margin:0; position:relative; }
.apv15-timeline::before { content:""; position:absolute; left:106px; top:0; bottom:0; width:2px; background:var(--border,#cbd8d5); }
.apv15-timeline li { display:grid; grid-template-columns:90px minmax(0,1fr); gap:2rem; padding:.65rem 0; position:relative; }
.apv15-timeline li::before { content:""; position:absolute; left:99px; top:1.1rem; width:14px; height:14px; border-radius:50%; background:var(--primary,#08765f); border:3px solid var(--surface,#fff); box-shadow:0 0 0 2px var(--primary,#08765f); }
.apv15-timeline time { text-align:right; font-weight:800; font-size:.85rem; }
.apv15-timeline p { margin:.2rem 0; color:var(--muted,#5c6b68); }
.apv15-definition { display:grid; grid-template-columns:minmax(130px,.8fr) minmax(0,1.2fr); gap:.45rem .8rem; }
.apv15-definition dt { font-weight:850; }
.apv15-definition dd { margin:0; overflow-wrap:anywhere; }
.apv15-checklist { list-style:none; padding:0; display:grid; gap:.5rem; }
.apv15-checklist li::before { display:inline-block; width:1.4rem; font-weight:900; }
.apv15-checklist li.done::before { content:"✓"; color:#15803d; }
.apv15-checklist li.pending::before { content:"!"; color:#a16207; }
.btn.danger { color:#b91c1c; border-color:#fecaca; }

/* Accesibilidad transversal. */
:where(button,a,input,select,textarea,summary):focus-visible { outline:3px solid #f59e0b !important; outline-offset:2px !important; }
[aria-invalid="true"] { border-color:#c2410c !important; box-shadow:0 0 0 2px rgba(194,65,12,.16); }
.ap-skip-link { position:fixed; left:1rem; top:-5rem; z-index:100000; background:#111827; color:#fff; padding:.7rem 1rem; border-radius:8px; }
.ap-skip-link:focus { top:1rem; }
.ap-live-region { position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0; }

/* Móvil/tableta: nunca permitir que controles amplíen el lienzo. */
html, body, #app, .ap-module, .ap-panel { max-width:100%; }
.ap-module, .ap-panel, .card { min-width:0; }
input, select, textarea, button { max-width:100%; }
@media (max-width: 900px) {
  .apv15-grid-2, .apv15-grid-care { grid-template-columns:1fr; }
  .apv15-filters { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .apv15-filters button { width:100%; }
  .apv15-card > header { flex-direction:column; }
}
@media (max-width: 620px) {
  .apv15-tabs { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); }
  .apv15-tabs button { padding:.7rem .45rem; }
  .apv15-metrics { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .apv15-filters, .apv15-form { grid-template-columns:1fr; }
  .apv15-form .span-2 { grid-column:auto; }
  .apv15-list li { grid-template-columns:1fr; }
  .apv15-list .btn { width:100%; }
  .apv15-timeline::before { left:8px; }
  .apv15-timeline li { grid-template-columns:1fr; gap:.2rem; padding-left:1.8rem; }
  .apv15-timeline li::before { left:2px; }
  .apv15-timeline time { text-align:left; }
  .apv15-definition { grid-template-columns:1fr; }
  .apv15-definition dd { margin-bottom:.45rem; }
  .ap-heading .actions, .actions { flex-wrap:wrap; }
  .actions > .btn, .actions > button { flex:1 1 160px; }
}
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { scroll-behavior:auto !important; animation-duration:.001ms !important; transition-duration:.001ms !important; }
}
@media print { .apv15, .ap-skip-link, .ap-live-region { display:none !important; } }

/* Diálogos accesibles y estados de calidad v15.1 */
.ap-dialog-open{overflow:hidden}
.ap-modal-overlay{position:fixed;inset:0;z-index:10050;background:rgba(0,0,0,.58);display:grid;place-items:center;padding:1rem}
.ap-modal{width:min(620px,100%);max-height:92vh;overflow:auto;background:var(--card,#fff);color:var(--ink,#182522);border-radius:22px;padding:1.1rem;box-shadow:0 24px 70px rgba(0,0,0,.35)}
.ap-modal>header{display:flex;align-items:center;justify-content:space-between;gap:1rem}.ap-modal>header h2{margin:0}.ap-modal-close{border:0;background:transparent;font-size:2rem;line-height:1;cursor:pointer}
.ap-modal-form{display:grid;gap:1rem}.ap-modal-form label{display:grid;gap:.4rem;font-weight:700}.ap-modal-form input,.ap-modal-form textarea,.ap-modal-form select{width:100%;box-sizing:border-box}
.ap-modal-actions{display:flex;justify-content:flex-end;gap:.65rem;flex-wrap:wrap}.ap-modal-error{min-height:1.3em;color:#a71912;font-weight:700}.ap-password-row{display:grid;grid-template-columns:1fr auto;gap:.5rem}.ap-modal meter{width:100%;height:1rem}
.ap-focus-highlight{outline:4px solid #e69a00!important;outline-offset:3px}
.apv15-duplicate-card,.apv15-referral-card{border:1px solid var(--border,#cedbd7);border-radius:14px;padding:.85rem;margin:.65rem 0;background:var(--soft,#f5faf8)}
.apv15-duplicate-card header,.apv15-referral-card header{display:flex;justify-content:space-between;gap:1rem;align-items:flex-start}
.apv15-storage-meter{display:grid;gap:.35rem}.apv15-storage-meter progress{width:100%;height:1rem}
.apv15-audit-chain.ok{color:#08765f}.apv15-audit-chain.warn{color:#9a5b00}.apv15-audit-chain.error{color:#a71912}
@media(max-width:640px){.ap-modal{border-radius:16px;padding:.85rem}.ap-modal-actions>*{flex:1}.ap-password-row{grid-template-columns:1fr}.apv15-duplicate-card header,.apv15-referral-card header{display:block}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{scroll-behavior:auto!important;animation-duration:.01ms!important;transition-duration:.01ms!important}}

/* Build r4 · navegación guiada de advertencias y errores */
.ap-issue-dialog-list{display:grid;gap:.65rem;margin-top:.35rem}
.ap-issue-dialog-item{width:100%;display:grid;grid-template-columns:auto 1fr auto;gap:.75rem;align-items:center;text-align:left;border:1px solid var(--border,#cedbd7);background:var(--soft,#f5faf8);color:inherit;border-radius:14px;padding:.8rem .9rem;cursor:pointer}
.ap-issue-dialog-item:hover,.ap-issue-dialog-item:focus-visible{border-color:#b87300;outline:3px solid rgba(230,154,0,.25);outline-offset:2px}
.ap-issue-dialog-item strong,.ap-issue-dialog-item small{display:block}.ap-issue-dialog-item small{margin-top:.2rem;font-weight:500;line-height:1.35}.ap-issue-dialog-number{display:grid;place-items:center;width:1.8rem;height:1.8rem;border-radius:999px;background:#fff3d6;color:#7f5200;font-weight:800}.ap-issue-dialog-go{font-weight:800;white-space:nowrap}
.ap-guided-issue-focus{outline:4px solid #e69a00!important;outline-offset:4px;border-radius:10px;scroll-margin:9rem 0;animation:ap-guided-pulse .9s ease-in-out 2}
.ap-guided-issue-note{display:block;margin:.45rem 0 0;padding:.45rem .6rem;border-radius:8px;font-size:.86rem;font-weight:800}.ap-guided-issue-note.warning{background:#fff3d6;color:#7a4d00}.ap-guided-issue-note.error{background:#ffe4e1;color:#9c2119}
.ap-review-warning-list ul{display:grid;gap:.55rem;padding-left:1.2rem}.ap-review-warning-list li{padding-left:.2rem}.ap-review-warning-list li>span{display:block;margin-bottom:.35rem}
@keyframes ap-guided-pulse{0%,100%{box-shadow:0 0 0 0 rgba(230,154,0,0)}50%{box-shadow:0 0 0 8px rgba(230,154,0,.18)}}
@media(max-width:640px){.ap-issue-dialog-item{grid-template-columns:auto 1fr}.ap-issue-dialog-go{grid-column:2}}
@media(prefers-reduced-motion:reduce){.ap-guided-issue-focus{animation:none}}
