﻿/* ============================================================
   ulen · Design System — Fundación (Trama)
   Pegar UNA sola vez, al inicio de tu CSS global.
   No cambia nada visual: solo deja los tokens disponibles.
   ============================================================ */

/* ─ Fuentes ─ */
@import url('https://fonts.googleapis.com/css2?family=Geist:wght@300;400;500;600;700&family=Geist+Mono:wght@400;500;600&display=swap');

:root {
  /* ─ Color · superficies ─ */
  --color-paper:        #F4F5F0;
  --color-hush:         #E9EBE2;
  --color-clay:         #D8C8B0;

  /* ─ Color · marca ─ */
  --color-green:        #2C5A48;
  --color-ink:          #0F1F18;

  /* ─ Color · estructura ─ */
  --color-mesh:         #6FA88A;

  /* ─ Color · data / estados ─ */
  --color-lime:         #C4D87C;
  --color-amber:        #D9A441;
  --color-rust:         #C25D3E;
  --color-sky:          #4A7A8C;

  /* ─ Color · líneas (mesh + alpha) ─ */
  --line:               rgba(111, 168, 138, 0.40);
  --line-soft:          rgba(111, 168, 138, 0.22);
  --line-hush:          rgba(111, 168, 138, 0.55);

  /* ─ Semánticos ─ */
  --bg:                 var(--color-paper);
  --bg-elevated:        var(--color-hush);
  --bg-warm:            var(--color-clay);
  --bg-inverse:         var(--color-ink);

  --fg:                 var(--color-ink);
  --fg-muted:           rgba(15, 31, 24, 0.65);
  --fg-subtle:          rgba(15, 31, 24, 0.45);
  --fg-on-brand:        var(--color-paper);
  --fg-on-ink:          var(--color-paper);

  --brand:              var(--color-green);
  --brand-hover:        var(--color-ink);
  --brand-active:       var(--color-ink);
  --brand-disabled:     rgba(44, 90, 72, 0.4);

  --accent:             var(--color-lime);

  --state-ok:           var(--color-lime);
  --state-warn:         var(--color-amber);
  --state-crit:         var(--color-rust);
  --state-info:         var(--color-sky);

  --error:              var(--color-rust);
  --error-bg:           rgba(194, 93, 62, 0.08);
  --input-focus:        #FFFFFF;

  /* ─ Aliases cortos (compat con código ya escrito: .ind2, etc.) ─
     Permiten que los bloques que ya usan nombres cortos consuman
     estas variables globales y borren su copia local. */
  --paper:  var(--color-paper);
  --hush:   var(--color-hush);
  --clay:   var(--color-clay);
  --green:  var(--color-green);
  --ink:    var(--color-ink);
  --mesh:   var(--color-mesh);
  --lime:   var(--color-lime);
  --amber:  var(--color-amber);
  --rust:   var(--color-rust);
  --sky:    var(--color-sky);
  --cancel: #9E948A;
  --sans:   var(--font-sans);
  --mono:   var(--font-mono);

  /* ─ Tipografía ─ */
  --font-sans: "Geist", -apple-system, BlinkMacSystemFont, system-ui, sans-serif;
  --font-mono: "Geist Mono", ui-monospace, "SF Mono", monospace;

  --fw-light:    300;
  --fw-regular:  400;
  --fw-medium:   500;
  --fw-semibold: 600;
  --fw-bold:     700;

  --fs-mono-xs: 9px;
  --fs-mono-sm: 10px;
  --fs-mono-md: 11px;
  --fs-mono-lg: 12px;
  --fs-xs:      11px;
  --fs-sm:      12px;
  --fs-base:    13px;
  --fs-md:      14px;
  --fs-lg:      16px;
  --fs-h4:      18px;
  --fs-h3:      20px;
  --fs-h2:      24px;
  --fs-h1:      32px;
  --fs-display-sm: 38px;
  --fs-display-md: 56px;
  --fs-display-lg: 92px;
  --fs-display-xl: 120px;

  --lh-none:   1;
  --lh-tight:  1.1;
  --lh-snug:   1.3;
  --lh-normal: 1.55;
  --lh-mono:   1.7;

  --ls-tighter: -0.045em;
  --ls-tight:   -0.04em;
  --ls-snug:    -0.025em;
  --ls-normal:  -0.01em;
  --ls-base:    0;
  --ls-mono:    0.04em;
  --ls-wide:    0.08em;
  --ls-caps:    0.14em;
  --ls-caps-x:  0.18em;

  /* ─ Espaciado (4px base) ─ */
  --space-0:  0;
  --space-1:  4px;
  --space-2:  8px;
  --space-3:  12px;
  --space-4:  14px;
  --space-5:  16px;
  --space-6:  18px;
  --space-7:  20px;
  --space-8:  22px;
  --space-9:  24px;
  --space-10: 28px;
  --space-11: 32px;
  --space-12: 36px;
  --space-13: 40px;
  --space-14: 48px;
  --space-15: 56px;

  /* ─ Bordes / radio ─ */
  --radius-none: 0;
  --radius-sm:   2px;
  --radius-md:   4px;

  --border:        1px solid var(--line);
  --border-soft:   1px solid var(--line-soft);
  --border-strong: 1px solid var(--brand);

  /* ─ Sombras ─ */
  --shadow-none: none;
  --shadow-sm:   0 1px 0 rgba(15, 31, 24, 0.04);
  --shadow-md:   0 1px 0 rgba(15, 31, 24, 0.04),
                 0 30px 80px -20px rgba(15, 31, 24, 0.25);
  --shadow-chrome: 0 2px 0 rgba(0,0,0,.05),
                   0 30px 60px -20px rgba(0,0,0,.18);

  /* ─ Animación ─ */
  --t-fast: 0.15s;
  --t-base: 0.2s;
  --t-snap: 0.05s;

  /* ─ Grid técnico decorativo ─ */
  --grid-cell:    32px;
  --grid-cell-sm: 24px;
  --grid-stroke:  0.5px;
}

/* Selección global */
::selection {
  background: var(--color-lime);
  color: var(--color-ink);
}

/* ----------- GENERAL ----------- */
body { margin: 0; font-family: var(--font-sans); overflow: hidden; }
@keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
#pageOverlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: white; z-index: 9999; opacity: 0; pointer-events: none; transition: opacity 0.4s ease-in-out; }
body.dark-mode .sidebar, body.dark-mode .panel { background: #222 !important; color: white; }
body.dark-mode .viewer { background: #333 !important; color: white; }

/* ----------- PROYECTOS ----------- */
.brand-top { font-size: 20px; font-weight: bold; margin-right: 15px; }
.user-menu-wrapper { margin-left: auto; position: relative; display: flex; flex-direction: row; align-items: center; gap: 16px; width: auto; }
.user-pill { display: flex; align-items: center; background: rgba(255,255,255,0.2); padding: 4px 10px; border-radius: 50px; cursor: pointer; transition: 0.3s; box-sizing: border-box; }
.user-pill:hover { background: rgba(255,255,255,0.3); }
.user-avatar { width: 32px; height: 32px; background: white; color: #1f3c88; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: bold; margin-right: 10px; font-size: 13px; flex-shrink: 0; line-height: 1; text-align: center; }
.user-pill span { color: white; font-weight: 500; font-size: 15px; }
.dropdown-box { display: none; position: absolute; top: 45px; right: 0; background: #f8f9fa; width: 260px; border-radius: 8px; box-shadow: 0 10px 30px rgba(0,0,0,0.2); overflow: hidden; z-index: 1000; border: 1px solid #ddd; text-align: left; box-sizing: border-box; }
.dropdown-header { padding: 15px; background: white; border-bottom: 1px solid #eee; }
.dropdown-header b { display: block; color: #333; font-size: 16px; font-weight: bold; }
.dropdown-header span { color: #666; font-size: 13px; }
.dropdown-section, .dropdown-item-link { padding: 12px 15px; background: white; border-bottom: 1px solid #eee; font-size: 14px; display: block; box-sizing: border-box; }
.dropdown-section label { display: block; color: #333; font-weight: bold; margin-bottom: 2px; }
.dropdown-section p { margin: 0; color: #333; font-weight: normal; }
.dropdown-item-link { background: #f8f9fa; color: #333; cursor: pointer; font-weight: bold; }
.dropdown-item-link:hover { background: #f0f0f0; }
.logout-container { background: white; padding: 0; }
.btn-cerrar-sesion { background: #e74c3c; color: white; width: 100%; padding: 15px; border: none; font-weight: bold; cursor: pointer; border-radius: 0 0 8px 8px; }
.project-header { height: 60px; color: white; display: flex; align-items: center; padding: 0 20px; }
.project-content { height: calc(100vh - 60px); display: flex; justify-content: flex-end; align-items: center; padding-right: 100px; position: relative; }
.project-image-viewer { position: absolute; left: calc(50% - 210px); top: 50%; transform: translate(-50%, -50%); width: 65%; max-width: 1000px; height: 85%; display: flex; align-items: center; justify-content: center; background: transparent; border: none; box-shadow: none; transition: all 0.4s cubic-bezier(0.165, 0.84, 0.44, 1); }
.project-image-viewer.with-image { background: rgba(255,255,255,0.05); border: 1px solid rgba(255,255,255,0.2); border-radius: 15px; box-shadow: 0 20px 60px rgba(0,0,0,0.4); overflow: hidden; }
#viewerPlaceholder { color: rgba(255,255,255,0.7); font-size: 48px; font-weight: 300; letter-spacing: 2px; text-align: center; user-select: none; }
.project-image-viewer img { width: 100%; height: 100%; object-fit: cover; display: none; }
.project-row { display: flex; gap: 5px; }
.btn-project { flex: 1; margin-top: 0; }
.btn-info { width: 60px; background: #ecf0f1; color: #2c3e50; font-size: 14px; margin-top: 0; }
.project-desc { max-height: 0; overflow: hidden; transition: max-height 0.3s ease-out, padding 0.3s ease; background: #f9f9f9; font-size: 13px; color: #555; border-radius: 0 0 6px 6px; padding: 0 10px; line-height: 1.4; }
.project-desc.open { max-height: 100px; padding: 10px; border: 1px solid #eee; border-top: none; }

/* --- MODALES OVERLAY --- */
.overlay-details { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(15,23,42,0.9); backdrop-filter: blur(8px); z-index: 10000; justify-content: center; align-items: center; transition: background 0.5s ease, backdrop-filter 0.5s ease; }

.overlay-details.modo-visor { background: rgba(15,23,42,0); backdrop-filter: blur(0px); pointer-events: none; align-items: flex-start; padding-top: 60px; }

.modal-card { background: white; width: 95%; max-width: 650px; max-height: 90vh; border-radius: 12px; position: relative; overflow-y: auto; box-shadow: 0 30px 60px rgba(0,0,0,0.5); transition: transform 0.5s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.5s ease; }

.overlay-details.modo-visor .modal-card { transform: translateX(calc(-50vw + 260px)); max-height: calc(100vh - 60px); box-shadow: 0 8px 32px rgba(0,0,0,0.18); pointer-events: all; }
.modal-card { background: white; width: 95%; max-width: 650px; max-height: 90vh; border-radius: 12px; position: relative; overflow-y: auto; box-shadow: 0 30px 60px rgba(0,0,0,0.5); }
.close-x { position: absolute; top: 15px; right: 25px; font-size: 40px; color: white; cursor: pointer; z-index: 11; transition: transform 0.3s; }
.close-x:hover { transform: rotate(90deg); }
.modal-image { width: 100%; height: 220px; overflow: hidden; }
.modal-image img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.5s; }
.modal-card:hover .modal-image img { transform: scale(1.05); }
.modal-body { padding: 35px; }
.discipline-tag { background: #1f3c88; color: white; padding: 4px 12px; border-radius: 4px; font-weight: bold; font-size: 12px; margin-right: 8px; }
.tech-description { color: #334155; font-size: 14px; line-height: 1.7; text-align: justify; margin-top: 20px; }
.tech-list { margin-top: 15px; padding-left: 18px; }
.tech-list li { margin-bottom: 10px; font-size: 14px; color: #334155; }
.map-container { width: 100%; height: 250px; border-radius: 8px; overflow: hidden; border: 1px solid #e2e8f0; margin-top: 15px; }

/* --- MODAL ACTIVO --- */
#activoOverlay .modal-card { max-width: 520px; }
.activo-header { background: linear-gradient(135deg, #1f3c88, #39a2db); color: white; padding: 20px 25px; border-radius: 12px 12px 0 0; }
.activo-header-top { display: flex; justify-content: space-between; align-items: flex-start; }
.activo-header h2 { margin: 0 0 6px 0; font-size: 20px; font-weight: 700; color: white; }
.activo-header-sub { font-size: 12px; color: rgba(255,255,255,0.75); font-weight: 500; text-transform: uppercase; letter-spacing: 1px; }
.activo-status-badge { font-size: 11px; padding: 4px 12px; border-radius: 20px; font-weight: 700; background: rgba(255,255,255,0.2); color: white; border: 1px solid rgba(255,255,255,0.4); white-space: nowrap; }
.activo-img { width: 100%; height: 160px; background: #ecf0f1; border-bottom: 1px solid #e2e8f0; overflow: hidden; }
.activo-img img { width: 100%; height: 100%; object-fit: cover; }
.activo-section { padding: 20px 25px; border-bottom: 1px solid #e2e8f0; }
.activo-section-title { font-size: 11px; font-weight: 800; color: #94a3b8; text-transform: uppercase; letter-spacing: 1px; margin: 0 0 14px 0; }
.activo-section-subtitle { font-size: 11px; font-weight: 700; color: #64748b; text-transform: uppercase; letter-spacing: 0.8px; margin: 16px 0 8px 0; }
.activo-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.activo-field { display: flex; flex-direction: column; gap: 3px; }
.activo-field.full { grid-column: 1 / -1; }
.activo-field-label { font-size: 11px; color: #94a3b8; font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; }
.activo-field-value { width: 100%; padding: 8px 10px; border-radius: 6px; border: 1px solid #ccc; font-size: 14px; background-color: #f9f9f9; color: #333; font-weight: 500; box-sizing: border-box; }
.activo-field-input { width: 100%; padding: 8px 10px; border-radius: 6px; border: 1px solid #39a2db; font-size: 14px; background-color: white; color: #1e293b; font-weight: 500; box-sizing: border-box; font-family: inherit; outline: none; margin-top: 0; transition: border-color 0.2s, box-shadow 0.2s; }
.activo-field-input:focus { border-color: #1f3c88; box-shadow: 0 0 0 3px rgba(57,162,219,0.15); }
.activo-field-calc { width: 100%; padding: 8px 10px; border-radius: 6px; border: 1px dashed #39a2db; font-size: 14px; background-color: #f0f9ff; color: #1e40af; font-weight: 600; box-sizing: border-box; }
/* ── docs-block ─────────────────────────────────────────────── */
[id^="docs-bloque"] { margin-top: 14px; }
.docs-hist-row { display: flex; justify-content: flex-end; margin-bottom: 10px; }
.docs-hist-lbl { display: flex; align-items: center; gap: 6px; font-size: 12px; color: #64748b; cursor: pointer; user-select: none; }
.docs-hist-lbl input[type="checkbox"] { accent-color: #2C5A48; cursor: pointer; }
.docs-group { margin-bottom: 14px; border: 1px solid #e2e8f0; border-radius: 2px; overflow: hidden; }
.docs-group-hdr { display: flex; justify-content: space-between; align-items: center; padding: 8px 12px; background: #f8fafc; border-bottom: 1px solid #e2e8f0; }
.docs-group-lbl { font-size: 11px; font-weight: 800; color: #2C5A48; text-transform: uppercase; letter-spacing: 1px; }
.docs-add-btn { display: flex; align-items: center; gap: 4px; padding: 4px 10px; border: 1px solid #2C5A48; border-radius: 2px; background: transparent; color: #2C5A48; font-size: 12px; font-weight: 600; cursor: pointer; transition: background 0.15s, color 0.15s; }
.docs-add-btn:hover { background: #2C5A48; color: #fff; }
.docs-tipo-warn { display: flex; align-items: center; gap: 6px; padding: 6px 12px; background: #fefce8; border-bottom: 1px solid #fde68a; font-size: 12px; color: #92400e; }
.docs-list { padding: 4px 0; }
.docs-empty { padding: 10px 12px; font-size: 12px; color: #94a3b8; font-style: italic; margin: 0; }
.doc-item { display: flex; align-items: center; gap: 10px; padding: 8px 12px; border-bottom: 1px solid #f1f5f9; transition: background 0.1s; }
.doc-item:last-child { border-bottom: none; }
.doc-item:hover { background: #f8fafc; }
.doc-item-hist { opacity: 0.55; }
.doc-mime-icon { font-size: 18px; color: #64748b; flex-shrink: 0; }
.doc-info { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.doc-nombre { font-size: 13px; font-weight: 600; color: #0F1F18; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.doc-tipo { font-size: 11px; color: #94a3b8; }
.doc-hist-badge { flex-shrink: 0; font-size: 10px; font-weight: 700; color: #94a3b8; border: 1px solid #e2e8f0; border-radius: 2px; padding: 1px 5px; text-transform: uppercase; letter-spacing: 0.5px; }
.doc-btns { display: flex; align-items: center; gap: 2px; flex-shrink: 0; }
.doc-btn { display: flex; align-items: center; justify-content: center; width: 28px; height: 28px; border: none; border-radius: 2px; background: transparent; color: #64748b; cursor: pointer; text-decoration: none; font-size: 15px; transition: background 0.15s, color 0.15s; }
.doc-btn:hover { background: #e2e8f0; color: #0F1F18; }
.doc-btn-del:hover { background: #fee2e2; color: #b91c1c; }
.docs-form { display: none; padding: 10px 12px; background: #f8fafc; border-top: 1px solid #e2e8f0; gap: 8px; flex-direction: column; }
.docs-form.docs-form-open { display: flex; }
.docs-form-fields { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.docs-form-input { padding: 6px 8px; border: 1px solid #cbd5e1; border-radius: 2px; font-size: 13px; font-family: inherit; color: #0F1F18; background: #fff; outline: none; }
.docs-form-input:focus { border-color: #2C5A48; box-shadow: 0 0 0 2px rgba(44,90,72,0.12); }
.docs-file-lbl { display: flex; align-items: center; gap: 5px; padding: 6px 10px; border: 1px dashed #cbd5e1; border-radius: 2px; font-size: 12px; color: #64748b; cursor: pointer; background: #fff; transition: border-color 0.15s; white-space: nowrap; }
.docs-file-lbl:hover { border-color: #2C5A48; color: #2C5A48; }
.docs-form-actions { display: flex; gap: 8px; }
.docs-btn-confirm { padding: 6px 14px; border: none; border-radius: 2px; background: #2C5A48; color: #fff; font-size: 12px; font-weight: 700; cursor: pointer; transition: background 0.15s; }
.docs-btn-confirm:hover { background: #0F1F18; }
.docs-btn-cancel { padding: 6px 14px; border: 1px solid #cbd5e1; border-radius: 2px; background: transparent; color: #64748b; font-size: 12px; cursor: pointer; transition: background 0.15s; }
.docs-btn-cancel:hover { background: #f1f5f9; }
/* ── /docs-block ─────────────────────────────────────────────── */
.ver-visor-btn { margin-top: 10px; padding: 6px 10px; background: transparent; border: 1px solid #2c3e50; border-radius: 6px; color: #2c3e50; font-size: 12px; cursor: pointer; width: auto; transition: all 0.2s; }
.ver-visor-btn:hover { background: #2c3e50; color: white; transform: translateY(-1px); }
.contacto-summary { font-size: 12px; color: #3b82f6; font-weight: 600; cursor: pointer; margin-top: 10px; display: inline-block; border-bottom: 1px solid transparent; transition: border-bottom 0.2s; list-style: none; }
.contacto-summary:hover { border-bottom: 1px solid #3b82f6; }
.contacto-details-grid { margin-top: 12px; display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.historial-last { background: #f9fafb; border: 1px solid #ddd; border-radius: 8px; padding: 12px; margin-bottom: 10px; }
.historial-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.historial-item { font-size: 13px; }
.historial-item.full { grid-column: span 2; }
.record-label { font-size: 11px; color: #666; }
.record-value { font-weight: bold; }
.historial-table { width: 100%; border-collapse: collapse; font-size: 12px; margin-top: 10px; }
.historial-table th { background: #f0f2f5; text-align: left; padding: 8px; border: 1px solid #ddd; font-size: 11px; font-weight: 700; color: #64748b; text-transform: uppercase; }
.historial-table td { padding: 8px; border: 1px solid #ddd; color: #334155; }
.historial-table tbody tr:nth-child(even) { background: #f8f9fa; }
.activo-footer { padding: 15px 20px; display: flex; justify-content: flex-end; gap: 10px; border-top: 1px solid #e2e8f0; background: white; border-radius: 0 0 12px 12px; }
.activo-btn { padding: 8px 16px; border-radius: 8px; border: none; cursor: pointer; font-size: 14px; font-weight: bold; font-family: inherit; transition: all 0.2s; width: auto; margin-top: 0; }
.activo-btn:hover { transform: translateY(-2px); }
.activo-btn-secondary { background-color: #bdc3c7; color: #333; }
.activo-btn-edit { background-color: #34495e; color: white; }
.activo-btn-edit:hover { background-color: #2c3e50; }
.activo-btn-save { background-color: #39a2db; color: white; }
.activo-btn-save:hover { background-color: #1f3c88; }
.btn-generar-orden { display: flex; align-items: center; gap: 8px; margin-top: 14px; padding: 9px 16px; background: linear-gradient(135deg, #1f3c88, #39a2db); color: white; border: none; border-radius: 8px; font-size: 13px; font-weight: 600; cursor: pointer; width: auto; font-family: inherit; transition: all 0.2s ease; box-shadow: 0 2px 8px rgba(31,60,136,0.25); }
.btn-generar-orden:hover { background: linear-gradient(135deg, #163070, #1f8ac8); transform: translateY(-1px); box-shadow: 0 4px 14px rgba(31,60,136,0.35); }
.btn-cancelar-orden { display: flex; align-items: center; gap: 8px; margin-top: 14px; padding: 9px 16px; background: #e2e8f0; color: #475569; border: none; border-radius: 8px; font-size: 13px; font-weight: 600; cursor: pointer; width: auto; font-family: inherit; transition: all 0.2s ease; }
.btn-cancelar-orden:hover { background: #cbd5e1; transform: translateY(-1px); }

/* --- MODAL ORDEN DE TRABAJO · migrado a .nueva-ot-v2 (Trama); badges/pills globales Trama arriba --- */

/* =============================================
   PANEL GESTIÓN ÓRDENES DE TRABAJO · migrado a .panel-ot-v2 (Trama)
   Globales .go-* purgados; el overlay #gestionOrdenesOverlay ahora se
   estiliza vía .panel-ot-v2. Layout + color viven scopeados más abajo.
   ============================================= */


/* =============================================
   MODAL INDICADORES
   ============================================= */
#indicadoresOverlay { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(15,31,24,0.55); backdrop-filter: blur(6px); z-index: 10000; justify-content: center; align-items: center; }
.ind-close-fixed { position: fixed; top: 20px; right: 30px; font-size: 40px; color: white; cursor: pointer; z-index: 10001; transition: transform 0.3s; line-height: 1; }
.ind-close-fixed:hover { transform: rotate(90deg); }
.ind-wrapper { display: flex; align-items: flex-start; gap: 20px; max-height: 90vh; }
.ind-panel { background: var(--paper); border-radius: 2px; box-shadow: 0 30px 60px rgba(0,0,0,0.4); overflow: hidden; display: flex; flex-direction: column; max-height: 90vh; width: 1200px; flex-shrink: 0; transition: width 0.45s cubic-bezier(0.4, 0, 0.2, 1); }
.ind-panel.con-ficha { width: 880px; } /* Etapa 2: el dashboard es denso, no se achica tanto al abrir la ficha; el conjunto queda centrado */
.ind-ficha-panel { background: white; border-radius: 12px; box-shadow: 0 30px 60px rgba(0,0,0,0.5); max-height: 90vh; width: 0; opacity: 0; overflow: hidden; flex-shrink: 0; transition: width 0.45s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.35s ease, transform 0.45s cubic-bezier(0.4, 0, 0.2, 1); transform: translateX(-30px); }
.ind-ficha-panel.visible { width: 520px; opacity: 1; transform: translateX(0); overflow-y: auto; }
.ind-ficha-panel.modo-visor-ind { position: fixed !important; top: 60px !important; left: 0 !important; transform: none !important; pointer-events: all; max-height: calc(100vh - 60px); width: 520px !important; z-index: 10001; }
.ind-ficha-topbar { display: flex; justify-content: center; align-items: center; background: linear-gradient(135deg, #1f3c88, #39a2db); padding: 12px 20px; position: relative; border-radius: 12px 12px 0 0; }
.ind-ficha-close-x { position: absolute; right: 16px; font-size: 28px; cursor: pointer; color: rgba(255,255,255,0.8); line-height: 1; transition: color 0.2s, transform 0.2s; }
.ind-ficha-close-x:hover { color: white; transform: rotate(90deg); }
.ind-modal-header { background: linear-gradient(135deg, #1f3c88, #39a2db); padding: 20px 28px; display: flex; justify-content: space-between; align-items: center; flex-shrink: 0; }
.ind-modal-header h2 { margin: 0; font-size: 20px; font-weight: 700; color: white; }
.ind-modal-header p { margin: 4px 0 0; font-size: 12px; color: rgba(255,255,255,0.75); }
.ind-modal-body { padding: 24px 28px; overflow-y: auto; flex: 1; }
.ind-cards-row { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-bottom: 20px; }
.ind-card { border-radius: 10px; padding: 16px 18px; cursor: pointer; transition: all 0.2s ease; border-left: 5px solid transparent; box-shadow: 0 2px 8px rgba(0,0,0,0.06); }
.ind-card:hover { transform: translateY(-2px); box-shadow: 0 6px 16px rgba(0,0,0,0.1); }
.ind-card.active { outline: 2.5px solid #1f3c88; }
.ind-card-total   { background: #eff6ff; border-left-color: #3b82f6; }
.ind-card-vencido { background: #fef2f2; border-left-color: #dc2626; }
.ind-card-pv      { background: #fffbeb; border-left-color: #d97706; }
.ind-card-ok      { background: #f0fdf4; border-left-color: #16a34a; }
.ind-card-num   { font-size: 28px; font-weight: 800; color: #1e293b; line-height: 1; }
.ind-card-label { font-size: 12px; color: #64748b; margin-top: 4px; font-weight: 500; }
.ind-cats-row { display: none; flex-wrap: wrap; gap: 8px; margin-bottom: 20px; animation: fadeIn 0.3s ease; }
.ind-cat-pill { background: white; border: 1.5px solid #e2e8f0; border-radius: 20px; padding: 6px 16px; font-size: 13px; cursor: pointer; display: flex; align-items: center; gap: 8px; transition: all 0.2s ease; font-weight: 500; }
.ind-cat-pill:hover { border-color: #3b82f6; background: #eff6ff; }
.ind-cat-pill.active { background: #1f3c88; color: white; border-color: #1f3c88; }
.ind-cat-num { font-weight: 800; font-size: 15px; }
.ind-cat-pill.active .ind-cat-num { color: white; }
.ind-tabla-wrap { border-radius: 10px; overflow: hidden; border: 1px solid #e2e8f0; }
.ind-tabla { width: 100%; border-collapse: collapse; font-size: 13px; }
.ind-tabla thead th { background: #f1f5f9; padding: 10px 12px; text-align: left; border-bottom: 1px solid #e2e8f0; font-size: 11px; font-weight: 800; color: #64748b; text-transform: uppercase; letter-spacing: 0.5px; }
.ind-tabla tbody tr { transition: background 0.15s; }
.ind-tabla tbody tr:hover { background: #f8fafc; }
.ind-tabla tbody tr:nth-child(even) { background: #fafafa; }
.ind-tabla tbody tr:nth-child(even):hover { background: #f1f5f9; }
.ind-tabla td { padding: 10px 12px; border-bottom: 1px solid #e2e8f0; color: #334155; vertical-align: middle; }
.ind-tabla tbody tr:last-child td { border-bottom: none; }
.ind-badge { display: inline-block; padding: 3px 10px; border-radius: 20px; font-size: 11px; font-weight: 700; }
.ind-badge-vencido { background: #fee2e2; color: #b91c1c; }
.ind-badge-pv      { background: #fef3c7; color: #92400e; }
.ind-badge-ok      { background: #dcfce7; color: #166534; }
.btn-ver-mas-tabla { padding: 5px 12px; font-size: 12px; font-weight: 600; background: transparent; border: 1.5px solid #1f3c88; color: #1f3c88; border-radius: 6px; cursor: pointer; width: auto; margin-top: 0; transition: all 0.2s ease; font-family: inherit; white-space: nowrap; }
.btn-ver-mas-tabla:hover { background: #1f3c88; color: white; transform: translateY(-1px); }
.btn-ver-mas-tabla.activo { background: #1f3c88; color: white; }
.ind-empty { text-align: center; padding: 40px; color: #94a3b8; font-size: 14px; }
.cal-ficha-topbar { display: flex; justify-content: center; align-items: center; background: var(--green, #2C5A48); padding: 12px 20px; position: relative; }
.ficha-close-btn { background: transparent; color: white; border: none; font-size: 13px; font-weight: 600; cursor: pointer; font-family: inherit; margin: 0; padding: 0; text-align: center; }
.ficha-close-btn:hover { background: transparent; transform: none; text-decoration: underline; }
.cal-ficha-close-x { position: absolute; right: 16px; font-size: 28px; cursor: pointer; color: rgba(255,255,255,0.8); line-height: 1; transition: color 0.2s, transform 0.2s; }
.cal-ficha-close-x:hover { color: white; transform: rotate(90deg); }

/* --- CALENDARIO — FILTROS --- */
.cal-filtros { display: flex; gap: 8px; margin-bottom: 18px; flex-wrap: wrap; }
.cal-filtro-pill { padding: 5px 14px; border-radius: 20px; font-size: 12px; font-weight: 700; cursor: pointer; border: 1.5px solid #e2e8f0; background: white; color: #64748b; transition: all 0.15s; user-select: none; }
.cal-filtro-pill:hover { border-color: #1f3c88; color: #1f3c88; }
.cal-filtro-pill.active { background: #1f3c88; color: white; border-color: #1f3c88; }

/* --- CALENDARIO — DOTS INDICADORES --- */
.day-dots { display: flex; gap: 3px; justify-content: center; margin-top: 3px; }
.day-dot  { width: 5px; height: 5px; border-radius: 50%; }
.day-dot-venc { background: #b91c1c; }
.day-dot-ot   { background: #5b21b6; }

/* --- CALENDARIO — CARD OT --- */
.cal-ot-card { margin-bottom: 10px; padding: 12px 14px; background: #faf5ff; border-radius: 8px; border: 1px solid #ddd6fe; border-left: 3px solid #6366f1; }
.cal-ot-card:last-child { margin-bottom: 0; }
.cal-ot-badge { display: inline-block; font-size: 10px; font-weight: 800; color: #5b21b6; text-transform: uppercase; letter-spacing: 1px; background: #ede9fe; padding: 2px 8px; border-radius: 4px; margin-bottom: 6px; }
.cal-ot-codigo { font-size: 15px; font-weight: 800; color: #4338ca; font-family: monospace; margin-bottom: 2px; }

/* --- CALENDARIO --- */
#calendarOverlay { display: none; position: fixed; top: 60px; left: 0; right: 0; bottom: 0; z-index: 10001; background: rgba(15,31,24,0.55); backdrop-filter: blur(5px); align-items: center; justify-content: center; padding: 20px; }
#calendarOverlay.open { display: flex; }
#calendarOverlay.modo-visor-cal-overlay { background: rgba(15,23,42,0) !important; backdrop-filter: blur(0px) !important; pointer-events: none; }
.cal-close-x { position: absolute; top: 12px; right: 16px; font-size: 26px; color: var(--paper, #F4F5F0); cursor: pointer; z-index: 1; line-height: 1; opacity: 0; transition: opacity 0.35s ease, transform 0.3s; }
#calendarOverlay.open .cal-close-x, #yearViewOverlay.open .cal-close-x { opacity: 1; }
.cal-close-x:hover { transform: rotate(90deg); }
.cal-wrapper { display: flex; width: 100%; max-width: 1100px; height: calc(100vh - 120px); max-height: 820px; background: var(--paper, #F4F5F0); overflow: hidden; flex-shrink: 0; }
.cal-panel { background: var(--paper, #F4F5F0); flex: 1; min-width: 0; overflow: hidden; display: flex; flex-direction: column; opacity: 0; transform: translateY(10px); transition: opacity 0.4s ease, transform 0.3s ease; }
#calendarOverlay.open .cal-panel { opacity: 1; transform: translateY(0); }
.cal-panel.con-ficha { }
.cal-panel.modo-visor-cal { opacity: 0; pointer-events: none; }
.cal-ficha-panel { background: var(--paper, #F4F5F0); border-right: 1px solid rgba(111,168,138,0.333); width: 0; opacity: 0; overflow: hidden; flex-shrink: 0; transition: width 0.45s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.35s ease; }
.cal-ficha-panel.visible { width: 480px; opacity: 1; overflow-y: auto; }
.cal-ficha-panel.modo-visor-ficha {
    position: fixed !important;
    top: 60px !important;
    left: 0 !important;
    transform: translateX(0) !important;
    pointer-events: all;
    max-height: calc(100vh - 60px);
    width: 520px !important;
    z-index: 10001;
    transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1) !important;
}

/* Header (neutralizado — estilos reales en .calendario-mensual-v2 .cal-header) */
.cal-header { display: flex; justify-content: space-between; align-items: center; padding: 18px 24px; }
.cal-inner { padding: 24px; }

.cal-nav-btn { background: transparent; border: 1px solid rgba(111,168,138,0.4); border-radius: 2px; padding: 5px 12px; cursor: pointer; color: var(--green, #2C5A48); transition: background 0.15s; font-family: inherit; font-size: 13px; }
.cal-nav-btn:hover { background: var(--hush, #E9EBE2); }
.cal-nav-year { font-size: 10px; padding: 5px 14px; }

.calendar-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 8px; margin-top: 15px; }
.calendar-day-box { border: none; border-radius: 0; display: flex; flex-direction: column; align-items: flex-start; justify-content: flex-start; padding: 5px 6px; cursor: pointer; font-size: 14px; transition: background 0.1s; position: relative; overflow: hidden; }
.calendar-day-box:hover { background: var(--hush, #E9EBE2); }
.calendar-day-box.selected { background: var(--hush, #E9EBE2); outline: 2px solid var(--green, #2C5A48); outline-offset: -2px; }

.calendar-header-txt { text-align: center; font-size: 11px; font-weight: 800; color: #94a3b8; text-transform: uppercase; padding-bottom: 5px; }
.cal-day-detail { margin-top: 0; max-height: 0; overflow: hidden; opacity: 0; padding: 0 16px; background: #f8fafc; border-radius: 10px; border: 1px solid transparent; transition: max-height 0.45s cubic-bezier(0.4,0,0.2,1), opacity 0.3s ease, padding 0.35s ease, margin-top 0.35s ease, border-color 0.3s ease; }
.cal-day-detail.visible { max-height: 900px; opacity: 1; padding: 16px; margin-top: 24px; border-color: #e2e8f0; }
.cal-asset-card { margin-bottom: 10px; padding: 12px 14px; background: white; border-radius: 8px; border: 1px solid #e2e8f0; }
.cal-asset-card:last-child { margin-bottom: 0; }
.cal-asset-cat { font-size: 10px; font-weight: 800; color: #94a3b8; text-transform: uppercase; letter-spacing: 1px; margin-bottom: 4px; }
.cal-asset-top { display: flex; justify-content: space-between; align-items: center; margin-bottom: 6px; }
.cal-asset-name { font-weight: 600; color: #334155; font-size: 14px; }
.cal-asset-meta { display: grid; grid-template-columns: 1fr 1fr; gap: 4px 12px; margin-bottom: 8px; }
.cal-meta-row { display: flex; flex-direction: column; }
.cal-meta-label { font-size: 10px; font-weight: 800; color: #94a3b8; text-transform: uppercase; letter-spacing: 0.5px; }
.cal-meta-value { font-size: 12px; color: #1e293b; font-weight: 600; }

/* --- CALENDARIO: filtros de vista --- */
.cal-filtros { display: flex; gap: 6px; margin-bottom: 16px; flex-wrap: wrap; }
.cal-filtro-pill { padding: 5px 14px; border-radius: 20px; font-size: 11px; font-weight: 700; cursor: pointer; border: 1.5px solid #e2e8f0; background: white; color: #64748b; transition: all 0.15s; text-transform: uppercase; letter-spacing: 0.5px; }
.cal-filtro-pill:hover { border-color: #1f3c88; color: #1f3c88; }
.cal-filtro-pill.active { background: #1f3c88; color: white; border-color: #1f3c88; }

/* Indicadores en celda del calendario */
.day-dots { display: flex; gap: 3px; position: absolute; bottom: 4px; justify-content: center; }
.day-dot { width: 5px; height: 5px; border-radius: 50%; }
.day-dot-venc { background: #b91c1c; }
.day-dot-ot   { background: #6366f1; }

.day-has-venc  { }
.day-has-ot    { }
.day-has-ambos { }

/* --- Card de OT en calendario --- */
.cal-ot-card { margin-bottom: 10px; padding: 12px 14px; background: var(--hush, #E9EBE2); border-radius: 2px; border: 1px solid rgba(111,168,138,0.3); border-left: 3px solid var(--green, #2C5A48); }
.cal-ot-card:last-child { margin-bottom: 0; }
.cal-ot-badge { display: inline-block; font-size: 10px; font-weight: 700; color: var(--green, #2C5A48); text-transform: uppercase; letter-spacing: 1px; margin-bottom: 4px; }
.cal-ot-codigo { font-size: 13px; font-weight: 600; color: var(--green, #2C5A48); font-family: 'Geist Mono', monospace; margin-bottom: 2px; }

/* --- VISTA ANUAL --- */
#yearViewOverlay { display: none; }
#yearViewOverlay.open { display: flex; }
.year-modal { background: var(--paper, #F4F5F0); width: 100%; max-width: 1200px; height: calc(100vh - 120px); max-height: 860px; display: flex; flex-direction: column; overflow: hidden; flex-shrink: 0; }
.year-filtros { display: flex; gap: 8px; padding: 10px 28px; flex-wrap: wrap; }
.year-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; padding: 16px 24px 24px; overflow-y: auto; flex: 1; }
.year-month { background: var(--paper, #F4F5F0); padding: 10px; }
.year-month-name { font-size: 11px; font-weight: 800; color: #1f3c88; text-transform: uppercase; letter-spacing: 0.8px; margin-bottom: 6px; padding: 0 2px; }
.year-month-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; }
.year-day-hdr { text-align: center; font-size: 8px; font-weight: 800; color: #94a3b8; text-transform: uppercase; padding-bottom: 2px; }
.year-day { aspect-ratio: 1; border-radius: 3px; display: flex; flex-direction: column; align-items: center; justify-content: center; font-size: 9px; font-weight: 600; color: #475569; border: 1px solid transparent; transition: all 0.15s; gap: 1px; }
.year-day.has-events { cursor: pointer; }
.year-day.has-events:hover { transform: scale(1.2); z-index: 1; box-shadow: 0 2px 8px rgba(0,0,0,0.2); }
.year-day.y-venc  { background: #fee2e2; color: #b91c1c; border-color: #f87171; }
.year-day.y-ot    { background: #ede9fe; color: #5b21b6; border-color: #a5b4fc; }
.year-day.y-ambos { background: #fef3c7; color: #92400e; border-color: #fbbf24; }
.year-day.y-today { outline: 2px solid #1f3c88; outline-offset: 1px; font-weight: 800; }
.year-day-dots { display: flex; gap: 2px; justify-content: center; }
.year-day-dot { width: 3px; height: 3px; border-radius: 50%; }
.year-day-dot-venc { background: #b91c1c; }
.year-day-dot-ot   { background: #6366f1; }

.cal-day-num { font-size: 12px; font-weight: 700; color: #334155; line-height: 1; }
.cal-day-dot-status { width: 8px; height: 8px; border-radius: 50%; position: absolute; top: 6px; right: 6px; }
.cal-dot-vencido   { background: #ef4444; }
.cal-dot-porVencer { background: #f59e0b; }
.cal-dot-ok        { background: #22c55e; }
.cal-dot-ot        { background: #6366f1; }
.cal-day-nombre { font-size: 9px; font-weight: 600; color: #1e293b; line-height: 1.2; margin-top: 4px; overflow: hidden; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; width: 100%; text-align: center; }.cal-day-cat { font-size: 8px; font-weight: 700; color: #94a3b8; text-transform: uppercase; letter-spacing: 0.3px; position: absolute; bottom: 4px; left: 0; right: 0; text-align: center; }
.cal-day-mas { font-size: 8px; font-weight: 700; color: #64748b; position: absolute; bottom: 4px; right: 5px; }


.btn-menu-nav {
    background: transparent;
    border: none;
    color: rgba(255,255,255,0.6);
    font-size: 18px;
    cursor: pointer;
    padding: 4px 8px;
    border-radius: 6px;
    transition: background 0.2s, color 0.2s;
    line-height: 1;
    margin-top: auto; margin-bottom: auto;
}
.btn-menu-nav:hover {
    background: rgba(255,255,255,0.12);
    color: white;
}
.nav-menu {
    display: none;
    position: absolute;
    top: 52px;
    left: 0;
    background: white;
    border-radius: 8px;
    box-shadow: 0 4px 20px rgba(0,0,0,0.15);
    min-width: 180px;
    overflow: hidden;
    z-index: 100;
}
.nav-menu.open { display: block; }
.nav-menu-item {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 12px 16px;
    font-size: 14px;
    color: #1e293b;
    cursor: pointer;
    transition: background 0.15s;
}
.nav-menu-item:hover { background: #f1f5f9; }


/* estados/motivo OT · migrados a .panel-ot-v2 y pills globales Trama */

/* --- CHAT DE ÓRDENES --- */
/* chat de órdenes global purgado · migrado a .panel-ot-v2 (.go-chat-inline,
   .go-ci-*, .go-hist-*, .go-ind-* estados) + keyframe chatFadeIn abajo */

@keyframes chatFadeIn {
    from { opacity: 0; transform: translateY(-8px); }
    to   { opacity: 1; transform: translateY(0); }
}


.cal-panel { transition: width 0.45s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.5s ease, transform 0.4s cubic-bezier(0.34,1.4,0.64,1), background 0.5s ease, visibility 0.5s ease; }
.cal-panel.modo-visor-cal { opacity: 0; pointer-events: none; visibility: hidden; }
#calendarOverlay.modo-visor-cal-overlay { 
    background: rgba(15,23,42,0) !important; 
    backdrop-filter: blur(0px) !important; 
    transition: background 0.5s ease, backdrop-filter 0.5s ease; 
    pointer-events: none; 
}

.cal-ficha-topbar { display: flex; justify-content: center; align-items: center; background: var(--green, #2C5A48); padding: 12px 20px; position: relative; }
.cal-ficha-close-x { font-size: 28px; cursor: pointer; color: #64748b; line-height: 1; transition: color 0.2s, transform 0.2s; }
.cal-ficha-close-x:hover { color: #1e293b; transform: rotate(90deg); }

.ind-panel.modo-visor-ind { opacity: 0; pointer-events: none; transition: opacity 0.5s ease; }
#indicadoresOverlay.modo-visor-ind-overlay { background: rgba(15,23,42,0) !important; backdrop-filter: blur(0px) !important; pointer-events: none; transition: background 0.5s ease, backdrop-filter 0.5s ease; }


.ind-fila-activa { background: #eff6ff !important; border-left: 3px solid #1f3c88; }


.ind-tooltip { position: fixed; background: rgba(255,255,255,0.85); color: #1e293b; padding: 6px 12px; border-radius: 6px; font-size: 12px; font-weight: 600; pointer-events: none; opacity: 0; transition: opacity 0.2s ease; z-index: 100000; white-space: nowrap; backdrop-filter: blur(4px); box-shadow: 0 2px 8px rgba(0,0,0,0.15); }
.ind-tooltip.visible { opacity: 1; }



#asigTodos { margin: 0 !important; vertical-align: middle !important; position: relative; top: -1px; }


.pdf-overlay {
    display: none;
    position: fixed;
    inset: 0;
    background: rgba(0,0,0,0.85);
    z-index: 99999;
    flex-direction: column;
    align-items: center;
    justify-content: flex-start;
    padding: 50px 16px 16px;
    overflow-y: auto;
    gap: 12px;
}
.pdf-overlay.open { display: flex; }
.pdf-overlay canvas {
    border-radius: 8px;
    max-width: 100%;
    box-shadow: 0 4px 24px rgba(0,0,0,0.4);
}
.pdf-overlay-close {
    position: fixed;
    top: 16px;
    right: 20px;
    font-size: 28px;
    color: white;
    cursor: pointer;
    opacity: 0.8;
    z-index: 100000;
}
.pdf-overlay-close:hover { opacity: 1; }


/* chat input + preview-bar globales purgados · migrados a .panel-ot-v2 */

/* ── Aviso del sistema (modal propio que reemplaza alert/confirm nativos) ── */
.aviso-sistema-overlay { display:none; position:fixed; inset:0; background:rgba(15,23,42,0.55); backdrop-filter:blur(4px); z-index:30000; align-items:center; justify-content:center; padding:20px; }
.aviso-sistema-card { background:#fff; border-radius:14px; padding:28px 26px 22px; width:400px; max-width:92vw; box-shadow:0 18px 50px rgba(0,0,0,0.28); text-align:center; animation:avisoIn 0.18s ease; }
@keyframes avisoIn { from { opacity:0; transform:translateY(8px) scale(0.98); } to { opacity:1; transform:none; } }
.aviso-sistema-icono { width:52px; height:52px; border-radius:50%; display:flex; align-items:center; justify-content:center; margin:0 auto 14px; }
.aviso-sistema-icono i { font-size:28px; line-height:1; }
.aviso-sistema-icono.warn  { background:#FEF3E2; color:#C25D3E; }
.aviso-sistema-icono.error { background:#FDE8E8; color:#C0392B; }
.aviso-sistema-icono.ok    { background:#E7F4EE; color:#2C5A48; }
.aviso-sistema-titulo { margin:0 0 8px; font-size:17px; font-weight:700; color:#0F1F18; }
.aviso-sistema-mensaje { margin:0 0 22px; font-size:14px; line-height:1.55; color:#475569; }
.aviso-sistema-acciones { display:flex; justify-content:center; gap:10px; }
.aviso-sistema-btn { background:#185FA5; color:#fff; border:none; border-radius:8px; padding:10px 26px; font-size:14px; font-weight:600; cursor:pointer; transition:background 0.15s ease; }
.aviso-sistema-btn:hover { background:#0C447C; }


tr.seleccionada { position: sticky; top: 0; z-index: 10; background: var(--paper, #F4F5F0); }

/* barra/lista de archivos global purgada · migrada a .panel-ot-v2 */


/* ── Campana de notificaciones ─────────────────────────── */
.campana-wrapper {
  position: relative;
  margin-right: 12px;
  display: flex;
  align-items: center;
}

.campana-btn {
  background: none;
  border: none;
  cursor: pointer;
  color: var(--header-text, #fff);
  font-size: 30px;
  padding: 6px 8px;
  border-radius: 8px;
  position: relative;
  display: flex;
  align-items: center;
  transition: background 0.15s;
  margin-top: 6px;
}

.campana-btn:hover { background: rgba(255,255,255,0.12); }

.campana-badge {
  position: absolute;
  top: 2px;
  right: 2px;
  background: #C0392B;
  color: #fff;
  font-size: 10px;
  font-weight: 700;
  min-width: 16px;
  height: 16px;
  border-radius: 99px;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0 4px;
  pointer-events: none;
}

.campana-panel {
  position: absolute;
  top: calc(100% + 8px);
  right: 0;
  width: 320px;
  background: var(--card-bg, #fff);
  border: 1px solid #e2e8f0;
  border-radius: 12px;
  box-shadow: 0 8px 24px rgba(0,0,0,0.12);
  z-index: 1000;
  overflow: hidden;
}

.campana-panel-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 12px 16px;
  border-bottom: 1px solid #e2e8f0;
  font-size: 14px;
  font-weight: 600;
  color: #1a1a2e;
}

.campana-leer-todas {
  background: none;
  border: none;
  font-size: 11px;
  color: #185FA5;
  cursor: pointer;
  padding: 0;
}

.campana-leer-todas:hover { text-decoration: underline; }

.campana-lista {
  max-height: 360px;
  overflow-y: auto;
}

.campana-item {
  display: flex;
  gap: 10px;
  padding: 12px 16px;
  border-bottom: 1px solid #f1f5f9;
  cursor: pointer;
  transition: background 0.1s;
}

.campana-item:hover { background: #f8fafc; }

.campana-item.no-leida { background: #EFF6FF; }
.campana-item.no-leida:hover { background: #DBEAFE; }

.campana-item-icono {
  font-size: 18px;
  flex-shrink: 0;
  margin-top: 2px;
}

.campana-item-cuerpo { flex: 1; min-width: 0; }

.campana-item-titulo {
  font-size: 13px;
  font-weight: 500;
  color: #1a1a2e;
  margin-bottom: 2px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.campana-item-msg {
  font-size: 11px;
  color: #64748b;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.campana-item-tiempo {
  font-size: 10px;
  color: #94a3b8;
  margin-top: 4px;
}

.campana-empty {
  padding: 32px 16px;
  text-align: center;
  color: #94a3b8;}

  .user-menu-wrapper {
  margin-left: auto;
  display: flex;
  align-items: center;
  gap: 8px;
}


/* ==================== PREFERENCIAS · CUENTA (v2 · Trama) ==================== */
.pref-container { display: none; height: 100vh; background: var(--paper); flex-direction: column; overflow-y: auto; font-family: var(--font-sans); }
.pref-header { height: 60px; background: var(--hush); color: var(--ink); display: flex; align-items: center; padding: 0 22px; gap: 14px; flex-shrink: 0; border-bottom: 1px solid rgba(111,168,138,0.47); }
.pref-header .btn-menu-nav { width: 34px; height: 34px; display: flex; align-items: center; justify-content: center; background: transparent; border: 1px solid rgba(111,168,138,0.47) !important; border-radius: 2px; color: var(--ink) !important; cursor: pointer; transition: background .15s; font-size: 18px; padding: 0; flex-shrink: 0; }
.pref-header .btn-menu-nav:hover { background: var(--paper) !important; color: var(--ink) !important; }
.pref-header-title { font: 500 14px/1 var(--font-sans); color: var(--ink); opacity: 0.7; }
.pref-body { max-width: 600px; margin: 0 auto; padding: 36px 24px 48px; display: flex; flex-direction: column; gap: 26px; width: 100%; box-sizing: border-box; }

/* Avatar / identidad */
.pref-avatar-section { display: flex; align-items: center; gap: 20px; padding-bottom: 24px; border-bottom: 1px solid var(--line); }
.pref-avatar-btn { position: absolute; bottom: 0; right: 0; width: 26px; height: 26px; background: var(--green); border-radius: 50%; border: 2px solid var(--paper); display: flex; align-items: center; justify-content: center; cursor: pointer; color: var(--paper); font-size: 13px; transition: background 0.15s; }
.pref-avatar-btn:hover { background: var(--ink); }
.pref-nombre-display { margin: 0; font: 600 18px/1.2 var(--font-sans); letter-spacing: -0.02em; color: var(--ink); }
.pref-empresa-display { margin: 4px 0 8px; font: 400 13px/1.4 var(--font-sans); color: var(--fg-muted); }
.pref-foto-link { font: 500 9px/1 var(--font-mono); letter-spacing: 0.12em; text-transform: uppercase; color: var(--green); cursor: pointer; }
.pref-foto-link:hover { color: var(--ink); text-decoration: underline; }

/* Secciones */
.pref-section { display: flex; flex-direction: column; gap: 14px; padding-top: 20px; border-top: 1px solid var(--line); }
.pref-section:first-of-type { border-top: none; padding-top: 0; }
.pref-section-title { margin: 0; font: 500 9px/1 var(--font-mono); letter-spacing: 0.14em; text-transform: uppercase; color: var(--green); }

/* Campos */
.pref-field { display: flex; flex-direction: column; gap: 6px; }
.pref-field label { font: 500 9px/1 var(--font-mono); letter-spacing: 0.1em; text-transform: uppercase; color: var(--fg-muted); }
.pref-field input { padding: 9px 11px; border-radius: 2px; border: 1px solid var(--line); font: 400 13px/1.2 var(--font-sans); color: var(--ink); background: var(--paper); box-sizing: border-box; width: 100%; transition: border-color 0.15s, background 0.15s; }
.pref-field input:focus { border-color: var(--green); outline: none; background: #fff; }
.pref-field input:disabled { opacity: 0.55; cursor: not-allowed; }

/* Fila contraseña */
.pref-pass-row { display: flex; align-items: center; justify-content: space-between; gap: 16px; }
.pref-pass-label { margin: 0; font: 500 13px/1.2 var(--font-sans); color: var(--ink); }
.pref-pass-sub { margin: 4px 0 0; font: 400 12px/1.3 var(--font-sans); color: var(--fg-subtle); }
.pref-btn-cambiar-pass { padding: 8px 14px; border-radius: 2px; border: 1px solid var(--line); background: var(--paper); color: var(--green); font: 500 9px/1 var(--font-mono); letter-spacing: 0.1em; text-transform: uppercase; cursor: pointer; transition: all 0.15s; white-space: nowrap; }
.pref-btn-cambiar-pass:hover { border-color: var(--green); background: var(--hush); }

/* Input contraseña con ojo */
.pref-pass-input-wrap { position: relative; }
.pref-pass-input-wrap input { padding-right: 38px; }
.pref-pass-input-wrap i { position: absolute; right: 11px; top: 50%; transform: translateY(-50%); cursor: pointer; color: var(--mesh); font-size: 15px; }
.pref-pass-input-wrap i:hover { color: var(--green); }

/* Medidor de fuerza */
.pref-pass-strength { display: flex; align-items: center; gap: 10px; margin-top: 8px; }
.pref-strength-bar { flex: 1; height: 3px; background: var(--hush); overflow: hidden; }
.pref-strength-bar div { height: 100%; width: 0%; transition: width 0.3s, background 0.3s; }
#prefStrengthLabel, #strengthLabel, #plStrengthLabel { font: 500 9px/1 var(--font-mono); letter-spacing: 0.08em; text-transform: uppercase; min-width: 46px; }

/* Reglas de contraseña */
.pref-pass-rules { display: flex; flex-direction: column; gap: 4px; margin-top: 10px; }
.pref-pass-rules span { font: 400 11px/1.3 var(--font-sans); color: var(--fg-subtle); transition: color 0.2s; }
.pref-pass-rules span.ok { color: var(--green); }
.pref-pass-rules span.fail { color: var(--rust); }

.pref-error { font: 400 12px/1.4 var(--font-sans); color: var(--rust); min-height: 16px; }
.pref-success { font: 400 12px/1.4 var(--font-sans); color: var(--green); min-height: 16px; }

/* Footer */
.pref-footer { display: flex; gap: 10px; padding-top: 18px; border-top: 1px solid var(--line); }
.pref-btn-cancelar { flex: 1; padding: 11px; border-radius: 2px; border: 1px solid var(--line); background: var(--paper); color: var(--fg-muted); font: 500 10px/1 var(--font-mono); letter-spacing: 0.12em; text-transform: uppercase; cursor: pointer; transition: all 0.15s; }
.pref-btn-cancelar:hover { background: var(--hush); color: var(--ink); }
.pref-btn-guardar { flex: 2; padding: 11px; border-radius: 2px; border: none; background: var(--green); color: var(--paper); font: 500 10px/1 var(--font-mono); letter-spacing: 0.14em; text-transform: uppercase; cursor: pointer; transition: background 0.15s; }
.pref-btn-guardar:hover { background: var(--ink); }

.pref-pass-input-wrap input::-ms-reveal,
.pref-pass-input-wrap input::-ms-clear,
.pref-pass-input-wrap input::-webkit-credentials-auto-fill-button { display: none; }

/* ==================== AUTH SIMPLE (v2 · Trama) · recuperar / primer login ==================== */
.login-container.auth-v2 {
  display: flex; align-items: center; justify-content: center;
  min-height: 100vh; padding: 24px; background: var(--paper);
  position: relative; overflow: hidden; font-family: var(--font-sans);
}
.login-container.auth-v2::before {
  content: ''; position: absolute; inset: 0; pointer-events: none;
  background-image:
    linear-gradient(rgba(111,168,138,0.14) 1px, transparent 1px),
    linear-gradient(90deg, rgba(111,168,138,0.14) 1px, transparent 1px);
  background-size: 32px 32px;
}
.auth-v2 .login-box {
  position: relative; z-index: 1; width: 340px; max-width: 100%;
  background: var(--paper); border: 1px solid var(--line); border-radius: 2px;
  padding: 34px 30px; box-shadow: 0 30px 80px -30px rgba(15,31,24,0.25);
  text-align: left;
}
.auth-v2 .cover { text-align: left; margin-bottom: 22px; }
.auth-v2 .brand { margin: 0; font: 600 30px/0.9 var(--font-sans); letter-spacing: -0.04em; color: var(--ink); text-transform: lowercase; }
.auth-v2 .subtitle { margin: 12px 0 4px; font: 600 18px/1.2 var(--font-sans); letter-spacing: -0.02em; color: var(--ink); }
.auth-v2 .login-title-small { font: 500 9px/1 var(--font-mono); letter-spacing: 0.14em; text-transform: uppercase; color: var(--green); margin-bottom: 0; }
.auth-v2 .login-box > input[type="text"],
.auth-v2 .login-box > input[type="email"],
.auth-v2 .login-box > input[type="password"],
.auth-v2 .login-box #recuperarForm input[type="text"],
.auth-v2 .login-box #recuperarForm input[type="email"] {
  width: 100%; box-sizing: border-box; margin-top: 14px;
  padding: 9px 11px; border: 1px solid var(--line); border-radius: 2px;
  background: var(--paper); color: var(--ink);
  font: 400 13px/1.2 var(--font-sans); transition: border-color 0.15s, background 0.15s;
}
.auth-v2 .login-box > input:focus,
.auth-v2 .login-box #recuperarForm input:focus { border-color: var(--green); background: #fff; outline: none; }
.auth-v2 .login-box button {
  width: 100%; margin-top: 16px; padding: 11px 12px;
  background: var(--green); color: var(--paper); border: none; border-radius: 2px;
  font: 500 10px/1 var(--font-mono); letter-spacing: 0.14em; text-transform: uppercase;
  cursor: pointer; transition: background 0.15s;
}
.auth-v2 .login-box button:hover { background: var(--ink); }
.auth-v2 .login-box button:disabled { opacity: 0.5; cursor: not-allowed; }
.auth-v2 .forgot-pass { display: block; margin-top: 16px; font: 500 9px/1 var(--font-mono); letter-spacing: 0.1em; text-transform: uppercase; color: var(--green); text-decoration: none; text-align: center; }
.auth-v2 .forgot-pass:hover { color: var(--ink); text-decoration: underline; }
.auth-v2 .error { color: var(--rust); margin-top: 12px; text-align: center; font: 400 12px/1.4 var(--font-sans); }
.auth-v2 .error a { color: var(--green); }

/* ====== Indicadores v2 — TODO scopeado bajo .ind2 para no tocar el resto de la app ====== */
.ind2{
  font-family:var(--sans); color:var(--ink); background:var(--paper); padding:0; margin-bottom:24px;
}
.ind2 *{box-sizing:border-box;}
.ind2 .eyebrow{font-family:var(--mono);font-size:10px;font-weight:500;letter-spacing:.16em;text-transform:uppercase;color:var(--green);margin:0;}
.ind2 .grp-row{display:flex;justify-content:space-between;align-items:center;margin:26px 0 12px;flex-wrap:wrap;row-gap:8px;}
.ind2 .grp-row:first-of-type{margin-top:0;}
/* header */
.ind2 .i2head{display:flex;justify-content:space-between;align-items:flex-end;padding-bottom:18px;border-bottom:1px solid var(--line-soft);margin-bottom:22px;}
.ind2 .i2head .kicker{font-family:var(--mono);font-size:10px;font-weight:500;letter-spacing:.16em;text-transform:uppercase;color:var(--green);}
.ind2 .i2head h2{font:600 28px/1 var(--sans);letter-spacing:-.03em;margin:6px 0 0;color:var(--ink);}
.ind2 .i2head .upd{font-family:var(--mono);font-size:10px;letter-spacing:.06em;color:var(--green);opacity:.7;text-align:right;}
/* período toggle */
.ind2 .period{display:flex;border:1px solid var(--line);}
.ind2 .period button{font-family:var(--mono);font-size:10px;font-weight:500;letter-spacing:.12em;text-transform:uppercase;border:none;border-left:1px solid var(--line);background:transparent;color:var(--green);padding:7px 13px;cursor:pointer;white-space:nowrap;width:auto;margin-top:0;flex:0 0 auto;transition:background .15s,color .15s;}
.ind2 .period button:first-child{border-left:none;}
.ind2 .period button.on{background:var(--green);color:var(--paper);}
.ind2 .period button:not(.on):hover{background:var(--hush);}
.ind2 .period button:hover{transform:none;}
/* semáforo */
.ind2 .semaforo{display:flex;align-items:center;gap:18px;padding:18px 20px;border:1px solid;border-radius:2px;margin-bottom:24px;transition:background .25s,border-color .25s;}
.ind2 .sem-light{width:46px;height:46px;border-radius:2px;flex-shrink:0;display:flex;align-items:center;justify-content:center;}
.ind2 .sem-light i{font-size:24px;color:#fff;}
.ind2 .sem-txt{flex:1;}
.ind2 .sem-state{font:600 17px/1 var(--sans);letter-spacing:-.01em;margin:0;}
.ind2 .sem-why{font-size:12.5px;line-height:1.45;color:var(--ink);opacity:.72;margin:5px 0 0;max-width:70ch;}
/* statcards */
.ind2 .cards{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;}
.ind2 .statcard{padding:18px;border-radius:2px;position:relative;overflow:hidden;}
.ind2 .statcard i.bg{position:absolute;top:14px;right:14px;font-size:22px;opacity:.45;}
.ind2 .statcard .val{font:600 44px/1 var(--sans);letter-spacing:-.035em;margin-top:6px;}
.ind2 .statcard .lbl{font-family:var(--mono);font-size:10px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;margin-top:10px;opacity:.9;}
.ind2 .sc-ink{background:var(--ink);color:var(--paper);}
.ind2 .sc-rust{background:var(--rust);color:var(--paper);}
.ind2 .sc-amber{background:var(--amber);color:var(--ink);}
.ind2 .sc-lime{background:var(--lime);color:var(--ink);}
/* categoría grid */
.ind2 .catgrid{display:grid;grid-template-columns:repeat(6,1fr);gap:8px;}
.ind2 .catcard{background:#fff;border:1px solid var(--line-soft);border-radius:2px;padding:12px;display:flex;flex-direction:column;gap:10px;}
.ind2 .cc-head{display:flex;align-items:center;justify-content:space-between;}
.ind2 .cc-head i{font-size:15px;color:var(--green);}
.ind2 .cc-tot{font-family:var(--mono);font-size:14px;font-weight:600;color:var(--ink);}
.ind2 .cc-name{font:500 12px/1.2 var(--sans);letter-spacing:-.01em;color:var(--ink);min-height:29px;}
.ind2 .cc-bar{display:flex;height:4px;background:var(--hush);overflow:hidden;}
.ind2 .cc-bar>div{height:100%;}
.ind2 .cc-nums{display:flex;justify-content:space-between;font-family:var(--mono);font-size:9.5px;letter-spacing:.04em;}
/* KPI cards */
.ind2 .kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;}
.ind2 .kpi{background:#fff;border:1px solid var(--line-soft);border-radius:2px;padding:14px 15px;}
.ind2 .kpi .lbl{font-family:var(--mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--green);opacity:.8;margin:0 0 9px;}
.ind2 .kpi .val{font:600 30px/1 var(--mono);letter-spacing:-.02em;margin:0;}
.ind2 .kpi .val small{font-size:14px;font-weight:500;}
.ind2 .kpi .val.g{color:var(--green);}.ind2 .kpi .val.r{color:var(--rust);}


/* ====== Indicadores v2 · Etapa 2 (scopeado bajo .ind2) ====== */
.ind2 .two-col{display:grid;grid-template-columns:1fr 1fr;gap:14px;}
.ind2 .panel{background:#fff;border:1px solid var(--line-soft);border-radius:2px;padding:16px 18px;}
.ind2 .panel h3{font:600 14px/1.2 var(--sans);letter-spacing:-.01em;margin:0;}
.ind2 .panel .cap{font-family:var(--mono);font-size:10px;letter-spacing:.06em;color:var(--green);opacity:.7;margin:4px 0 0;}
/* donut */
.ind2 .donut-wrap{display:flex;align-items:center;gap:18px;margin-top:12px;}
.ind2 .donut-wrap svg{flex-shrink:0;}
.ind2 .otleg{display:flex;flex-direction:column;gap:7px;flex:1;}
.ind2 .otleg .row{display:flex;align-items:center;gap:8px;font-size:11.5px;color:var(--ink);}
.ind2 .otleg .sw{width:9px;height:9px;border-radius:2px;flex-shrink:0;}
.ind2 .otleg .n{margin-left:auto;font-family:var(--mono);font-weight:500;color:var(--ink);}
/* reactividad */
.ind2 .react-big{display:flex;align-items:baseline;gap:10px;margin:12px 0 8px;}
.ind2 .react-big .v{font:600 38px/1 var(--mono);letter-spacing:-.02em;color:var(--green);}
.ind2 .react-big .v small{font-size:20px;}
.ind2 .react-txt{font-size:11.5px;line-height:1.5;color:var(--ink);opacity:.72;margin:0 0 12px;}
.ind2 .react-goal{font-family:var(--mono);font-size:10px;letter-spacing:.04em;display:flex;align-items:center;gap:6px;margin:0 0 14px;}
.ind2 .react-goal.ok{color:var(--green);}.ind2 .react-goal.over{color:var(--rust);}
.ind2 .tipobar{display:flex;height:8px;overflow:hidden;margin-bottom:9px;background:var(--hush);}.ind2 .tipobar>div{height:100%;}
.ind2 .tipoleg{display:flex;gap:14px;flex-wrap:wrap;font-family:var(--mono);font-size:10px;letter-spacing:.04em;color:var(--ink);}
.ind2 .tipoleg .row{display:flex;align-items:center;gap:6px;}.ind2 .tipoleg .sw{width:8px;height:8px;border-radius:2px;}
.ind2 .react-foot{font-family:var(--mono);font-size:10px;letter-spacing:.04em;color:var(--rust);display:flex;align-items:center;gap:7px;margin:13px 0 0;padding-top:12px;border-top:1px solid var(--line-soft);}
/* ver más */
.ind2 .vermas{width:100%;font-family:var(--mono);font-size:11px;font-weight:500;letter-spacing:.1em;text-transform:uppercase;border:1px solid var(--line);background:#fff;color:var(--green);padding:12px;border-radius:2px;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:9px;transition:background .15s;margin-top:14px;}
.ind2 .vermas:hover{background:var(--hush);}
.ind2 .vermas i{transition:transform .2s;font-size:15px;}.ind2 .vermas.open i{transform:rotate(180deg);}
/* gauge */
.ind2 .gauge-stats{display:flex;justify-content:center;gap:26px;margin-top:6px;}
.ind2 .gauge-stats .gv{font-family:var(--mono);font-size:17px;font-weight:600;text-align:center;}
.ind2 .gauge-stats .gl{font-family:var(--mono);font-size:9px;letter-spacing:.06em;color:var(--green);opacity:.7;text-align:center;text-transform:uppercase;margin-top:2px;}
.ind2 .gauge-note{font-size:11px;line-height:1.5;color:var(--ink);opacity:.72;text-align:center;margin:13px 0 0;}
/* line legend */
.ind2 .line-legend{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px;}
.ind2 .line-legend button{font-family:var(--mono);font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;border:1px solid var(--line-soft);background:#fff;border-radius:2px;padding:4px 9px;cursor:pointer;display:flex;align-items:center;gap:6px;color:var(--ink);transition:opacity .15s,border-color .15s;}
.ind2 .line-legend button:hover{border-color:var(--line);}
.ind2 .line-legend button.off{opacity:.35;}.ind2 .line-legend .sw{width:8px;height:8px;border-radius:50%;}
/* dist */
.ind2 .dist{display:flex;align-items:flex-end;justify-content:space-around;height:128px;gap:14px;padding:0 4px;margin-top:10px;}
.ind2 .distcol{display:flex;flex-direction:column;align-items:center;gap:7px;flex:1;}
.ind2 .distbar{width:42px;display:flex;flex-direction:column-reverse;overflow:hidden;}.ind2 .distbar>div{width:100%;}
.ind2 .distlbl{text-align:center;}.ind2 .distlbl .m{font:500 11px var(--sans);}.ind2 .distlbl .t{font-family:var(--mono);font-size:9.5px;color:var(--green);opacity:.7;}
.ind2 .distleg{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin-top:12px;font-family:var(--mono);font-size:9.5px;letter-spacing:.04em;color:var(--ink);}
.ind2 .distleg .row{display:flex;align-items:center;gap:6px;}.ind2 .distleg .sw{width:8px;height:8px;border-radius:2px;}
/* carga */
.ind2 .carga{display:flex;flex-direction:column;gap:15px;margin-top:14px;}
.ind2 .carga .top{display:flex;justify-content:space-between;font-size:11.5px;color:var(--ink);margin-bottom:6px;}
.ind2 .carga .top b{font-family:var(--mono);font-weight:600;}
.ind2 .carga .track{height:7px;background:var(--hush);overflow:hidden;}.ind2 .carga .fill{height:100%;}
/* criticidad cards */
.ind2 .critcards{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;}
.ind2 .critcard{background:#fff;border:1px solid var(--line-soft);border-radius:2px;padding:14px 15px;cursor:pointer;transition:border-color .12s,background .12s;}
.ind2 .critcard:hover{border-color:var(--line);}
.ind2 .critcard.active{border-width:2px;padding:13px 14px;}
.ind2 .critcard.active.alta{border-color:var(--rust);background:rgba(194,93,62,.06);}
.ind2 .critcard.active.media{border-color:var(--amber);background:rgba(217,164,65,.08);}
.ind2 .critcard.active.baja{border-color:var(--green);background:rgba(44,90,72,.06);}
.ind2 .cc2-top{display:flex;align-items:center;gap:8px;font-family:var(--mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--green);margin-bottom:9px;}
.ind2 .cc2-dot{width:9px;height:9px;border-radius:50%;}
.ind2 .cc2-n{font:600 26px/1 var(--mono);letter-spacing:-.02em;}
.ind2 .cc2-sub{font-family:var(--mono);font-size:9.5px;letter-spacing:.04em;color:var(--green);opacity:.7;margin-top:4px;}
.ind2 .crit-hint{font-family:var(--mono);font-size:10px;letter-spacing:.04em;color:var(--green);opacity:.75;margin:12px 0 0;}
.ind2 .crit-hint a{color:var(--green);opacity:1;cursor:pointer;text-decoration:underline;}
/* filters + table */
.ind2 .filters{display:flex;gap:0;border:1px solid var(--line);}
.ind2 .filters button{font-family:var(--mono);font-size:10px;font-weight:500;letter-spacing:.1em;text-transform:uppercase;border:none;border-left:1px solid var(--line);background:transparent;color:var(--green);padding:7px 12px;cursor:pointer;transition:background .15s,color .15s;white-space:nowrap;width:auto;margin-top:0;flex:0 0 auto;}
.ind2 .filters button:first-child{border-left:none;}
.ind2 .filters button.on{background:var(--ink);color:var(--paper);}
.ind2 .filters button:not(.on):hover{background:var(--hush);}
.ind2 .filters button:hover{transform:none;}
.ind2 .tablewrap{border:1px solid var(--line-soft);border-radius:2px;overflow:hidden;}
.ind2 table{width:100%;border-collapse:collapse;font-size:12px;}
.ind2 thead th{font-family:var(--mono);font-size:9.5px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--green);text-align:left;padding:11px 14px;background:var(--hush);border-bottom:1px solid var(--line-soft);}
.ind2 tbody td{padding:11px 14px;border-bottom:1px solid var(--line-soft);color:var(--ink);}
.ind2 tbody tr{cursor:pointer;}
.ind2 tbody tr:last-child td{border-bottom:none;}
.ind2 tbody tr:hover{background:rgba(111,168,138,.05);}
.ind2 .t-asset{font:500 12.5px var(--sans);letter-spacing:-.01em;}
.ind2 .code{font-family:var(--mono);font-size:11px;letter-spacing:.04em;color:var(--green);}
.ind2 .t-soft{opacity:.7;}
.ind2 .crit-tag{font-family:var(--mono);font-size:10px;font-weight:500;letter-spacing:.1em;text-transform:uppercase;}
.ind2 .crit-tag.alta{color:var(--rust);}.ind2 .crit-tag.media{color:var(--amber);}.ind2 .crit-tag.baja{color:var(--mesh);}
.ind2 .pill{display:inline-block;font-family:var(--mono);font-size:9.5px;font-weight:500;letter-spacing:.1em;text-transform:uppercase;padding:4px 10px;border-radius:2px;white-space:nowrap;}
.ind2 .pill.vencido{background:var(--rust);color:var(--paper);}
.ind2 .pill.porvencer{background:var(--amber);color:var(--ink);}
.ind2 .pill.entiempo{background:var(--lime);color:var(--ink);}
.ind2 .two-col + .two-col{margin-top:14px;}
.ind2 .i2-period-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
.ind2 .i2-actions{display:flex;gap:6px;}
.ind2 .i2-btn-action{font-family:var(--mono);font-size:10px;font-weight:500;letter-spacing:.1em;text-transform:uppercase;border:1px solid var(--line);background:transparent;color:var(--ink);padding:7px 12px;cursor:pointer;border-radius:2px;display:flex;align-items:center;gap:6px;white-space:nowrap;margin-top:0;transition:background .15s,border-color .15s;}
.ind2 .i2-btn-action:hover{background:var(--hush);border-color:var(--green);transform:none;}

/* ── Modal enviar reporte ── */
#enviarReporteOverlay{position:fixed;inset:0;z-index:10050;background:rgba(0,0,0,.45);align-items:center;justify-content:center;}
.er-modal{background:var(--paper,#fff);border:1px solid var(--line,#ddd);border-radius:4px;width:360px;max-width:calc(100vw - 32px);position:relative;overflow:hidden;}
.er-close-corner{position:absolute;top:10px;right:10px;width:26px !important;height:26px;background:none !important;border:none;border-radius:0;cursor:pointer;color:var(--green,#2C5A48);font-size:15px;display:flex;align-items:center;justify-content:center;padding:0;margin-top:0;z-index:2;flex-shrink:0;}
.er-close-corner:hover{opacity:.65;background:none !important;transform:none;}
.er-header{padding:16px 44px 14px 20px;border-bottom:1px solid var(--line-soft,#eee);}
.er-titulo{font-family:var(--sans);font-size:15px;font-weight:600;letter-spacing:-.01em;color:var(--ink);margin:0;}
.er-body{padding:20px 20px 8px;}
.er-label{display:block;font-family:var(--mono);font-size:10px;font-weight:500;letter-spacing:.12em;text-transform:uppercase;color:var(--green,#2C5A48);margin-bottom:8px;}
.er-input{width:100%;box-sizing:border-box;font-family:var(--mono);font-size:13px;border:1px solid var(--line,#ddd);border-radius:2px;padding:9px 12px;color:var(--ink);outline:none;transition:border-color .15s;}
.er-input:focus{border-color:var(--green,#2C5A48);}
.er-msg{font-family:var(--mono);font-size:11px;letter-spacing:.04em;margin:8px 0 0;min-height:15px;}
.er-csv-label{display:flex;align-items:center;gap:8px;font-family:var(--mono);font-size:10px;font-weight:500;letter-spacing:.08em;text-transform:uppercase;color:var(--ink);cursor:pointer;margin-top:10px;user-select:none;}
.er-csv-label input[type="checkbox"]{width:auto !important;flex:0 0 auto;margin-top:0;padding:0 !important;border-radius:2px;accent-color:var(--green,#2C5A48);box-shadow:none;}
.er-footer{display:flex;gap:8px;padding:16px 20px 18px;justify-content:flex-end;}
.er-btn{font-family:var(--mono);font-size:10px;font-weight:500;letter-spacing:.1em;text-transform:uppercase;border-radius:2px;padding:9px 18px;cursor:pointer;transition:background .15s,border-color .15s;white-space:nowrap;}
.er-btn-sec{border:1px solid var(--line,#ddd);background:transparent;color:var(--ink);}
.er-btn-sec:hover{background:var(--hush,#f5f5f0);}
.er-btn-prim{border:1px solid var(--green,#2C5A48);background:var(--green,#2C5A48);color:#fff;}
.er-btn-prim:hover:not(:disabled){opacity:.88;}
.er-btn-prim:disabled{opacity:.5;cursor:not-allowed;}
#erEstadoExito{display:none;padding:48px 20px;text-align:center;}
.er-exito{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;width:100%;}
.er-exito-icon{font-size:42px;color:var(--green,#2C5A48);margin-bottom:12px;}
.er-exito-txt{font-family:var(--sans);font-size:16px;font-weight:600;color:var(--ink);margin:0;letter-spacing:-.01em;}

/* ── Modal cámara gerente ── */
.go-camara-modal {
  display: none;
  position: fixed;
  inset: 0;
  background: #000;
  z-index: 20000;
  flex-direction: column;
  align-items: center;
  justify-content: space-between;
  padding: 16px;
}
.go-camara-modal.open { display: flex; }
.go-camara-header {
  width: 100%;
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.go-camara-titulo { color: #fff; font-size: 14px; font-weight: 500; }
.go-camara-cerrar {
  background: rgba(255,255,255,0.12);
  border: none; color: #fff;
  width: 36px; height: 36px;
  border-radius: 2px; font-size: 20px;
  cursor: pointer; display: flex;
  align-items: center; justify-content: center;
}
.go-camara-visor {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  max-height: calc(100dvh - 140px);
  overflow: hidden;
  border-radius: 12px;
  margin: 12px 0;
}
.go-camara-visor video,
.go-camara-visor canvas {
  max-width: 100%;
  max-height: 100%;
  border-radius: 12px;
  object-fit: contain;
}
.go-camara-acciones {
  width: 100%;
  display: flex;
  gap: 10px;
  justify-content: center;
}
.go-btn-cam-sec {
  background: rgba(255,255,255,0.15);
  border: none; color: #fff;
  padding: 12px 20px; border-radius: 2px;
  font: 500 11px/1 var(--font-mono); letter-spacing: .1em; text-transform: uppercase;
  cursor: pointer;
  display: flex; align-items: center; gap: 6px;
}
.go-btn-cam-prim {
  background: var(--green);
  border: none; color: var(--paper);
  padding: 12px 28px; border-radius: 2px;
  font: 500 11px/1 var(--font-mono); letter-spacing: .1em; text-transform: uppercase;
  cursor: pointer;
  display: flex; align-items: center; gap: 6px;
}
.go-btn-cam-prim:hover { background: var(--ink); }

/* ===== LOGIN v2 (Trama) — scopeado bajo .login-v2 · anexar al final de styles.css ===== */
.login-container.login-v2{padding:0;margin:0;background:transparent;display:block;min-height:80vh;zoom:1.25;}
.login-v2 .login-layout{width:100%;}
.login-v2 {
  --paper:  #F4F5F0;
  --hush:   #E9EBE2;
  --clay:  #D8C8B0;
  --green:  #2C5A48;
  --ink:    #0F1F18;
  --mesh:  #6FA88A;
  --lime:   #C4D87C;
  --amber:  #D9A441;
  --rust:  #C25D3E;
  --line:   rgba(111,168,138,0.40);
  --sans:   "Geist", system-ui, sans-serif;
  --mono:   "Geist Mono", ui-monospace, monospace;
}
.login-v2 *, .login-v2 *::before, .login-v2 *::after {
  box-sizing: border-box;
}
.login-v2 ::selection {
  background: var(--lime);
  color: var(--ink);
}
.login-v2 {
  margin: 0;
  padding: 0;
  height: 100%;
  font-family: var(--sans);
  -webkit-font-smoothing: antialiased;
}
.login-v2 .login-layout {
  display: grid;
  grid-template-columns: 1fr 1fr;
  height: 80vh;
  min-height: 480px;
}
.login-v2 .login-identity {
  background: var(--green);
  padding: 64px 56px 90px;
  display: flex;
  flex-direction: column;
  justify-content: flex-start;
  position: relative;
  overflow: hidden;
}
.login-v2 .login-identity::before {
  content: '';
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 0;
  background-image:
        linear-gradient(rgba(196,216,124,0.22) 1px, transparent 1px),
        linear-gradient(90deg, rgba(196,216,124,0.22) 1px, transparent 1px);
  background-size: 32px 32px;
}
.login-v2 .tick {
  position: absolute;
  width: 14px;
  height: 14px;
  z-index: 1;
}
.login-v2 .tick::before {
  content: '';
  position: absolute;
  left: 0;
  top: 50%;
  width: 100%;
  height: 1px;
  background: var(--mesh);
}
.login-v2 .tick::after {
  content: '';
  position: absolute;
  top: 0;
  left: 50%;
  height: 100%;
  width: 1px;
  background: var(--mesh);
}
.login-v2 .login-identity .tick-tl {
  top: 22px;
  left: 22px;
}
.login-v2 .login-identity .tick-bl {
  bottom: 22px;
  left: 22px;
}
.login-v2 .login-identity > * {
  position: relative;
  z-index: 1;
}
.login-v2 .identity-top {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 10px;
}
.login-v2 .identity-hero {
  margin-top: auto;
  margin-bottom: auto;
}
.login-v2 .identity-url {
  font: 500 9px/1 var(--mono);
  color: var(--lime);
  letter-spacing: 0.22em;
  text-transform: uppercase;
  opacity: 0.75;
}
.login-v2 .identity-label {
  font: 500 10px/1 var(--mono);
  color: var(--lime);
  letter-spacing: 0.22em;
  text-transform: uppercase;
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 18px;
}
.login-v2 .identity-label::before,
.login-v2 .identity-label::after {
  content: '';
  display: inline-block;
  width: 20px;
  height: 1px;
  background: var(--lime);
}
.login-v2 .identity-heading {
  font: 600 60px/0.94 var(--sans);
  color: var(--paper);
  letter-spacing: -0.035em;
  margin: 0;
}
.login-v2 .identity-heading span {
  color: var(--lime);
}
.login-v2 .identity-desc {
  font: 400 14px/1.6 var(--sans);
  color: var(--paper);
  opacity: 0.78;
  margin: 22px 0 0;
  max-width: 380px;
}
.login-v2 .identity-footer {
  position: absolute;
  bottom: 34px;
  left: 56px;
  right: 56px;
  display: flex;
  justify-content: center;
  font: 500 9px/1 var(--mono);
  color: var(--lime);
  letter-spacing: 0.2em;
  text-transform: uppercase;
  opacity: 0.7;
}
.login-v2 .login-auth {
  background: var(--paper);
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  overflow: hidden;
}
.login-v2 .login-auth::before {
  content: '';
  position: absolute;
  inset: 0;
  pointer-events: none;
}
.login-v2 .login-auth .tick-tl {
  top: 22px;
  left: 22px;
}
.login-v2 .login-auth .tick-tr {
  top: 22px;
  right: 22px;
}
.login-v2 .login-auth .tick-bl {
  bottom: 22px;
  left: 22px;
}
.login-v2 .login-auth .tick-br {
  bottom: 22px;
  right: 22px;
}
.login-v2 .login-hint {
  position: absolute;
  bottom: 34px;
  left: 50%;
  transform: translateX(-50%);
  display: flex;
  gap: 18px;
  font: 500 9px/1 var(--mono);
  color: var(--green);
  letter-spacing: 0.18em;
  text-transform: uppercase;
  opacity: 0.7;
  white-space: nowrap;
  z-index: 1;
  margin: 0;
}
.login-v2 .login-hint span {
  opacity: 0.4;
}
.login-v2 .login-form {
  position: relative;
  z-index: 1;
  width: 250px;
  display: flex;
  flex-direction: column;
  gap: 14px;
}
.login-v2 .form-header {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.login-v2 .form-eyebrow {
  font: 500 9px/1 var(--mono);
  color: var(--green);
  letter-spacing: 0.14em;
  text-transform: uppercase;
}
.login-v2 .form-title {
  font: 600 20px/1.2 var(--sans);
  color: var(--ink);
  letter-spacing: -0.02em;
  margin: 0;
}
.login-v2 .form-fields {
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.login-v2 .field {
  display: flex;
  flex-direction: column;
  gap: 5px;
}
.login-v2 .field-label {
  font: 500 9px/1 var(--mono);
  color: var(--green);
  letter-spacing: 0.12em;
  text-transform: uppercase;
}
.login-v2 .input {
  font: 400 11px/1 var(--mono);
  color: var(--ink);
  background: var(--paper);
  border: 1px solid var(--line);
  border-radius: 2px;
  padding: 9px 11px;
  outline: none;
  width: 100%;
  transition: border-color 0.15s, background 0.15s;
}
.login-v2 .input:focus {
  border-color: var(--green);
  background: #fff;
}
.login-v2 .input-row {
  display: flex;
  align-items: center;
  background: var(--paper);
  border: 1px solid var(--line);
  border-radius: 2px;
  padding: 9px 11px;
}
.login-v2 .input-row input::-ms-reveal,
.login-v2 .input-row input::-webkit-contacts-auto-fill-button,
.login-v2 .input-row input::-webkit-credentials-auto-fill-button { display: none; }
.login-v2 .input-row input {
  flex: 1;
  border: none;
  outline: none;
  background: transparent;
  font: 400 11px/1 var(--mono);
  color: var(--ink);
}
.login-v2 .input-row:focus-within {
  border-color: var(--green);
  background: #fff;
}
.login-v2 .btn-login {
  padding: 10px 12px;
  background: var(--green);
  color: var(--paper);
  font: 500 10px/1 var(--mono);
  letter-spacing: 0.14em;
  text-transform: uppercase;
  border: none;
  border-radius: 2px;
  cursor: pointer;
  text-align: center;
  transition: background 0.15s, transform 0.05s;
}
.login-v2 .btn-login:hover {
  background: var(--ink);
}
.login-v2 .btn-login:active {
  transform: translateY(1px);
}
.login-v2 .form-links {
  display: flex;
  justify-content: center;
  font: 500 9px/1 var(--mono);
  color: var(--green);
  letter-spacing: 0.1em;
  text-transform: uppercase;
  margin-top: -20px;
}
.login-v2 .form-links .or {
  opacity: 0.5;
}
.login-v2 .forgot-link {
  display: block;
  text-align: center;
  font: 500 9px/1 var(--mono);
  color: var(--green);
  letter-spacing: 0.1em;
  text-transform: uppercase;
  text-decoration: none;
  white-space: nowrap;
  opacity: 0.8;
}
.login-v2 .forgot-link:hover {
  color: var(--ink);
  opacity: 1;
}
.login-v2 .social-btns {
  display: flex;
  gap: 8px;
}
.login-v2 .btn-social {
  flex: 1;
  padding: 8px 12px;
  border: 1px solid var(--line);
  border-radius: 2px;
  background: var(--paper);
  color: var(--ink);
  font: 500 10.5px/1 var(--sans);
  display: flex;
  align-items: center;
  gap: 8px;
  cursor: pointer;
  transition: border-color 0.15s, background 0.15s;
}
.login-v2 .btn-social:hover {
  border-color: var(--green);
  background: var(--hush);
}
.login-v2 .btn-social i {
  color: var(--green);
}

/* ===== PROYECTOS v2 (Trama) — scopeado bajo .proyectos-v2 · anexar al final de styles.css ===== */
.project-container.proyectos-v2{display:block;padding:0;margin:0;background:transparent;min-height:0;height:auto;}
.proyectos-v2 {
  --paper:  #F4F5F0;
  --hush:   #E9EBE2;
  --clay:  #D8C8B0;
  --green:  #2C5A48;
  --ink:    #0F1F18;
  --mesh:  #6FA88A;
  --lime:   #C4D87C;
  --amber:  #D9A441;
  --rust:  #C25D3E;
  --sky:    #4A7A8C;
  --line:   rgba(111,168,138,0.40);
  --line-soft: rgba(111,168,138,0.22);
  --sans:   "Geist", system-ui, sans-serif;
  --mono:   "Geist Mono", ui-monospace, monospace;
}
.proyectos-v2 *, .proyectos-v2 *::before, .proyectos-v2 *::after {
  box-sizing: border-box;
}
.proyectos-v2 ::selection {
  background: var(--lime);
  color: var(--ink);
}
.proyectos-v2 {
  margin: 0;
  padding: 0;
  height: 100%;
  font-family: var(--sans);
  -webkit-font-smoothing: antialiased;
  color: var(--ink);
  background: var(--paper);
}
.proyectos-v2 .app-shell {
  display: flex;
  flex-direction: column;
  height: 100vh;
}
.proyectos-v2 .app-header {
  height: 60px;
  flex-shrink: 0;
  background: var(--hush);
  border-bottom: 1px solid rgba(111,168,138,0.47);
  display: flex;
  align-items: center;
  gap: 22px;
  padding: 0 28px;
}
.proyectos-v2 .header-divider {
  width: 1px;
  height: 22px;
  background: rgba(111,168,138,0.47);
}
.proyectos-v2 .header-app-name {
  font: 500 14px/1 var(--mono);
  color: var(--green);
  letter-spacing: 0.18em;
  text-transform: uppercase;
}
.proyectos-v2 .header-greeting {
  flex: 1;
  text-align: center;
  font: 500 14px/1 var(--mono);
  color: var(--ink);
  letter-spacing: 0.18em;
  text-transform: uppercase;
}
.proyectos-v2 .header-greeting strong {
  font-weight: 600;
}
.proyectos-v2 .header-user {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-left: auto;
  position: relative;
}
.proyectos-v2 .dash-user {
  border: 1px solid rgba(111,168,138,0.47);
  border-radius: 2px;
  padding: 4px 10px 4px 6px;
}
.proyectos-v2 .avatar {
  width: 40px;
  height: 40px;
  flex-shrink: 0;
  background: transparent;
  color: var(--lime);
  font: 600 14px/1 var(--sans);
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 2px;
  overflow: hidden;
}
.proyectos-v2 .user-info {
  display: flex;
  flex-direction: column;
}
.proyectos-v2 .user-name {
  font: 500 13px/1.2 var(--sans);
  color: var(--ink);
  letter-spacing: -0.005em;
}
.proyectos-v2 .user-role {
  font: 400 11.5px/1.2 var(--sans);
  color: var(--ink);
  opacity: 0.7;
  margin-top: 1px;
}
.proyectos-v2 .page-body {
  flex: 1;
  display: grid;
  grid-template-columns: 1fr 420px;
  min-height: 0;
}
.proyectos-v2 .render-area {
  background: var(--paper);
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 32px;
  overflow: hidden;
}
.proyectos-v2 .render-eyebrow {
  position: absolute;
  top: 24px;
  left: 24px;
  z-index: 2;
  font: 500 10px/1 var(--mono);
  color: var(--green);
  letter-spacing: 0.18em;
  text-transform: uppercase;
}
.proyectos-v2 .render-frame {
  width: 100%;
  height: 100%;
  position: relative;
  background: var(--paper);
  border: 1px solid rgba(111,168,138,0.35);
  overflow: hidden;
}
.proyectos-v2 .render-placeholder {
  position: absolute;
  inset: 0;
  background-image: repeating-linear-gradient(45deg, rgba(44,90,72,0.04) 0 8px, transparent 8px 16px);
  display: flex;
  align-items: center;
  justify-content: center;
}
.proyectos-v2 .render-placeholder-label {
  font: 500 13px/1 var(--mono);
  color: var(--green);
  letter-spacing: 0.14em;
  text-transform: uppercase;
  text-align: center;
  opacity: 0.5;
}
.proyectos-v2 .render-grid-overlay {
  position: absolute;
  inset: 0;
  pointer-events: none;
}
.proyectos-v2 .render-caption {
  position: absolute;
  left: 22px;
  bottom: 22px;
  padding: 12px 16px;
  background: var(--paper);
  border-left: 3px solid var(--green);
  max-width: 320px;
}
.proyectos-v2 .render-caption-type {
  font: 500 10px/1 var(--mono);
  color: var(--green);
  letter-spacing: 0.16em;
  text-transform: uppercase;
}
.proyectos-v2 .render-caption-name {
  font: 600 24px/1.15 var(--sans);
  color: var(--ink);
  letter-spacing: -0.025em;
  margin-top: 2px;
}
.proyectos-v2 .render-caption-meta {
  font: 400 12px/1.4 var(--sans);
  color: var(--ink);
  opacity: 0.65;
  margin-top: 2px;
}
.proyectos-v2 .render-badge {
  position: absolute;
  top: 22px;
  right: 22px;
  padding: 6px 10px;
  background: rgba(15,31,24,0.06);
  font: 500 9.5px/1 var(--mono);
  color: var(--green);
  letter-spacing: 0.16em;
  text-transform: uppercase;
}
.proyectos-v2 .projects-panel {
  border-left: 1px solid rgba(111,168,138,0.40);
  background: var(--paper);
  display: flex;
  flex-direction: column;
  min-height: 0;
  overflow-y: auto;
}
.proyectos-v2 .panel-header {
  padding: 20px 22px 14px;
  border-bottom: 1px solid rgba(111,168,138,0.40);
  flex-shrink: 0;
}
.proyectos-v2 .panel-eyebrow {
  font: 500 10px/1 var(--mono);
  color: var(--green);
  letter-spacing: 0.18em;
  text-transform: uppercase;
}
.proyectos-v2 .panel-title {
  font: 600 22px/1.2 var(--sans);
  color: var(--ink);
  letter-spacing: -0.025em;
  margin-top: 4px;
}
.proyectos-v2 .project-row-active {
  display: grid;
  grid-template-columns: 44px 1fr auto;
  gap: 12px;
  align-items: center;
  padding: 10px 7px 10px 7px;
  background: var(--hush);
  border-left: 3px solid var(--green);
  margin: 10px 14px 0;
}
.proyectos-v2 .project-row-other {
  display: grid;
  grid-template-columns: 36px 1fr auto;
  gap: 10px;
  align-items: center;
  padding: 8px 10px;
  margin: 0 14px;
  color: var(--ink);
}
.proyectos-v2 .monogram {
  display: flex;
  align-items: center;
  justify-content: center;
  font: 600 14px/1 var(--mono);
  letter-spacing: 0.04em;
  flex-shrink: 0;
  border-radius: 0;
}
.proyectos-v2 .project-name {
  font: 600 14px/1.2 var(--sans);
  color: var(--ink);
  letter-spacing: -0.01em;
}
.proyectos-v2 .project-code {
  font: 500 9.5px/1 var(--mono);
  color: var(--green);
  letter-spacing: 0.14em;
  text-transform: uppercase;
  margin-top: 2px;
}
.proyectos-v2 .details-block {
  margin: 0 14px;
  padding-left: 14px;
  border-left: 1px solid rgba(44,90,72,0.33);
  margin-right: 14px;
}
.proyectos-v2 .details-section {
  padding: 14px 8px;
}
.proyectos-v2 .details-section + .details-section {
  border-top: 1px solid rgba(111,168,138,0.40);
}
.proyectos-v2 .details-eyebrow {
  font: 500 9.5px/1 var(--mono);
  color: var(--green);
  letter-spacing: 0.18em;
  text-transform: uppercase;
  margin-bottom: 10px;
}
.proyectos-v2 .kv-row {
  display: grid;
  grid-template-columns: 90px 1fr;
  gap: 10px;
  padding: 4px 0;
}
.proyectos-v2 .kv-key {
  font: 500 9.5px/1 var(--mono);
  color: var(--green);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  padding-top: 2px;
}
.proyectos-v2 .kv-val {
  font: 500 12px/1.4 var(--sans);
  color: var(--ink);
}
.proyectos-v2 .kv-desc {
  margin-top: 8px;
  padding: 10px 12px;
  background: var(--hush);
  border: 1px solid rgba(111,168,138,0.35);
  font: 400 12px/1.5 var(--sans);
  color: var(--ink);
  opacity: 0.85;
}
.proyectos-v2 .sem-grid {
  display: grid;
  grid-template-columns: repeat(3,1fr);
  gap: 4px;
}
.proyectos-v2 .sem-tile {
  padding: 9px;
}
.proyectos-v2 .sem-num {
  font: 600 20px/1 var(--sans);
  letter-spacing: -0.02em;
}
.proyectos-v2 .sem-lbl {
  font: 500 9px/1 var(--mono);
  letter-spacing: 0.14em;
  text-transform: uppercase;
  margin-top: 4px;
}
.proyectos-v2 .activity-row {
  padding: 5px 0;
}
.proyectos-v2 .activity-row + .activity-row {
  border-top: 1px solid rgba(111,168,138,0.27);
}
.proyectos-v2 .activity-time {
  font: 500 9px/1 var(--mono);
  color: var(--green);
  letter-spacing: 0.14em;
  text-transform: uppercase;
}
.proyectos-v2 .activity-desc {
  font: 400 11.5px/1.4 var(--sans);
  color: var(--ink);
  margin-top: 1px;
}
.proyectos-v2 .panel-cta {
  padding: 14px 22px 18px;
  border-top: 1px solid rgba(111,168,138,0.40);
  margin-top: auto;
}
.proyectos-v2 .btn-cta {
  background: var(--green);
  color: var(--paper);
  padding: 12px 16px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  font: 500 11px/1 var(--mono);
  letter-spacing: 0.18em;
  text-transform: uppercase;
  cursor: pointer;
  border: none;
  width: 100%;
  border-radius: 0;
  transition: background 0.15s;
}
.proyectos-v2 .btn-cta:hover {
  background: var(--ink);
}
.proyectos-v2 .others-header {
  padding: 16px 22px 10px;
  border-top: 1px solid rgba(111,168,138,0.40);
}
.proyectos-v2 .others-eyebrow {
  font: 500 9.5px/1 var(--mono);
  color: var(--green);
  letter-spacing: 0.18em;
  text-transform: uppercase;
}
/* ── puentes a la mecánica existente (imageViewer / listaProyectos) ── */
.proyectos-v2 #imageViewer { position: relative; }
.proyectos-v2 #viewerPlaceholder { z-index: 1; }
.proyectos-v2 .render-grid-overlay { z-index: 2; }
.proyectos-v2 #projectImg {
  position: absolute; inset: 0; width: 100%; height: 100%;
  object-fit: cover; z-index: 3;
  opacity: 0; pointer-events: none;
  transition: opacity 0.45s ease;
}
.proyectos-v2 #projectImg.visible {
  opacity: 1; pointer-events: auto;
}
.proyectos-v2 #listaProyectos { padding: 6px 0 14px; }
.proyectos-v2 .project-item {
  background: #E9EBE2;
  margin: 4px 14px;
  overflow: hidden;
}
.proyectos-v2 .proj-logo {
  width: 36px; height: 36px; flex-shrink: 0;
  background: var(--green);
  position: relative; overflow: hidden;
  display: flex; align-items: center; justify-content: center;
}
.proyectos-v2 .proj-logo-ini {
  color: var(--paper);
  font: 600 13px/1 var(--mono);
  letter-spacing: 0.04em;
  position: relative; z-index: 1;
  pointer-events: none;
}
.proyectos-v2 .proj-logo-img {
  position: absolute; inset: 0;
  width: 100%; height: 100%;
  object-fit: contain;
  z-index: 2;
  transition: opacity 0.2s;
}
.proyectos-v2 .project-row-other {
  cursor: pointer; transition: background .12s;
  margin: 0;
}
.proyectos-v2 .project-row-other:hover { background: rgba(44,90,72,0.07); }
.proyectos-v2 .btn-info-eye {
  background: transparent; border: none; padding: 6px 8px;
  display: flex; align-items: center; justify-content: center;
  color: var(--green); cursor: pointer; flex-shrink: 0;
  font-size: 20px; opacity: 0.7; transition: opacity .15s;
}
.proyectos-v2 .btn-info-eye i.ti { transition: transform .2s ease; }
.proyectos-v2 .btn-info-eye:hover { opacity: 1; }
/* rota el chevron cuando el detalle está abierto */
.proyectos-v2 .project-item.detail-open .btn-info-eye i.ti { transform: rotate(180deg); }
.proyectos-v2 .project-desc {
  max-height: 0; overflow: hidden; opacity: 0; margin: 0; padding: 0;
  font: 400 12px/1.5 var(--sans); color: var(--ink);
  transition: max-height .35s ease, opacity .3s ease;
}
.proyectos-v2 .project-desc.open {
  max-height: 1200px; opacity: 1; margin: 0; padding: 0;
  border-top: 1px solid rgba(44,90,72,0.18);
}
/* secciones internas del panel de detalle por proyecto */
.proyectos-v2 .pd-section {
  padding: 12px 14px;
  border-bottom: 1px solid rgba(111,168,138,0.25);
}
.proyectos-v2 .pd-eyebrow {
  font: 500 9.5px/1 var(--mono);
  color: var(--green);
  letter-spacing: 0.18em;
  text-transform: uppercase;
  margin-bottom: 10px;
}
.proyectos-v2 .pd-resumen {
  padding: 10px 14px 12px;
  font: 400 12px/1.55 var(--sans);
  color: var(--ink);
  opacity: 0.85;
  border-bottom: 1px solid rgba(111,168,138,0.25);
}
.proyectos-v2 .disc-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 5px;
  margin-top: 2px;
}
.proyectos-v2 .disc-tag {
  display: inline-block;
  padding: 3px 10px;
  background: rgba(111,168,138,0.14);
  border: 1px solid rgba(111,168,138,0.35);
  color: var(--green);
  font: 500 10px/1.4 var(--mono);
  letter-spacing: 0.10em;
  text-transform: uppercase;
  border-radius: 2px;
}
.proyectos-v2 .btn-abrir-proy {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  padding: 12px 14px;
  background: var(--green);
  color: var(--paper);
  font: 500 10.5px/1 var(--mono);
  letter-spacing: 0.16em;
  text-transform: uppercase;
  border: none;
  cursor: pointer;
  transition: background 0.15s;
  border-radius: 0;
}
.proyectos-v2 .btn-abrir-proy:hover { background: var(--ink); }
/* marca visual de bloques estáticos a conectar */
.proyectos-v2 .stub-ejemplo { position: relative; }
.proyectos-v2 .stub-tag {
  display: inline-block; margin-left: 8px; padding: 1px 6px;
  background: rgba(217,164,65,0.18); color: var(--amber);
  font: 500 8px/1.4 var(--mono); letter-spacing: .12em; text-transform: uppercase; border-radius: 2px;
}

/* ===== DASHBOARD v2 (Trama) — scopeado bajo .dashboard-v2 · anexar al final de styles.css ===== */
.dashboard-v2 {
  --paper:  #F4F5F0;
  --hush:   #E9EBE2;
  --clay:  #D8C8B0;
  --green:  #2C5A48;
  --ink:    #0F1F18;
  --mesh:  #6FA88A;
  --lime:   #C4D87C;
  --amber:  #D9A441;
  --rust:  #C25D3E;
  --sky: #4A7A8C;
  --line:   rgba(111,168,138,0.40);
  --line-soft: rgba(111,168,138,0.22);
  --sans:   "Geist", system-ui, sans-serif;
  --mono:   "Geist Mono", ui-monospace, monospace;
}
.dashboard-v2 *, .dashboard-v2 *::before, .dashboard-v2 *::after {
  box-sizing: border-box;
}
.dashboard-v2 ::selection {
  background: var(--lime);
  color: var(--ink);
}
.dashboard-v2 {
  margin: 0;
  padding: 0;
  height: 100%;
  font-family: var(--sans);
  -webkit-font-smoothing: antialiased;
  color: var(--ink);
  background: var(--paper);
}
.dashboard-v2 .app-shell {
  display: flex;
  flex-direction: column;
  height: 100vh;
}
.dashboard-v2 .app-header {
  height: 60px;
  flex-shrink: 0;
  background: var(--hush);
  border-bottom: 1px solid rgba(111,168,138,0.47);
  display: flex;
  align-items: center;
  gap: 22px;
  padding: 0 28px;
}
.dashboard-v2 .header-divider {
  width: 1px;
  height: 22px;
  background: rgba(111,168,138,0.47);
  flex-shrink: 0;
}
.dashboard-v2 .header-nav {
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.dashboard-v2 .header-app-name {
  font: 500 14px/1 var(--mono);
  color: var(--green);
  letter-spacing: 0.18em;
  text-transform: uppercase;
}
.dashboard-v2 .header-breadcrumb {
  display: flex;
  align-items: center;
  gap: 8px;
  font: 400 14px/1 var(--sans);
  color: rgba(15,31,24,0.6);
}
.dashboard-v2 .header-breadcrumb i {
  font-size: 13px;
}
.dashboard-v2 .header-bell {
  position: relative;
  cursor: pointer;
}
.dashboard-v2 .header-bell .notif-dot {
  position: absolute;
  top: -3px;
  right: -4px;
  width: 7px;
  height: 7px;
  background: var(--rust);
  border-radius: 50%;
  box-shadow: 0 0 0 2px var(--hush);
}
.dashboard-v2 .header-user {
  display: flex;
  align-items: center;
  gap: 10px;
}
.dashboard-v2 .avatar {
  width: 40px;
  height: 40px;
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font: 600 13px/1 var(--sans);
  border-radius: 2px;
  background: transparent !important;
  border: none;
  color: var(--ink) !important;
  overflow: hidden;
}
.dashboard-v2 .user-info { display: flex; flex-direction: column; }
.dashboard-v2 .user-name {
  font: 500 13px/1.2 var(--sans);
  color: var(--ink);
  letter-spacing: -0.005em;
}
.dashboard-v2 .user-role {
  font: 400 11px/1.2 var(--sans);
  color: var(--ink);
  opacity: 0.6;
  margin-top: 2px;
}
.dashboard-v2 .page-body {
  flex: 1;
  display: grid;
  grid-template-columns: 520px 1fr;
  min-height: 0;
}
.dashboard-v2 .sidebar {
  width: 520px;
  background: var(--paper);
  border-right: 1px solid rgba(111,168,138,0.35);
  padding: 18px;
  display: flex;
  flex-direction: column;
  gap: 16px;
  overflow-y: auto;
}
.dashboard-v2 .sidebar-eyebrow {
  font: 500 11.5px/1 var(--mono);
  color: var(--green);
  letter-spacing: 0.16em;
  text-transform: uppercase;
}
.dashboard-v2 .sidebar-project-name {
  font: 600 22px/1.2 var(--sans);
  color: var(--ink);
  letter-spacing: -0.02em;
  margin-top: 2px;
}
.dashboard-v2 .btn-outline {
  display: inline-flex;
  align-items: center;
  padding: 6px 12px;
  border: 1px solid rgba(111,168,138,0.47);
  font: 500 12px/1 var(--mono);
  color: var(--green);
  letter-spacing: 0.1em;
  text-transform: uppercase;
  background: transparent;
  cursor: pointer;
  border-radius: 0;
  margin-top: 10px;
  transition: background 0.15s;
}
.dashboard-v2 .btn-outline:hover {
  background: var(--hush);
}
.dashboard-v2 .sem-grid {
  display: grid;
  grid-template-columns: repeat(3,1fr);
  gap: 6px;
  margin-top: 10px;
}
.dashboard-v2 .sem-tile {
  padding: 10px;
}
.dashboard-v2 .sem-num {
  font: 600 24px/1 var(--sans);
  letter-spacing: -0.02em;
}
.dashboard-v2 .sem-lbl {
  font: 500 9.5px/1 var(--mono);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  margin-top: 4px;
  opacity: 0.9;
}
.dashboard-v2 .btn-indicadores {
  display: inline-flex;
  align-items: center;
  padding: 6px 12px;
  margin-top: 8px;
  background: transparent;
  border: 1px solid rgba(111,168,138,0.47);
  font: 500 12px/1 var(--mono);
  color: var(--green);
  letter-spacing: 0.1em;
  text-transform: uppercase;
  cursor: pointer;
  transition: background 0.15s;
}
.dashboard-v2 .btn-indicadores:hover {
  background: var(--hush);
}
.dashboard-v2 .accordion-header {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 12px 14px;
  background: var(--hush);
  border: 1px solid rgba(111,168,138,0.47);
  cursor: pointer;
}
.dashboard-v2 .accordion-header-text {
  flex: 1;
}
.dashboard-v2 .accordion-header-title {
  font: 500 14px/1.2 var(--sans);
  color: var(--ink);
}
.dashboard-v2 .accordion-header-meta {
  font: 400 12px/1 var(--mono);
  color: var(--green);
  letter-spacing: 0.06em;
  margin-top: 1px;
}
.dashboard-v2 .accordion-body {
  margin-left: 20px;
  background: var(--paper);
  padding: 4px 12px 8px;
  border-left: 1px solid rgba(111,168,138,0.47);
}
.dashboard-v2 .cat-row {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 8px 0;
  border-top: 1px solid rgba(111,168,138,0.27);
}
.dashboard-v2 .cat-name {
  flex: 1;
  font: 500 14px/1 var(--sans);
  color: var(--ink);
}
.dashboard-v2 .cat-count {
  font: 500 13px/1 var(--mono);
  color: var(--green);
  letter-spacing: 0.06em;
}
.dashboard-v2 .venc-dot {
  width: 7px;
  height: 7px;
  background: var(--rust);
  border-radius: 50%;
}
.dashboard-v2 .nav-item {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 12px 14px;
  border: 1px solid rgba(111,168,138,0.47);
  background: var(--hush);
  cursor: pointer;
  transition: border-color 0.15s;
}
.dashboard-v2 .nav-item:hover {
  border-color: var(--green);
}
.dashboard-v2 .nav-item-body {
  flex: 1;
}
.dashboard-v2 .nav-item-title {
  font: 500 14px/1.2 var(--sans);
  color: var(--ink);
}
.dashboard-v2 .nav-item-meta {
  font: 400 12px/1 var(--mono);
  color: var(--green);
  letter-spacing: 0.06em;
  margin-top: 1px;
}
/* ── puentes al dashboard existente (layout, navegación viva, acordeón) ── */
.container.dashboard-v2 {
  grid-template-columns: 1fr; grid-template-rows: 1fr; grid-template-areas: none;
  height: 100vh; width: 100vw; padding: 0; margin: 0; gap: 0; background: var(--paper);
}
.dashboard-v2 .app-shell { grid-area: auto; min-height: 0; }
.dashboard-v2 .sidebar  { grid-area: auto; }
.dashboard-v2 .viewer   { grid-area: auto; min-width: 0; min-height: 0; padding: 0; overflow: hidden; }
.dashboard-v2 .viewer iframe { width: 100%; height: 100%; border: none; display: block; }

/* empuja campana + usuario a la derecha (reemplaza el buscador del mockup) */
.dashboard-v2 .header-user { margin-left: auto; }

/* botón hamburguesa */
.dashboard-v2 .dash-menu-btn {
  width: 34px; height: 34px; display: flex; align-items: center; justify-content: center;
  background: transparent; border: 1px solid rgba(111,168,138,0.47); border-radius: 2px;
  cursor: pointer; transition: background .15s;
}
.dashboard-v2 .dash-menu-btn:hover { background: var(--paper); }
/* usuario como desplegable */
.dashboard-v2 .dash-user {
  border: 1px solid rgba(111,168,138,0.47);
  border-radius: 2px;
  padding: 4px 10px 4px 6px;
  transition: background .15s;
}
.dashboard-v2 .dash-user:hover { background: rgba(111,168,138,0.08); }

/* acordeón de categorías: colapsable, alberga el árbol vivo #sidebarCategorias */
.dashboard-v2 #sidebarCatsWrap {
  max-height: 0; overflow: hidden; opacity: 0; padding: 0; margin-left: 20px;
  border-left: 1px solid rgba(111,168,138,0.47);
  transition: max-height .28s ease, opacity .2s ease, padding .2s ease;
}
.dashboard-v2 #sidebarCatsWrap.open { max-height: 1400px; opacity: 1; padding: 4px 12px 8px; }
.dashboard-v2 .accordion-header.open .chev { transform: rotate(180deg); }
.dashboard-v2 #sidebarCategorias { display: flex; flex-direction: column; gap: 4px; }

/* la campana existente, sin caja, alineada en el header */
.dashboard-v2 #campanaWrapper { position: relative; display: flex; align-items: center; }
.dashboard-v2 .campana-btn { background: transparent; border: none; cursor: pointer; padding: 4px; display: flex; }

/* ── dropdown usuario · estilo Trama ── */
.dashboard-v2 .dropdown-box,
.proyectos-v2 .dropdown-box {
  background: var(--paper);
  border: 1px solid rgba(111,168,138,0.35);
  border-radius: 2px;
  box-shadow: 0 8px 28px rgba(15,31,24,0.18);
  width: 280px;
  top: calc(100% + 14px);
  right: 0;
  font-family: var(--font-sans);
  overflow: hidden;
}
.dashboard-v2 .dropdown-header,
.proyectos-v2 .dropdown-header {
  padding: 16px 18px;
  background: var(--paper);
  border-bottom: 1px solid rgba(111,168,138,0.2);
}
.dashboard-v2 .dropdown-header b,
.proyectos-v2 .dropdown-header b {
  display: block;
  color: var(--ink);
  font: 600 15px/1.2 var(--font-sans);
  letter-spacing: -0.02em;
}
.dashboard-v2 .dropdown-header span,
.proyectos-v2 .dropdown-header span {
  display: block;
  color: var(--green);
  font: 500 10px/1 var(--font-mono);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  margin-top: 5px;
}
.dashboard-v2 .dropdown-section,
.proyectos-v2 .dropdown-section {
  padding: 10px 18px;
  background: var(--paper);
  border-bottom: 1px solid rgba(111,168,138,0.2);
  font-size: unset;
}
.dashboard-v2 .dropdown-section label,
.proyectos-v2 .dropdown-section label {
  display: block;
  color: var(--green);
  font: 500 9px/1 var(--font-mono);
  letter-spacing: 0.14em;
  text-transform: uppercase;
  margin-bottom: 3px;
  font-weight: unset;
}
.dashboard-v2 .dropdown-section p,
.proyectos-v2 .dropdown-section p {
  color: var(--ink);
  font: 400 13px/1.3 var(--font-sans);
  margin: 0;
}
.dashboard-v2 .dropdown-item-link,
.proyectos-v2 .dropdown-item-link {
  background: var(--paper);
  color: var(--ink);
  font: 500 12px/1 var(--font-sans);
  padding: 12px 18px;
  border-bottom: 1px solid rgba(111,168,138,0.2);
  font-weight: unset;
}
.dashboard-v2 .dropdown-item-link:hover,
.proyectos-v2 .dropdown-item-link:hover { background: var(--hush); }
.dashboard-v2 .logout-container,
.proyectos-v2 .logout-container { background: var(--paper); padding: 0; }
.dashboard-v2 .btn-cerrar-sesion,
.proyectos-v2 .btn-cerrar-sesion {
  background: var(--rust);
  color: var(--paper);
  font: 600 10px/1 var(--font-mono);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  padding: 14px 18px;
  border-radius: 0;
  width: 100%;
  border: none;
  cursor: pointer;
}
.dashboard-v2 .btn-cerrar-sesion:hover,
.proyectos-v2 .btn-cerrar-sesion:hover { background: var(--ink); }

/* ── sidebar: disciplinas con ícono (Trama) ── */
.dashboard-v2 .btn-categoria {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  padding: 10px 12px;
  margin-bottom: 4px;
  background: transparent;
  border: 1px solid rgba(111,168,138,0.3);
  border-radius: 2px;
  cursor: pointer;
  transition: background .12s, border-color .12s;
  font-family: 'Geist', system-ui, sans-serif;
}
.dashboard-v2 .btn-categoria:hover {
  background: var(--hush);
  border-color: var(--green);
}
.dashboard-v2 .btn-categoria.rama-activa {
  background: var(--green);
  border-color: var(--green);
}
.dashboard-v2 .disc-icon-label {
  display: flex;
  align-items: center;
  gap: 10px;
  font: 500 13px/1 'Geist', sans-serif;
  color: var(--ink);
}
.dashboard-v2 .disc-icon-label i {
  font-size: 18px;
  color: var(--green);
  flex-shrink: 0;
}
.dashboard-v2 .btn-categoria.rama-activa .disc-icon-label {
  color: var(--paper);
}
.dashboard-v2 .btn-categoria.rama-activa .disc-icon-label i {
  color: var(--lime);
}
.dashboard-v2 .badge-estado {
  font: 500 9px/1.4 'Geist Mono', monospace;
  letter-spacing: .1em;
  text-transform: uppercase;
  padding: 3px 8px;
  border-radius: 2px;
  flex-shrink: 0;
}
.dashboard-v2 .badge-estado.urgente {
  background: var(--rust);
  color: var(--paper);
}
.dashboard-v2 .badge-estado.prioritario {
  background: var(--amber);
  color: var(--ink);
}
.dashboard-v2 .badge-estado.en-tiempo {
  background: var(--lime);
  color: var(--ink);
}
.dashboard-v2 .badge-estado.normal {
  background: rgba(111,168,138,0.15);
  color: var(--green);
}

/* ── sidebar: niveles profundos del árbol vivo (Trama) ── */
/* contenedor colapsable de categorías bajo cada disciplina */
.dashboard-v2 .lista-activos-desplegable {
  max-height: 0;
  overflow: hidden;
  transition: max-height .4s cubic-bezier(0.4,0,0.2,1);
  margin: 0 0 4px;
}
.dashboard-v2 .lista-activos-desplegable.active { max-height: 6000px; margin-bottom: 8px; }

/* nivel 2 · categoría Revit */
.dashboard-v2 .btn-cat-revit {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  width: calc(100% - 10px);
  margin: 6px 0 0 10px;
  padding: 8px 11px;
  background: transparent;
  border: 1px solid rgba(111,168,138,0.3);
  border-left: 2px solid rgba(111,168,138,0.55);
  border-radius: 2px;
  cursor: pointer;
  text-align: left;
  font: 500 11px/1.25 var(--sans);
  color: var(--ink);
  transition: background .12s, border-color .12s;
}
.dashboard-v2 .btn-cat-revit:hover { background: var(--hush); border-left-color: var(--green); }
.dashboard-v2 .btn-cat-revit.rama-activa { background: var(--hush); border-left-color: var(--green); color: var(--green); }
.dashboard-v2 .cat-revit-nombre { line-height: 1.25; }
.dashboard-v2 .cat-revit-count {
  flex-shrink: 0;
  background: rgba(111,168,138,0.15);
  color: var(--green);
  font: 500 10px/1 var(--mono);
  letter-spacing: .04em;
  padding: 3px 7px;
  border-radius: 2px;
}

/* contenedor colapsable de activos bajo cada categoría */
.dashboard-v2 .lista-cat-revit {
  max-height: 0;
  overflow: hidden;
  transition: max-height .35s cubic-bezier(0.4,0,0.2,1);
  margin-left: 10px;
}
.dashboard-v2 .lista-cat-revit.active { max-height: 5000px; margin-bottom: 8px; }

/* encabezados de familia / tipo (aparecen sólo cuando hay más de uno) */
.dashboard-v2 .fam-revit-header {
  margin: 9px 0 4px 10px;
  font: 500 9px/1.3 var(--mono);
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--green);
}
.dashboard-v2 .tipo-revit-header {
  margin: 4px 0 4px 20px;
  font: 500 9px/1.3 var(--mono);
  letter-spacing: .1em;
  text-transform: uppercase;
  color: rgba(111,168,138,0.9);
}
/* encabezados clicables (aíslan en el visor) */
.dashboard-v2 .rama-clic {
  cursor: pointer;
  border-radius: 2px;
  padding: 2px 6px;
  transition: background .15s, color .15s;
}
.dashboard-v2 .rama-clic:hover { background: var(--hush); color: var(--green); }
.dashboard-v2 .fam-revit-header.rama-activa,
.dashboard-v2 .tipo-revit-header.rama-activa { background: var(--hush); color: var(--green); }

/* tarjeta de activo (item-vencimiento) */
.dashboard-v2 .item-vencimiento {
  margin: 0 0 6px 10px;
  background: var(--paper);
  border: 1px solid rgba(111,168,138,0.3);
  border-left: 2px solid rgba(111,168,138,0.55);
  border-radius: 2px;
  overflow: hidden;
  transition: border-color .15s;
}
.dashboard-v2 .item-vencimiento:hover { border-left-color: var(--green); }
.dashboard-v2 .btn-activo-header {
  width: 100%;
  background: transparent;
  border: none;
  border-bottom: 1px solid rgba(111,168,138,0.15);
  padding: 9px 12px;
  text-align: left;
  cursor: pointer;
  display: flex;
  flex-direction: column;
  gap: 3px;
  transition: background .12s;
}
.dashboard-v2 .btn-activo-header:hover { background: var(--hush); }
.dashboard-v2 .category-label {
  font: 500 8px/1.2 var(--mono);
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--green);
  opacity: .8;
}
.dashboard-v2 .header-main-row { display: flex; justify-content: space-between; align-items: center; gap: 8px; }
.dashboard-v2 .asset-name { font: 500 12.5px/1.2 var(--sans); color: var(--ink); }
/* status-tag: badge de estado cross-cutting (dashboard sidebar, calendario, etc.) · global Trama */
.status-tag {
  flex-shrink: 0;
  font: 500 9px/1.3 var(--font-mono);
  letter-spacing: .08em;
  text-transform: uppercase;
  padding: 2px 8px;
  border-radius: 2px;
  white-space: nowrap;
}
.status-tag.status-error { background: var(--color-rust);  color: var(--color-paper); }
.status-tag.status-warn  { background: var(--color-amber); color: var(--color-ink); }
.status-tag.status-info  { background: var(--color-lime);  color: var(--color-ink); }
.status-tag.status-ok    { background: rgba(111,168,138,0.15); color: var(--color-green); }

/* detalle desplegable del activo */
.dashboard-v2 .info-desplegable { display: none; padding: 12px; background: var(--hush); }
.dashboard-v2 .info-group { margin-bottom: 10px; }
.dashboard-v2 .info-group:last-child { margin-bottom: 0; }
.dashboard-v2 .info-label {
  display: block;
  margin-bottom: 3px;
  font: 500 8.5px/1.2 var(--mono);
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--green);
}
.dashboard-v2 .info-value { display: block; font: 400 12px/1.4 var(--sans); color: var(--ink); }
/* ver-mas-link: enlace cross-cutting (dashboard sidebar, calendario) · global Trama */
.ver-mas-link {
  font: 500 10px/1 var(--font-mono);
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--color-green);
  cursor: pointer;
  border-bottom: 1px solid transparent;
  transition: border-color .2s;
}
.ver-mas-link:hover { border-bottom-color: var(--color-green); }

/* ── badges/pills de OT cross-cutting (panel OT, calendario, modal orden) · global Trama ── */
.orden-prioridad-badge { display: inline-block; padding: 3px 8px; border-radius: 2px; font: 600 9px/1.4 var(--font-mono); letter-spacing: .08em; text-transform: uppercase; }
.orden-prioridad-badge.ord-alta  { background: var(--color-rust);  color: var(--color-paper); }
.orden-prioridad-badge.ord-media { background: var(--color-amber); color: var(--color-ink); }
.orden-prioridad-badge.ord-baja  { background: var(--color-lime);  color: var(--color-ink); }

.go-estado { display: inline-block; font: 500 10px/1 var(--font-mono); letter-spacing: .1em; text-transform: uppercase; padding: 4px 9px; border-radius: 2px; background: var(--color-hush); color: var(--color-ink); }
.go-estado.go-creada       { background: rgba(74,122,140,.16);  color: var(--color-sky); }
.go-estado.go-en-proceso   { background: rgba(196,216,124,.30); color: var(--color-green); }
.go-estado.go-pausada      { background: rgba(217,164,65,.20);  color: var(--color-amber); }
.go-estado.go-reprogramada { background: rgba(111,168,138,.20); color: var(--color-green); }
.go-estado.go-cerrada      { background: var(--color-ink);      color: var(--color-paper); }
.go-estado.go-cancelada    { background: rgba(194,93,62,.16);   color: var(--color-rust); }

/* botón "ver todo en el 3D" (limpia el aislado) */
.dashboard-v2 .btn-ver-todo-3d {
  width: 100%;
  margin-bottom: 8px;
  padding: 8px 12px;
  background: var(--ink);
  color: var(--paper);
  border: none;
  border-radius: 2px;
  font: 500 10px/1 var(--mono);
  letter-spacing: .12em;
  text-transform: uppercase;
  cursor: pointer;
  transition: background .15s;
}
.dashboard-v2 .btn-ver-todo-3d:hover { background: var(--green); }

/* ===== MODALES v2 (Trama) — inicio ===== */

/* ===== modal-activo-v2 (Trama) · scopeado bajo .modal-activo-v2 ===== */
.modal-activo-v2 {
  --paper:#F4F5F0;
  --hush:#E9EBE2;
  --clay:#D8C8B0;
  --green:#2C5A48;
  --ink:#0F1F18;
  --mesh:#6FA88A;
  --lime:#C4D87C;
  --amber:#D9A441;
  --rust:#C25D3E;
  --sky:#4A7A8C;
  --line:rgba(111,168,138,0.40);
  --sans:"Geist",system-ui,sans-serif;
  --mono:"Geist Mono",ui-monospace,monospace;
}
.modal-activo-v2 *, .modal-activo-v2 *::before, .modal-activo-v2 *::after {
  box-sizing:border-box;
}
.modal-activo-v2 ::selection {
  background:var(--lime);
  color:var(--ink);
}
/* el overlay ES el elemento .modal-activo-v2 (#activoOverlay) */
.modal-activo-v2 {
  position:fixed !important;
  top:60px !important;
  left:0 !important;
  right:0 !important;
  bottom:0 !important;
  z-index:10102 !important;
  background:rgba(15,31,24,.55) !important;
  backdrop-filter:blur(8px) !important;
  align-items:flex-start !important;
  justify-content:center !important;
  padding:20px 24px !important;
  font-family:var(--sans);
  -webkit-font-smoothing:antialiased;
  color:var(--ink);
}
/* .modal-card reemplaza .modal del design */
.modal-activo-v2 .modal-card {
  width:720px;
  max-width:100%;
  background:var(--paper);
  box-shadow:0 30px 60px rgba(0,0,0,.4);
  display:flex;
  flex-direction:column;
  border-radius:0 !important;
  position:relative;
  color:var(--ink);
}
/* botón cerrar */
.modal-activo-v2 .ma-close {
  position:absolute;
  top:16px;
  right:16px;
  background:none;
  border:none;
  color:var(--green);
  font-size:18px;
  cursor:pointer;
  padding:4px;
  z-index:10;
  line-height:1;
  width:auto;
  margin-top:0;
}
.modal-activo-v2 .ma-close:hover { color:var(--ink); }
/* header: .ma-header reemplaza .modal-header */
.modal-activo-v2 .ma-header {
  padding:20px 26px 16px;
  border-bottom:1px solid rgba(111,168,138,0.35);
}
/* .ma-eyebrow reemplaza .modal-eyebrow */
.modal-activo-v2 .ma-eyebrow {
  font:500 10px/1 var(--mono);
  color:var(--green);
  letter-spacing:.16em;
  text-transform:uppercase;
  margin:0;
}
/* h2.ma-title reemplaza .modal-title */
.modal-activo-v2 .ma-title {
  font:600 24px/1.2 var(--sans);
  color:var(--ink);
  letter-spacing:-.025em;
  margin:4px 0 0;
}
/* span.ma-status reemplaza .pill (badge de estado) */
.modal-activo-v2 .ma-status {
  display:inline-block;
  font:500 10px/1 var(--mono);
  letter-spacing:.1em;
  text-transform:uppercase;
  padding:4px 10px;
  background:var(--hush);
  border:1px solid rgba(111,168,138,.35);
  margin-top:10px;
}
/* .ma-img reemplaza .img-placeholder */
.modal-activo-v2 .ma-img {
  margin:16px 26px 0;
  height:160px;
  background:var(--hush);
  border:1px solid var(--line);
  display:flex;
  align-items:center;
  justify-content:center;
  overflow:hidden;
  background-image:repeating-linear-gradient(45deg,rgba(111,168,138,.1) 0 8px,transparent 8px 16px);
}
.modal-activo-v2 .ma-img img {
  width:100%;
  height:100%;
  object-fit:cover;
}
/* .ma-section reemplaza .modal-section */
.modal-activo-v2 .ma-section {
  padding:20px 26px 0;
}
/* .ma-section-title reemplaza .section-label */
.modal-activo-v2 .ma-section-title {
  font:500 10px/1 var(--mono);
  color:var(--green);
  letter-spacing:.16em;
  text-transform:uppercase;
  padding-bottom:10px;
  border-bottom:1px solid rgba(111,168,138,.35);
  margin-bottom:0;
}
/* .af-grid reemplaza .grid-2 */
.modal-activo-v2 .af-grid {
  display:grid;
  grid-template-columns:repeat(2,1fr);
  gap:10px 20px;
  margin-top:12px;
}
.modal-activo-v2 .af-field {
  display:flex;
  flex-direction:column;
}
/* .af-field.full reemplaza .kv-full */
.modal-activo-v2 .af-field.full {
  grid-column:1/-1;
}
/* .af-label reemplaza .kv-key */
.modal-activo-v2 .af-label {
  font:500 9.5px/1 var(--mono);
  color:var(--green);
  letter-spacing:.14em;
  text-transform:uppercase;
}
/* input.activo-field-value reemplaza .kv-val */
.modal-activo-v2 .activo-field-value {
  font:500 13px/1.3 var(--sans);
  color:var(--ink);
  margin-top:3px;
  border:none;
  background:transparent;
  padding:0;
  width:100%;
  outline:none;
}
.modal-activo-v2 .activo-field-value:not([readonly]) {
  background:var(--hush);
  padding:6px 8px;
  border:1px solid rgba(111,168,138,.4);
}
/* input.activo-field-calc (próximo vencimiento) */
.modal-activo-v2 .activo-field-calc {
  font:600 16px/1 var(--sans);
  color:var(--ink);
  letter-spacing:-.02em;
  margin-top:3px;
  border:none;
  background:transparent;
  padding:0;
  width:100%;
  outline:none;
}
/* .btn-ma-visor reemplaza .btn-ot */
.modal-activo-v2 .btn-ma-visor {
  margin-top:12px;
  padding:11px 14px;
  background:var(--green);
  color:var(--paper);
  font:500 12px/1 var(--mono);
  letter-spacing:.14em;
  text-transform:uppercase;
  text-align:center;
  cursor:pointer;
  border:none;
  width:100%;
}
.modal-activo-v2 .btn-ma-visor:hover { background:var(--ink); }
/* .ma-btn-row: fila de botones de OT */
.modal-activo-v2 .ma-btn-row {
  margin-top:12px;
  display:flex;
  gap:8px;
  flex-wrap:wrap;
}
/* historial: .ma-hist y .ma-hist-grid reemplazan .hist-row */
.modal-activo-v2 .ma-hist {
  padding:12px;
  border:1px solid rgba(111,168,138,.35);
  margin-top:12px;
  background:var(--hush);
}
.modal-activo-v2 .ma-hist-grid {
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:10px;
}
.modal-activo-v2 .ma-hist-item.full {
  grid-column:1/-1;
}
.modal-activo-v2 .ma-hist-label {
  font:500 9.5px/1 var(--mono);
  color:var(--green);
  letter-spacing:.14em;
  text-transform:uppercase;
}
.modal-activo-v2 .ma-hist-value {
  font:500 13px/1.3 var(--sans);
  color:var(--ink);
  margin-top:3px;
}
.modal-activo-v2 .ma-details { margin-top:12px; }
.modal-activo-v2 .ma-summary {
  font:500 11px/1 var(--mono);
  color:var(--green);
  letter-spacing:.1em;
  cursor:pointer;
  padding:8px 0;
  list-style:none;
}
.modal-activo-v2 .ma-hist-table {
  width:100%;
  border-collapse:collapse;
  margin-top:8px;
  font:400 12px/1.4 var(--sans);
  color:var(--ink);
}
.modal-activo-v2 .ma-hist-table th {
  font:500 9.5px/1 var(--mono);
  color:var(--green);
  letter-spacing:.12em;
  text-transform:uppercase;
  padding:6px 8px;
  border-bottom:1px solid rgba(111,168,138,.35);
  text-align:left;
  background:none;
}
.modal-activo-v2 .ma-hist-table td {
  padding:6px 8px;
  border-bottom:1px solid rgba(111,168,138,.2);
}
/* .ma-footer reemplaza .modal-footer */
.modal-activo-v2 .ma-footer {
  padding:24px 26px;
  display:flex;
  gap:8px;
  justify-content:flex-end;
  border-top:1px solid rgba(111,168,138,.35);
  margin-top:20px;
}
/* .btn-ma-cancel reemplaza .btn-secondary-sm */
.modal-activo-v2 .btn-ma-cancel {
  padding:10px 16px;
  border:1px solid var(--green);
  font:500 11px/1 var(--mono);
  color:var(--green);
  letter-spacing:.14em;
  text-transform:uppercase;
  background:transparent;
  cursor:pointer;
  width:auto;
  margin-top:0;
}
.modal-activo-v2 .btn-ma-cancel:hover { background:var(--hush); }
/* .btn-ma-primary reemplaza .btn-primary-sm */
.modal-activo-v2 .btn-ma-primary {
  padding:10px 16px;
  background:var(--green);
  color:var(--paper);
  font:500 11px/1 var(--mono);
  letter-spacing:.14em;
  text-transform:uppercase;
  border:none;
  cursor:pointer;
  width:auto;
  margin-top:0;
}
.modal-activo-v2 .btn-ma-primary:hover { background:var(--ink); }

/* ===== nueva-ot-v2 (Trama) · scopeado bajo .nueva-ot-v2 ===== */
.nueva-ot-v2 {
  --paper:#F4F5F0;
  --hush:#E9EBE2;
  --green:#2C5A48;
  --ink:#0F1F18;
  --mesh:#6FA88A;
  --lime:#C4D87C;
  --amber:#D9A441;
  --rust:#C25D3E;
  --line:rgba(111,168,138,0.40);
  --sans:"Geist",system-ui,sans-serif;
  --mono:"Geist Mono",ui-monospace,monospace;
}
.nueva-ot-v2 *, .nueva-ot-v2 *::before, .nueva-ot-v2 *::after {
  box-sizing:border-box;
}
.nueva-ot-v2 ::selection {
  background:var(--lime);
  color:var(--ink);
}
/* el overlay ES el elemento .nueva-ot-v2 (#ordenOverlay) */
.nueva-ot-v2 {
  font-family:var(--sans);
  -webkit-font-smoothing:antialiased;
  color:var(--ink);
  background:rgba(15,31,24,.55) !important;
  backdrop-filter:blur(8px) !important;
}
/* .orden-card reemplaza .modal */
.nueva-ot-v2 .orden-card {
  width:760px;
  max-width:100%;
  background:var(--paper);
  box-shadow:0 30px 60px rgba(0,0,0,.4);
  display:flex;
  flex-direction:column;
  border-radius:0 !important;
}
/* .orden-header reemplaza .modal-header */
.nueva-ot-v2 .orden-header {
  padding:20px 28px 16px;
  border-bottom:1px solid var(--line);
  display:flex;
  justify-content:space-between;
  align-items:flex-start;
  background:var(--green) !important;
  border-radius:0 !important;
}
.nueva-ot-v2 .orden-header h2 {
  font:600 24px/1.2 var(--sans) !important;
  color:var(--paper) !important;
  letter-spacing:-.025em;
  margin:0;
}
.nueva-ot-v2 .orden-header p {
  font:500 12px/1 var(--sans) !important;
  color:var(--paper) !important;
  opacity:.8;
  margin:4px 0 0;
}
.nueva-ot-v2 .orden-close-x {
  font-size:22px;
  color:var(--paper);
  cursor:pointer;
  line-height:1;
  opacity:.8;
}
.nueva-ot-v2 .orden-close-x:hover { opacity:1; }
/* .orden-body reemplaza .modal-body */
.nueva-ot-v2 .orden-body {
  padding:20px 28px;
  display:flex;
  flex-direction:column;
  gap:14px;
  overflow-y:auto;
}
/* código OT */
.nueva-ot-v2 .orden-codigo-box {
  padding:10px 14px;
  background:var(--ink);
  display:flex;
  align-items:center;
  gap:10px;
}
.nueva-ot-v2 #ordenCodigoTexto {
  font:600 16px/1 var(--mono);
  color:var(--lime);
  letter-spacing:.04em;
}
.nueva-ot-v2 .orden-codigo-badge {
  font:500 9px/1 var(--mono);
  color:var(--green);
  letter-spacing:.18em;
  text-transform:uppercase;
  background:var(--hush);
  padding:2px 7px;
}
/* .orden-section-label reemplaza .body-section-title */
.nueva-ot-v2 .orden-section-label {
  font:500 10px/1 var(--mono);
  color:var(--green);
  letter-spacing:.16em;
  text-transform:uppercase;
  padding-bottom:8px;
  border-bottom:1px solid var(--line);
  margin:0;
}
/* .orden-info-box reemplaza .activo-data */
.nueva-ot-v2 .orden-info-box {
  padding:14px;
  background:var(--hush);
  font:500 12.5px/1.3 var(--sans);
  color:var(--ink);
}
/* .orden-form-grid reemplaza .form-grid */
.nueva-ot-v2 .orden-form-grid {
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:12px 16px;
}
/* .orden-campo reemplaza .field */
.nueva-ot-v2 .orden-campo {
  display:flex;
  flex-direction:column;
  gap:5px;
}
.nueva-ot-v2 .orden-campo.full { grid-column:1/-1; }
/* .orden-label reemplaza .field-label */
.nueva-ot-v2 .orden-label {
  font:500 9.5px/1 var(--mono);
  color:var(--green);
  letter-spacing:.14em;
  text-transform:uppercase;
}
/* .orden-select y .orden-input reemplazan .fake-select */
.nueva-ot-v2 .orden-select,
.nueva-ot-v2 .orden-input {
  padding:10px 12px;
  border:1px solid var(--mesh);
  background:var(--paper);
  font:500 12.5px/1 var(--sans);
  color:var(--ink);
  border-radius:0;
  width:100%;
}
.nueva-ot-v2 .orden-input[readonly] { background:var(--hush); }
/* .orden-textarea reemplaza .textarea */
.nueva-ot-v2 .orden-textarea {
  padding:12px;
  border:1px solid var(--mesh);
  min-height:100px;
  font:400 13px/1.5 var(--sans);
  color:var(--ink);
  border-radius:0;
  width:100%;
}
/* mensaje de éxito */
.nueva-ot-v2 .orden-exito {
  padding:12px 14px;
  background:var(--hush);
  border-left:2px solid var(--green);
  font:500 12px/1.4 var(--sans);
  color:var(--green);
}
/* historial de OT anteriores */
.nueva-ot-v2 .orden-historial-wrap { margin-top:4px; }
.nueva-ot-v2 .orden-historial-title {
  font:500 10px/1 var(--mono);
  color:var(--green);
  letter-spacing:.14em;
  text-transform:uppercase;
  margin:0 0 8px;
}
.nueva-ot-v2 .orden-historial-table {
  width:100%;
  border-collapse:collapse;
  font:400 12px/1.4 var(--sans);
  color:var(--ink);
}
.nueva-ot-v2 .orden-historial-table th {
  font:500 9.5px/1 var(--mono);
  color:var(--green);
  letter-spacing:.12em;
  text-transform:uppercase;
  padding:6px 8px;
  border-bottom:1px solid rgba(111,168,138,.35);
  text-align:left;
  background:none;
}
.nueva-ot-v2 .orden-historial-table td {
  padding:6px 8px;
  border-bottom:1px solid rgba(111,168,138,.2);
}
/* .orden-footer reemplaza .modal-footer */
.nueva-ot-v2 .orden-footer {
  padding:18px 28px;
  border-top:1px solid var(--line);
  display:flex;
  justify-content:flex-end;
  align-items:center;
  gap:8px;
  background:var(--paper) !important;
  border-radius:0 !important;
}
/* .orden-btn-cancelar reemplaza .btn--ghost */
.nueva-ot-v2 .orden-btn-cancelar {
  padding:10px 16px;
  background:transparent;
  border:1px solid var(--mesh);
  font:500 11px/1 var(--mono);
  color:var(--green);
  letter-spacing:.14em;
  text-transform:uppercase;
  cursor:pointer;
}
.nueva-ot-v2 .orden-btn-cancelar:hover { background:var(--hush); }
/* .orden-btn-generar reemplaza .btn--primary */
.nueva-ot-v2 .orden-btn-generar {
  padding:10px 16px;
  background:var(--green);
  color:var(--paper);
  border:none;
  font:500 11px/1 var(--mono);
  letter-spacing:.14em;
  text-transform:uppercase;
  cursor:pointer;
}
.nueva-ot-v2 .orden-btn-generar:hover { background:var(--ink); }

/* ===== panel-ot-v2 (Trama) · scopeado bajo .panel-ot-v2 ===== */
.panel-ot-v2 {
  --paper:#F4F5F0;
  --hush:#E9EBE2;
  --green:#2C5A48;
  --ink:#0F1F18;
  --mesh:#6FA88A;
  --lime:#C4D87C;
  --amber:#D9A441;
  --rust:#C25D3E;
  --sky:#4A7A8C;
  --line:rgba(111,168,138,0.35);
  --sans:"Geist",system-ui,sans-serif;
  --mono:"Geist Mono",ui-monospace,monospace;
}
.panel-ot-v2 *, .panel-ot-v2 *::before, .panel-ot-v2 *::after {
  box-sizing:border-box;
}
.panel-ot-v2 ::selection { background:var(--lime); color:var(--ink); }
.panel-ot-v2 {
  font-family:var(--sans);
  -webkit-font-smoothing:antialiased;
  color:var(--ink);
}
/* .go-modal reemplaza .app */
.panel-ot-v2 .go-modal {
  background:var(--paper) !important;
  border-radius:0 !important;
  box-shadow:0 30px 60px rgba(0,0,0,.4) !important;
  width:98% !important;
  max-width:1400px !important;
}
/* .go-header reemplaza .app-header */
.panel-ot-v2 .go-header {
  padding:16px 24px !important;
  border-bottom:1px solid rgba(111,168,138,.44) !important;
  background:var(--green) !important;
}
.panel-ot-v2 .go-header h2 {
  font:600 20px/1 var(--sans) !important;
  color:var(--paper) !important;
  letter-spacing:-.02em;
  margin:0;
}
.panel-ot-v2 .go-header p {
  font:400 12px/1 var(--sans) !important;
  color:var(--paper) !important;
  opacity:.65;
  margin:3px 0 0;
}
/* .btn-generar-orden en el header reemplaza .btn-white */
.panel-ot-v2 .go-header .btn-generar-orden {
  padding:10px 18px !important;
  background:#E9EBE2 !important;
  font:500 11px/1 var(--mono) !important;
  color:var(--green) !important;
  letter-spacing:.12em;
  text-transform:uppercase;
  border:none !important;
  border-radius:0 !important;
}
.panel-ot-v2 .go-header .btn-generar-orden:hover { background:var(--hush) !important; }
/* .go-close-x reemplaza .btn-close */
.panel-ot-v2 .go-close-x {
  font-size:22px !important;
  color:var(--paper) !important;
  transition:none !important;
}
.panel-ot-v2 .go-close-x:hover { transform:none !important; opacity:.8; }
/* .go-indicadores reemplaza .kpi-bar */
.panel-ot-v2 .go-indicadores {
  padding:14px 24px !important;
  border-bottom:1px solid var(--line) !important;
  background:var(--paper) !important;
  display:grid !important;
  grid-template-columns:repeat(7,1fr) !important;
  gap:8px !important;
}
/* .go-ind reemplaza .kpi-tile */
.panel-ot-v2 .go-ind {
  padding:12px 14px !important;
  background:var(--hush) !important;
  border-radius:0 !important;
  border-left:none !important;
  border:1px solid var(--line) !important;
  box-shadow:none !important;
  display:flex !important;
  flex-direction:column !important;
  align-items:flex-start !important;
  gap:4px !important;
  transition:none !important;
}
/* [neutralizado — sobreescrito por bloque Trama al final]
.panel-ot-v2 .go-ind:hover { transform:none !important; box-shadow:none !important; background:var(--clay) !important; }
.panel-ot-v2 .go-ind.active { background:var(--ink) !important; outline:none !important; }
.panel-ot-v2 .go-ind.active .go-ind-num,
.panel-ot-v2 .go-ind.active .go-ind-label { color:var(--paper) !important; }
*/
/* .go-ind-num reemplaza .kpi-num */
.panel-ot-v2 .go-ind-num {
  font:600 26px/1 var(--sans) !important;
  letter-spacing:-.03em;
  color:var(--ink) !important;
}
/* .go-ind-label reemplaza .kpi-label */
.panel-ot-v2 .go-ind-label {
  font:500 9px/1 var(--mono) !important;
  letter-spacing:.14em;
  text-transform:uppercase;
  color:var(--green) !important;
  opacity:1 !important;
}
/* .go-criticidad-bar reemplaza .crit-bar */
.panel-ot-v2 .go-criticidad-bar {
  padding:12px 24px !important;
  border-bottom:1px solid var(--line) !important;
}
/* .go-crit-label reemplaza .crit-bar-eyebrow */
.panel-ot-v2 .go-crit-label {
  font:500 8.5px/1 var(--mono) !important;
  color:var(--green) !important;
  letter-spacing:.18em;
  text-transform:uppercase;
  margin-bottom:10px;
}
/* .go-critcards reemplaza .crit-grid */
.panel-ot-v2 .go-critcards {
  display:grid !important;
  grid-template-columns:repeat(3,1fr) !important;
  gap:10px !important;
}
/* .go-critcard reemplaza .crit-tile */
.panel-ot-v2 .go-critcard {
  padding:12px 16px !important;
  border:1px solid rgba(111,168,138,.44) !important;
  border-radius:0 !important;
  cursor:pointer;
  transition:none !important;
}
/* [neutralizado — sobreescrito por bloque Trama al final]
.panel-ot-v2 .go-critcard:hover { transform:none !important; box-shadow:none !important; border-color:var(--green) !important; background:var(--hush) !important; }
.panel-ot-v2 .go-critcard.active { background:var(--ink) !important; border-color:var(--ink) !important; }
.panel-ot-v2 .go-critcard.active .go-cc-top,
.panel-ot-v2 .go-critcard.active .go-cc-n,
.panel-ot-v2 .go-critcard.active .go-cc-sub { color:var(--paper) !important; }
*/
/* .go-cc-dot reemplaza .crit-dot */
.panel-ot-v2 .go-cc-dot { width:10px; height:10px; flex-shrink:0; }
/* .go-cc-top reemplaza .crit-label container */
.panel-ot-v2 .go-cc-top {
  font:500 10px/1 var(--mono) !important;
  color:var(--ink) !important;
  letter-spacing:.12em;
  text-transform:uppercase;
  margin-bottom:4px;
}
/* .go-cc-n reemplaza .crit-num */
.panel-ot-v2 .go-cc-n {
  font:600 20px/1.1 var(--sans) !important;
  letter-spacing:-.02em;
}
.panel-ot-v2 .go-crit-alta .go-cc-n { color:var(--rust) !important; }
.panel-ot-v2 .go-crit-media .go-cc-n { color:var(--amber) !important; }
.panel-ot-v2 .go-crit-baja .go-cc-n { color:var(--green) !important; }
/* .go-cc-sub reemplaza .crit-sub */
.panel-ot-v2 .go-cc-sub {
  font:400 10px/1 var(--sans) !important;
  color:var(--ink) !important;
  opacity:.5;
}
/* .go-body reemplaza .app-body */
.panel-ot-v2 .go-body {
  flex:1;
  display:flex !important;
  min-height:0;
  overflow:hidden;
}
/* .go-tabla-panel reemplaza .left-col */
.panel-ot-v2 .go-tabla-panel {
  border-right:1px solid var(--line) !important;
  display:flex !important;
  flex-direction:column !important;
  overflow:hidden !important;
}
/* Trama overrides para chat inline */
.panel-ot-v2 .go-chat-inline {
  background:var(--hush) !important;
  border-top:1px solid var(--line) !important;
}
.panel-ot-v2 .go-input-box {
  border:1px solid var(--line) !important;
  border-radius:20px !important;
  background:var(--paper) !important;
  margin:8px 14px !important;
}
.panel-ot-v2 .go-icon-btn {
  border-radius:50% !important;
}
.panel-ot-v2 .go-icon-btn:hover {
  background:var(--hush) !important;
  color:var(--green) !important;
}
.panel-ot-v2 .go-btn-send {
  background:var(--green) !important;
  border-radius:50% !important;
}
.panel-ot-v2 .go-btn-send:hover { background:var(--ink) !important; }
.panel-ot-v2 .go-msg-textarea { font-family:var(--sans) !important; }
.panel-ot-v2 .go-archivos-bar {
  border-bottom:1px solid var(--line) !important;
  background:var(--paper) !important;
}
.panel-ot-v2 .go-archivos-toggle {
  color:var(--green) !important;
  font:500 10px/1 var(--mono) !important;
  letter-spacing:.12em;
  text-transform:uppercase;
}
.panel-ot-v2 .go-chat-row td { background:var(--hush) !important; }
/* tabla reemplaza .table-head / .table-row */
.panel-ot-v2 .go-tabla thead tr { background:var(--hush) !important; border-bottom:1px solid var(--line) !important; }
.panel-ot-v2 .go-tabla thead th {
  font:500 9px/1 var(--mono) !important;
  color:var(--green) !important;
  letter-spacing:.16em;
  text-transform:uppercase;
  padding:9px 16px;
  background:none;
  border:none;
}
.panel-ot-v2 .go-tabla tbody tr {
  border-bottom:1px solid rgba(111,168,138,.15) !important;
  cursor:pointer;
}
.panel-ot-v2 .go-tabla tbody tr:hover { background:rgba(196,216,124,.08) !important; }
.panel-ot-v2 .go-tabla tbody tr.seleccionada {
  background:#C4D87C !important;
  border-left:3px solid var(--lime) !important;
}
.panel-ot-v2 .go-tabla tbody td {
  padding:11px 16px;
  color:var(--ink);
  font-size:13px;
  border:none;
}
.panel-ot-v2 .go-tabla tbody td:first-child {
  font:400 10.5px/1 var(--mono) !important;
  color:var(--green) !important;
  letter-spacing:.04em;
}
.panel-ot-v2 .go-tabla tbody td:nth-child(2) strong {
  font:500 11px/1 var(--mono) !important;
  color:var(--ink) !important;
  letter-spacing:.04em;
}
/* .go-estado reemplaza .pill-ot */
.panel-ot-v2 .go-estado {
  display:inline-block !important;
  font:500 10px/1 var(--mono) !important;
  letter-spacing:.1em;
  text-transform:uppercase;
  padding:4px 9px !important;
  border-radius:0 !important;
  background:var(--hush);
  color:var(--ink) !important;
}
/* chat panel */
.panel-ot-v2 .go-chat-header {
  padding:7px 16px;
  background:var(--paper) !important;
  border-bottom:1px solid rgba(111,168,138,.15);
  font:500 10px/1 var(--mono);
  color:var(--green);
  letter-spacing:.12em;
  text-transform:uppercase;
}
.panel-ot-v2 .go-chat-hilo {
  flex:1;
  background:var(--hush) !important;
  min-height:0;
  overflow-y:auto;
}
/* .go-detalle-panel reemplaza .right-col */
.panel-ot-v2 .go-detalle-panel {
  display:flex;
  flex-direction:column;
  overflow-y:auto;
  background:var(--paper) !important;
}
/* OT detail content */
.panel-ot-v2 .go-detalle-header {
  padding:16px 18px 12px;
  border-bottom:1px solid var(--line);
  display:flex;
  justify-content:space-between;
  align-items:flex-start;
}
/* .go-detalle-codigo reemplaza .ot-code */
.panel-ot-v2 .go-detalle-codigo {
  font:600 17px/1 var(--sans) !important;
  color:var(--ink) !important;
  letter-spacing:-.02em;
}
/* .go-detalle-activo reemplaza .ot-sub */
.panel-ot-v2 .go-detalle-activo {
  font:400 11.5px/1.3 var(--sans) !important;
  color:var(--ink) !important;
  opacity:.6;
  margin-top:2px;
}
/* .go-info-label reemplaza .section-eyebrow */
.panel-ot-v2 .go-info-label,
.panel-ot-v2 .go-historial-title {
  font:500 9.5px/1 var(--mono) !important;
  color:var(--green) !important;
  letter-spacing:.18em;
  text-transform:uppercase;
  padding:12px 20px 6px !important;
  margin:0 !important;
}
/* .go-info-box reemplaza .kv-grid */
.panel-ot-v2 .go-info-box {
  padding:8px 20px 12px !important;
  font:400 12px/1.5 var(--sans);
  color:var(--ink);
  border-bottom:1px solid rgba(111,168,138,.15);
  background:none !important;
  border-radius:0 !important;
}
.panel-ot-v2 .go-info-box b {
  font:600 11.5px/1.3 var(--sans);
  color:var(--ink);
}
/* .go-acciones reemplaza .estado-btns */
.panel-ot-v2 .go-acciones {
  display:flex !important;
  flex-wrap:wrap;
  gap:6px;
  padding:12px 20px;
}
.panel-ot-v2 .go-acciones .btn-generar-orden,
.panel-ot-v2 .go-acciones .btn-cancelar-orden {
  padding:7px 14px !important;
  font:500 10px/1 var(--mono) !important;
  letter-spacing:.12em;
  text-transform:uppercase;
  cursor:pointer;
  border:none;
  border-radius:0 !important;
  margin-top:0 !important;
}
/* historial: .go-hist-item reemplaza .hist-item */
.panel-ot-v2 .go-hist-item {
  padding:10px 20px !important;
  margin-bottom:0 !important;
  border-left:3px solid var(--mesh);
  background:var(--hush) !important;
  border-bottom:1px solid rgba(111,168,138,.15) !important;
  border-radius:0 !important;
}
/* .go-hist-fecha reemplaza .hist-ts */
.panel-ot-v2 .go-hist-fecha {
  font:500 9.5px/1 var(--mono) !important;
  color:var(--green) !important;
  letter-spacing:.1em;
}
/* .go-hist-usuario reemplaza .hist-who */
.panel-ot-v2 .go-hist-usuario {
  font:600 12.5px/1.2 var(--sans) !important;
  color:var(--ink) !important;
  margin-top:2px;
}
/* .go-hist-mensaje reemplaza .hist-note */
.panel-ot-v2 .go-hist-mensaje {
  font:400 11.5px/1.45 var(--sans) !important;
  color:var(--ink) !important;
  opacity:.7;
  margin-top:2px;
}
/* archivos: .go-archivo-item reemplaza .file-row */
.panel-ot-v2 .go-archivo-item {
  padding:10px 20px !important;
  border-bottom:1px solid rgba(111,168,138,.15) !important;
  display:flex !important;
  align-items:center;
  gap:10px;
  background:none !important;
  border-radius:0 !important;
}
/* .go-archivo-nombre reemplaza .file-name */
.panel-ot-v2 .go-archivo-nombre {
  font:500 11.5px/1.3 var(--sans) !important;
  color:var(--ink) !important;
  word-break:break-all;
  flex:1;
}
/* .go-archivo-meta reemplaza .file-type */
.panel-ot-v2 .go-archivo-meta {
  font:400 10px/1 var(--mono) !important;
  color:var(--green) !important;
  opacity:.7;
  letter-spacing:.04em;
}
/* acción buttons en archivos reemplazan .file-action */
.panel-ot-v2 .otd-btn-ver,
.panel-ot-v2 .otd-btn-dl,
.panel-ot-v2 .otd-btn-del {
  width:26px;
  height:26px;
  border:1px solid rgba(111,168,138,.35) !important;
  border-radius:0 !important;
  display:flex;
  align-items:center;
  justify-content:center;
  cursor:pointer;
}

/* ===== nueva-ot-mult-v2 (Trama) · scopeado bajo .nueva-ot-mult-v2 ===== */
.nueva-ot-mult-v2 {
  --paper:#F4F5F0;
  --hush:#E9EBE2;
  --green:#2C5A48;
  --ink:#0F1F18;
  --mesh:#6FA88A;
  --lime:#C4D87C;
  --amber:#D9A441;
  --rust:#C25D3E;
  --line:rgba(111,168,138,0.40);
  --sans:"Geist",system-ui,sans-serif;
  --mono:"Geist Mono",ui-monospace,monospace;
}
.nueva-ot-mult-v2 *, .nueva-ot-mult-v2 *::before, .nueva-ot-mult-v2 *::after {
  box-sizing:border-box;
}
.nueva-ot-mult-v2 ::selection { background:var(--lime); color:var(--ink); }
/* overlay IS .nueva-ot-mult-v2 — inline background needs !important */
.nueva-ot-mult-v2 {
  font-family:var(--sans);
  -webkit-font-smoothing:antialiased;
  color:var(--ink);
  background:rgba(15,31,24,.55) !important;
  backdrop-filter:blur(6px);
}
/* .otn-modal reemplaza .modal */
.nueva-ot-mult-v2 .otn-modal {
  width:720px;
  max-width:100%;
  background:var(--paper);
  box-shadow:0 40px 80px -20px rgba(0,0,0,.5);
  display:flex;
  flex-direction:column;
  border-radius:0 !important;
  max-height:90vh;
  overflow:hidden;
}
/* .otn-header reemplaza .modal-header */
.nueva-ot-mult-v2 .otn-header {
  padding:18px 24px 16px;
  border-bottom:1px solid var(--line);
  background:#2C5A48;
  display:flex;
  justify-content:space-between;
  align-items:flex-start;
  flex-shrink:0;
}
/* .otn-titulo reemplaza .hdr-title */
.nueva-ot-mult-v2 .otn-titulo {
  font:600 22px/1.1 var(--sans) !important;
  color:var(--paper) !important;
  letter-spacing:-.025em;
  margin:0;
}
/* .otn-subtitulo reemplaza .hdr-sub */
.nueva-ot-mult-v2 .otn-subtitulo {
  font:400 12.5px/1 var(--sans) !important;
  color:var(--paper) !important;
  opacity:.65;
  margin:3px 0 0;
}
/* .otn-close reemplaza .close-btn */
.nueva-ot-mult-v2 .otn-close {
  width:28px;
  height:28px;
  border:1px solid rgba(244,245,240,0.4) !important;
  border-radius:0 !important;
  font-size:18px;
  color:var(--paper);
  background:transparent !important;
  cursor:pointer;
  display:flex;
  align-items:center;
  justify-content:center;
}
/* .otn-filtros reemplaza .filter-bar */
.nueva-ot-mult-v2 .otn-filtros {
  padding:12px 24px;
  border-bottom:1px solid rgba(111,168,138,.22);
  display:flex;
  gap:8px;
  align-items:center;
  flex-shrink:0;
}
/* .otn-sel reemplaza .filter-select y .filter-pill */
.nueva-ot-mult-v2 .otn-sel {
  padding:8px 10px;
  border:1px solid rgba(111,168,138,.55) !important;
  background:var(--paper) !important;
  font:400 12.5px/1 var(--sans) !important;
  color:var(--ink) !important;
  border-radius:0 !important;
  cursor:pointer;
}
/* .otn-buscar reemplaza .search-box */
.nueva-ot-mult-v2 .otn-buscar {
  flex:1;
  padding:8px 10px;
  border:1px solid rgba(111,168,138,.55) !important;
  background:var(--paper) !important;
  font:400 12.5px/1 var(--sans) !important;
  color:var(--ink) !important;
  border-radius:0 !important;
}
.nueva-ot-mult-v2 .otn-buscar::placeholder { opacity:.38; }
/* .otn-sel-all-row reemplaza .list-header */
.nueva-ot-mult-v2 .otn-sel-all-row {
  padding:10px 24px;
  border-bottom:1px solid rgba(111,168,138,.15);
  display:flex;
  align-items:center;
  justify-content:space-between;
  flex-shrink:0;
}
/* .otn-sel-all-label reemplaza .select-all */
.nueva-ot-mult-v2 .otn-sel-all-label {
  display:flex;
  align-items:center;
  gap:10px;
  font:400 12.5px/1 var(--sans);
  color:var(--ink);
  cursor:pointer;
}
/* .otn-sel-count reemplaza .sel-count */
.nueva-ot-mult-v2 .otn-sel-count {
  font:500 11px/1 var(--mono) !important;
  color:var(--green) !important;
  letter-spacing:.06em;
}
/* .otn-lista-wrap y .otn-lista */
.nueva-ot-mult-v2 .otn-lista-wrap {
  flex:1;
  overflow-y:auto;
  min-height:0;
}
.nueva-ot-mult-v2 .otn-lista { display:flex; flex-direction:column; }
/* items generados por renderListaOTN(): label.otn-item */
.nueva-ot-mult-v2 .otn-item {
  padding:13px 24px;
  border-bottom:1px solid rgba(111,168,138,.15);
  display:flex;
  align-items:flex-start;
  gap:12px;
  cursor:pointer;
}
.nueva-ot-mult-v2 .otn-item input[type=checkbox] {
  width:16px;
  height:16px;
  flex-shrink:0;
  accent-color:var(--green);
  cursor:pointer;
  margin:2px 0 0;
}
.nueva-ot-mult-v2 .otn-item-body {
  flex:1;
  min-width:0;
}
/* .otn-item-nombre reemplaza .activo-name */
.nueva-ot-mult-v2 .otn-item-nombre {
  font:500 13.5px/1.2 var(--sans) !important;
  color:var(--ink) !important;
  letter-spacing:-.01em;
}
/* .otn-item-meta reemplaza .activo-meta */
.nueva-ot-mult-v2 .otn-item-meta {
  font:400 11px/1 var(--mono) !important;
  color:var(--green) !important;
  opacity:.75;
  margin-top:2px;
  letter-spacing:.04em;
}
/* .otn-item-tipo reemplaza .task-tag */
.nueva-ot-mult-v2 .otn-item-tipo {
  display:inline-flex;
  padding:2px 8px;
  background:var(--hush) !important;
  border:1px solid rgba(111,168,138,.55) !important;
  font:400 10.5px/1 var(--sans) !important;
  color:var(--ink) !important;
  margin-top:6px;
  border-radius:0 !important;
}
/* .otn-item-est y sus variantes reemplazan .venc-badge */
.nueva-ot-mult-v2 .otn-item-est {
  padding:3px 8px;
  font:500 10px/1 var(--mono) !important;
  letter-spacing:.08em;
  white-space:nowrap;
  flex-shrink:0;
  border-radius:0 !important;
}
.nueva-ot-mult-v2 .otn-est-vencido {
  background:rgba(194,93,62,.1) !important;
  border:1px solid rgba(194,93,62,.35) !important;
  color:var(--rust) !important;
}
.nueva-ot-mult-v2 .otn-est-pv {
  background:rgba(217,164,65,.1) !important;
  border:1px solid rgba(217,164,65,.35) !important;
  color:var(--amber) !important;
}
.nueva-ot-mult-v2 .otn-est-ok {
  background:rgba(44,90,72,.08) !important;
  border:1px solid rgba(111,168,138,.45) !important;
  color:var(--green) !important;
}
/* .otn-resumen reemplaza .summary-bar */
.nueva-ot-mult-v2 .otn-resumen {
  padding:11px 24px;
  background:rgba(44,90,72,.06);
  border-bottom:1px solid rgba(44,90,72,.15);
  border-left:3px solid var(--green);
  flex-shrink:0;
}
/* .otn-config reemplaza .modal-form */
.nueva-ot-mult-v2 .otn-config {
  padding:20px 24px;
  display:flex;
  flex-direction:column;
  gap:16px;
  flex-shrink:0;
}
/* .otn-config-row reemplaza .form-row */
.nueva-ot-mult-v2 .otn-config-row {
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:16px;
}
/* .otn-campo reemplaza .field */
.nueva-ot-mult-v2 .otn-campo {
  display:flex;
  flex-direction:column;
  gap:6px;
}
/* .otn-label reemplaza .field-label */
.nueva-ot-mult-v2 .otn-label {
  font:500 9.5px/1 var(--mono) !important;
  color:var(--green) !important;
  letter-spacing:.16em;
  text-transform:uppercase;
}
/* .otn-input reemplaza .fake-select */
.nueva-ot-mult-v2 .otn-input {
  padding:10px 12px !important;
  border:1px solid rgba(111,168,138,.55) !important;
  background:var(--paper) !important;
  font:400 13px/1 var(--sans) !important;
  color:var(--ink) !important;
  border-radius:0 !important;
  width:100%;
}
/* .otn-textarea reemplaza .fake-textarea */
.nueva-ot-mult-v2 .otn-textarea {
  padding:11px 12px !important;
  border:1px solid rgba(111,168,138,.55) !important;
  min-height:80px;
  font:400 13px/1.6 var(--sans) !important;
  color:var(--ink) !important;
  border-radius:0 !important;
  width:100%;
  resize:vertical;
}
/* .otn-footer reemplaza .modal-footer */
.nueva-ot-mult-v2 .otn-footer {
  padding:16px 24px;
  border-top:1px solid var(--line);
  display:flex;
  gap:10px;
  flex-shrink:0;
  background:var(--paper);
}
/* .otn-btn-cancel reemplaza .btn-cancel */
.nueva-ot-mult-v2 .otn-btn-cancel {
  flex:1;
  padding:11px 16px;
  text-align:center;
  border:1px solid rgba(111,168,138,.55) !important;
  font:500 11px/1 var(--mono) !important;
  color:var(--ink) !important;
  letter-spacing:.14em;
  text-transform:uppercase;
  cursor:pointer;
  background:transparent !important;
  border-radius:0 !important;
}
/* .otn-btn-confirm reemplaza .btn-next */
.nueva-ot-mult-v2 .otn-btn-confirm {
  flex:2;
  padding:11px 16px;
  text-align:center;
  background:var(--green) !important;
  border:none !important;
  font:500 11px/1 var(--mono) !important;
  color:var(--paper) !important;
  letter-spacing:.14em;
  text-transform:uppercase;
  cursor:pointer;
  display:flex;
  align-items:center;
  justify-content:center;
  gap:8px;
  border-radius:0 !important;
}

/* ===== doc-resp-v2 (Trama) · scopeado bajo .doc-resp-v2 ===== */
.doc-resp-v2 {
  --paper:#F4F5F0;
  --hush:#E9EBE2;
  --green:#2C5A48;
  --ink:#0F1F18;
  --mesh:#6FA88A;
  --lime:#C4D87C;
  --rust:#C25D3E;
  --line:rgba(111,168,138,0.40);
  --sans:"Geist",system-ui,sans-serif;
  --mono:"Geist Mono",ui-monospace,monospace;
}
.doc-resp-v2 *, .doc-resp-v2 *::before, .doc-resp-v2 *::after {
  box-sizing:border-box;
}
.doc-resp-v2 ::selection { background:var(--lime); color:var(--ink); }
/* overlay IS .doc-resp-v2 — #otDocsOverlay ID rule needs !important */
.doc-resp-v2 {
  font-family:var(--sans);
  -webkit-font-smoothing:antialiased;
  color:var(--ink);
  background:rgba(15,31,24,.5) !important;
  backdrop-filter:blur(6px);
}
/* .otd-modal reemplaza .modal */
.doc-resp-v2 .otd-modal {
  width:560px !important;
  max-width:100%;
  background:var(--paper) !important;
  box-shadow:0 40px 80px -20px rgba(0,0,0,.45) !important;
  border-radius:0 !important;
  display:flex !important;
  flex-direction:column !important;
}
/* .otd-header reemplaza .modal-header */
.doc-resp-v2 .otd-header {
  padding:20px 24px 16px !important;
  border-bottom:1px solid var(--line) !important;
}
/* .otd-titulo reemplaza .hdr-title */
.doc-resp-v2 .otd-titulo {
  font:600 20px/1.2 var(--sans) !important;
  color:var(--ink) !important;
  letter-spacing:-.02em;
}
/* .otd-subtitulo reemplaza .hdr-sub */
.doc-resp-v2 .otd-subtitulo {
  font:400 12.5px/1 var(--sans) !important;
  color:var(--ink) !important;
  opacity:.5;
}
/* .otd-close reemplaza .close-btn */
.doc-resp-v2 .otd-close {
  width:28px !important;
  height:28px !important;
  border:1px solid var(--line) !important;
  border-radius:0 !important;
  background:transparent !important;
  color:var(--ink) !important;
  font-size:18px;
}
/* .otd-body reemplaza .modal-body */
.doc-resp-v2 .otd-body {
  padding:20px 24px !important;
  display:flex !important;
  flex-direction:column !important;
  gap:8px !important;
}
/* .otd-grupo-label reemplaza .section-eyebrow */
.doc-resp-v2 .otd-grupo-label {
  font:500 9.5px/1 var(--mono) !important;
  color:var(--green) !important;
  letter-spacing:.18em;
  text-transform:uppercase;
  padding:10px 0 6px !important;
  border-bottom:none !important;
}
/* .otd-doc-item reemplaza .file-row */
.doc-resp-v2 .otd-doc-item {
  display:flex !important;
  align-items:center !important;
  gap:12px !important;
  padding:11px 14px !important;
  border:1px solid rgba(111,168,138,.35) !important;
  background:rgba(44,90,72,.04) !important;
  border-radius:0 !important;
}
.doc-resp-v2 .otd-doc-item:hover { background:rgba(44,90,72,.08) !important; }
.doc-resp-v2 .otd-doc-item input[type=checkbox] {
  accent-color:var(--green);
  width:15px;
  height:15px;
}
/* icon in doc item */
.doc-resp-v2 .otd-doc-item > .ti {
  font-size:22px !important;
  color:var(--green) !important;
  flex-shrink:0;
}
/* .otd-doc-info */
.doc-resp-v2 .otd-doc-info { flex:1; min-width:0; }
/* .otd-doc-nombre reemplaza .file-name */
.doc-resp-v2 .otd-doc-nombre {
  font:500 13.5px/1.25 var(--sans) !important;
  color:var(--ink) !important;
  letter-spacing:-.01em;
}
/* .otd-doc-meta reemplaza .file-type */
.doc-resp-v2 .otd-doc-meta {
  font:400 11px/1 var(--mono) !important;
  color:var(--green) !important;
  opacity:.65;
  letter-spacing:.04em;
}
/* .otd-adhoc reemplaza adjuntar section */
.doc-resp-v2 .otd-adhoc {
  padding:12px 24px 14px !important;
  border-top:1px solid var(--line) !important;
}
.doc-resp-v2 .otd-adhoc-label {
  font:400 13px/1 var(--sans) !important;
  color:var(--ink) !important;
  opacity:.7;
  margin-bottom:8px;
}
/* .otd-btn-adjuntar reemplaza .attach-drop */
.doc-resp-v2 .otd-btn-adjuntar {
  padding:11px 14px !important;
  border:1.5px dashed rgba(111,168,138,.6) !important;
  border-radius:0 !important;
  background:transparent !important;
  color:var(--ink) !important;
  font:500 13px/1 var(--sans) !important;
}
.doc-resp-v2 .otd-btn-adjuntar:hover { background:var(--hush) !important; border-color:var(--green) !important; }
/* .otd-footer reemplaza .modal-footer */
.doc-resp-v2 .otd-footer {
  padding:16px 24px !important;
  border-top:1px solid var(--line) !important;
  background:var(--paper) !important;
}
/* .otd-btn-saltar reemplaza .btn-skip */
.doc-resp-v2 .otd-btn-saltar {
  padding:11px 16px !important;
  border:1px solid rgba(111,168,138,.55) !important;
  border-radius:0 !important;
  font:500 11px/1 var(--mono) !important;
  color:var(--ink) !important;
  letter-spacing:.12em;
  text-transform:uppercase;
  cursor:pointer;
  background:transparent !important;
}
.doc-resp-v2 .otd-btn-saltar:hover { background:var(--hush) !important; }
/* .otd-btn-confirmar reemplaza .btn-gen */
.doc-resp-v2 .otd-btn-confirmar {
  padding:11px 16px !important;
  background:var(--green) !important;
  border:none !important;
  border-radius:0 !important;
  font:500 11px/1 var(--mono) !important;
  color:var(--paper) !important;
  letter-spacing:.12em;
  text-transform:uppercase;
  cursor:pointer;
}
.doc-resp-v2 .otd-btn-confirmar:disabled { background:var(--mesh) !important; cursor:not-allowed; }
/* botones de items en archivos del gerente/responsable */
.doc-resp-v2 .otd-btn-ver,
.doc-resp-v2 .otd-btn-dl {
  border:1px solid var(--line) !important;
  border-radius:0 !important;
  background:var(--paper) !important;
  color:var(--ink) !important;
}
.doc-resp-v2 .otd-btn-ver:hover,
.doc-resp-v2 .otd-btn-dl:hover { background:var(--hush) !important; }

/* ===== detalle-proy-v2 (Trama) · scopeado bajo .detalle-proy-v2 ===== */
.detalle-proy-v2 {
  --paper:#F4F5F0;
  --hush:#E9EBE2;
  --clay:#D8C8B0;
  --green:#2C5A48;
  --ink:#0F1F18;
  --mesh:#6FA88A;
  --lime:#C4D87C;
  --amber:#D9A441;
  --rust:#C25D3E;
  --sky:#4A7A8C;
  --line:rgba(111,168,138,0.40);
  --sans:"Geist",system-ui,sans-serif;
  --mono:"Geist Mono",ui-monospace,monospace;
}
.detalle-proy-v2 *, .detalle-proy-v2 *::before, .detalle-proy-v2 *::after {
  box-sizing:border-box;
}
.detalle-proy-v2 ::selection { background:var(--lime); color:var(--ink); }
/* overlay: .overlay-details base + .detalle-proy-v2 scope */
.detalle-proy-v2 {
  font-family:var(--sans);
  -webkit-font-smoothing:antialiased;
  color:var(--ink);
  background:rgba(15,31,24,.5) !important;
  backdrop-filter:blur(6px) !important;
  align-items:flex-start !important;
  padding:32px 24px !important;
}
/* .modal-card reemplaza .modal */
.detalle-proy-v2 .modal-card {
  width:600px !important;
  max-width:100%;
  background:var(--paper) !important;
  box-shadow:0 40px 80px -20px rgba(0,0,0,.5) !important;
  border-radius:0 !important;
  display:flex !important;
  flex-direction:column !important;
  overflow-y:auto !important;
}
/* .modal-image reemplaza .hero */
.detalle-proy-v2 .modal-image {
  height:220px !important;
  background:var(--hush) !important;
  overflow:hidden !important;
  border-radius:0 !important;
}
.detalle-proy-v2 .modal-image img {
  width:100%;
  height:100%;
  object-fit:cover;
}
/* .close-x reemplaza .hero-close */
.detalle-proy-v2 .close-x {
  position:absolute !important;
  top:16px !important;
  right:16px !important;
  width:30px !important;
  height:30px !important;
  background:rgba(15,31,24,.55) !important;
  color:var(--paper) !important;
  display:flex !important;
  align-items:center !important;
  justify-content:center !important;
  cursor:pointer;
  font-size:20px;
  border-radius:0 !important;
  z-index:1;
}
/* .modal-body matches (same class) */
.detalle-proy-v2 .modal-body {
  padding:22px 24px !important;
  display:flex !important;
  flex-direction:column !important;
  gap:16px !important;
}
/* #modalProyectoTitulo reemplaza .project-title — inline style needs !important */
.detalle-proy-v2 .modal-body h2 {
  font:600 24px/1.1 var(--sans) !important;
  color:var(--ink) !important;
  letter-spacing:-.03em;
  margin:0 !important;
}
/* #modalProyectoDisciplinas reemplaza .tags — puede contener badges dinámicos */
.detalle-proy-v2 #modalProyectoDisciplinas {
  display:flex;
  gap:6px;
  flex-wrap:wrap;
}
.detalle-proy-v2 #modalProyectoDisciplinas span,
.detalle-proy-v2 #modalProyectoDisciplinas .tag {
  padding:4px 10px !important;
  border:1px solid rgba(111,168,138,.5) !important;
  background:var(--hush) !important;
  font:500 10px/1 var(--mono) !important;
  color:var(--green) !important;
  letter-spacing:.1em;
  text-transform:uppercase;
  border-radius:0 !important;
}
/* .tech-description reemplaza .desc-text */
.detalle-proy-v2 .tech-description {
  font:400 13px/1.65 var(--sans) !important;
  color:var(--ink) !important;
  opacity:.85;
}
/* .map-container matches (same class) */
.detalle-proy-v2 .map-container {
  position:relative !important;
  height:220px !important;
  border:1px solid rgba(111,168,138,.35) !important;
  overflow:hidden !important;
  background:var(--hush) !important;
  border-radius:0 !important;
}
.detalle-proy-v2 .map-container iframe {
  width:100%;
  height:100%;
  border:none;
}

/* ===== modal-detalle-proyecto-v2 (Trama) ===== */
.modal-detalle-proyecto-v2 {
  --mdp-paper: #F4F5F0;
  --mdp-ink:   #0F1F18;
  --mdp-green: #2C5A48;
  --mdp-mesh:  #6FA88A;
  --mdp-lime:  #C4D87C;
  --mdp-rust:  #C25D3E;
  --mdp-hush:  #E9EBE2;
  --mdp-mesh33: rgba(111,168,138,0.33);
  --mdp-mesh44: rgba(111,168,138,0.44);
  --mdp-mesh55: rgba(111,168,138,0.55);
  --mdp-sans: 'Geist', system-ui, sans-serif;
  --mdp-mono: 'Geist Mono', ui-monospace, monospace;
  background: rgba(15,31,24,0.55) !important;
  backdrop-filter: none !important;
  align-items: center !important;
  justify-content: center !important;
}
.modal-detalle-proyecto-v2 *, .modal-detalle-proyecto-v2 *::before, .modal-detalle-proyecto-v2 *::after {
  box-sizing: border-box;
}

/* Card */
.modal-detalle-proyecto-v2 .mdp-card {
  background: var(--mdp-paper);
  width: 560px;
  max-height: 90vh;
  overflow-y: auto;
  display: flex;
  flex-direction: column;
  border: 1px solid var(--mdp-mesh);
  border-radius: 0;
}

/* 2. Header */
.modal-detalle-proyecto-v2 .mdp-header {
  padding: 14px 20px;
  background: #E9EBE2;
  border-bottom: 1px solid var(--mdp-mesh55);
  display: flex;
  flex-direction: row;
  justify-content: space-between;
  align-items: center;
  flex-shrink: 0;
}
.modal-detalle-proyecto-v2 .mdp-breadcrumb {
  font-family: var(--mdp-mono);
  font-size: 9px;
  color: var(--mdp-green);
  letter-spacing: 0.16em;
  text-transform: uppercase;
}
.modal-detalle-proyecto-v2 .mdp-code {
  display: none;
}
.modal-detalle-proyecto-v2 .mdp-close {
  font-size: 16px;
  color: var(--mdp-green);
  cursor: pointer;
  line-height: 1;
}

/* 3. Imagen */
.modal-detalle-proyecto-v2 .modal-image {
  height: 200px !important;
  background: var(--mdp-hush) !important;
  border-bottom: 1px solid var(--mdp-mesh44);
  position: relative;
  flex-shrink: 0;
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 0;
}
.modal-detalle-proyecto-v2 .modal-image img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transform: none !important;
  transition: none !important;
}
.modal-detalle-proyecto-v2 .modal-image img:not([src]),
.modal-detalle-proyecto-v2 .modal-image img[src=""] {
  opacity: 0;
}
.modal-detalle-proyecto-v2 .mdp-cover-ph {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 8px;
  pointer-events: none;
}
.modal-detalle-proyecto-v2 .mdp-cover-ph i {
  font-size: 32px;
  color: var(--mdp-mesh);
}
.modal-detalle-proyecto-v2 .mdp-cover-ph span {
  font-family: var(--mdp-mono);
  font-size: 9px;
  color: var(--mdp-green);
  opacity: 0.5;
}

/* 4. Body */
.modal-detalle-proyecto-v2 .mdp-body {
  padding: 20px 24px;
  display: flex;
  flex-direction: column;
  gap: 20px;
}

/* 4a. Título + tags */
.modal-detalle-proyecto-v2 .mdp-title {
  font-family: var(--mdp-sans);
  font-weight: 600;
  font-size: 22px;
  color: var(--mdp-ink);
  letter-spacing: -0.025em;
}
.modal-detalle-proyecto-v2 .mdp-tags {
  display: flex;
  flex-direction: row;
  gap: 6px;
  flex-wrap: wrap;
  margin-top: 8px;
}
.modal-detalle-proyecto-v2 .mdp-tags span {
  padding: 3px 8px !important;
  border: 1px solid var(--mdp-mesh) !important;
  background: transparent !important;
  font-family: var(--mdp-mono) !important;
  font-size: 9px !important;
  color: var(--mdp-green) !important;
  letter-spacing: 0.12em !important;
  text-transform: uppercase !important;
  border-radius: 0 !important;
  display: inline-block;
  margin: 0 !important;
}

/* 4b. Metadatos */
.modal-detalle-proyecto-v2 .mdp-meta-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
  background: transparent;
}
.modal-detalle-proyecto-v2 .mdp-meta-cell {
  background: #E9EBE2;
  border: 1px solid var(--mdp-mesh);
  padding: 12px 14px;
}
.modal-detalle-proyecto-v2 .mdp-meta-label {
  font-family: var(--mdp-mono);
  font-size: 9px;
  color: var(--mdp-green);
  letter-spacing: 0.16em;
  text-transform: uppercase;
}
.modal-detalle-proyecto-v2 .mdp-meta-val {
  font-family: var(--mdp-sans);
  font-weight: 500;
  font-size: 14px;
  color: var(--mdp-ink);
  letter-spacing: -0.01em;
  margin-top: 3px;
}

/* 4c. Descripción */
.modal-detalle-proyecto-v2 .mdp-section-label {
  font-family: var(--mdp-mono);
  font-size: 9px;
  color: var(--mdp-green);
  letter-spacing: 0.16em;
  text-transform: uppercase;
  margin-bottom: 8px;
  display: flex;
  align-items: center;
  gap: 5px;
}
.modal-detalle-proyecto-v2 .mdp-section-label i {
  font-size: 12px;
  color: var(--mdp-green);
}
.modal-detalle-proyecto-v2 .mdp-desc {
  font-family: var(--mdp-sans);
  font-weight: 400;
  font-size: 13px;
  line-height: 1.6;
  color: var(--mdp-ink);
  opacity: 0.8;
}

/* 4d. Stats */
.modal-detalle-proyecto-v2 .mdp-stats {
  display: flex;
  flex-direction: row;
  gap: 8px;
  background: transparent;
}
.modal-detalle-proyecto-v2 .mdp-stat-cell {
  background: #E9EBE2;
  border: 1px solid var(--mdp-mesh);
  flex: 1;
  padding: 14px 8px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 4px;
}
.modal-detalle-proyecto-v2 .mdp-stat-cell > i {
  font-size: 18px;
  color: var(--mdp-green);
}
.modal-detalle-proyecto-v2 .mdp-stat-cell > i.mdp-icon-rust {
  color: var(--mdp-rust);
}
.modal-detalle-proyecto-v2 .mdp-stat-num {
  font-family: var(--mdp-sans);
  font-weight: 600;
  font-size: 18px;
  color: var(--mdp-ink);
  letter-spacing: -0.02em;
}
.modal-detalle-proyecto-v2 .mdp-stat-num.mdp-criticidad {
  color: var(--mdp-rust);
}
.modal-detalle-proyecto-v2 .mdp-stat-label {
  font-family: var(--mdp-mono);
  font-size: 9px;
  color: var(--mdp-green);
  opacity: 0.7;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}

/* 4e. Mapa */
.modal-detalle-proyecto-v2 .mdp-map-wrap {
  height: 160px;
  background: var(--mdp-hush);
  border: 1px solid var(--mdp-mesh44);
  position: relative;
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
}
.modal-detalle-proyecto-v2 .mdp-map-wrap iframe {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  border: none;
}
.modal-detalle-proyecto-v2 .mdp-map-ph {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  pointer-events: none;
}
.modal-detalle-proyecto-v2 .mdp-map-ph i {
  font-size: 24px;
  color: var(--mdp-mesh);
}
.modal-detalle-proyecto-v2 .mdp-map-addr {
  font-family: var(--mdp-sans);
  font-size: 13px;
  color: var(--mdp-ink);
  opacity: 0.7;
  margin-top: 8px;
}

/* 5. Footer */
.modal-detalle-proyecto-v2 .mdp-footer {
  padding: 14px 20px;
  border-top: 1px solid var(--mdp-mesh44);
  background: var(--mdp-hush);
  display: flex;
  flex-direction: row;
  gap: 8px;
  justify-content: flex-end;
  flex-shrink: 0;
}
.modal-detalle-proyecto-v2 .mdp-btn-sec {
  border: 1px solid var(--mdp-mesh);
  background: transparent;
  color: var(--mdp-ink);
  padding: 8px 16px;
  font-family: var(--mdp-mono);
  font-size: 10px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  cursor: pointer;
  border-radius: 0;
}
.modal-detalle-proyecto-v2 .mdp-btn-pri {
  background: var(--mdp-green);
  color: var(--mdp-paper);
  padding: 8px 16px;
  font-family: var(--mdp-mono);
  font-size: 10px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  cursor: pointer;
  border: none;
  border-radius: 0;
  display: flex;
  align-items: center;
  gap: 6px;
}
.modal-detalle-proyecto-v2 .mdp-btn-pri > i {
  font-size: 13px;
  color: var(--mdp-lime);
}

/* ===== notif-v2 (Trama) · scopeado bajo .notif-v2 ===== */
.notif-v2 {
  --paper:#F4F5F0;
  --hush:#E9EBE2;
  --green:#2C5A48;
  --ink:#0F1F18;
  --mesh:#6FA88A;
  --lime:#C4D87C;
  --amber:#D9A441;
  --rust:#C25D3E;
  --sky:#4A7A8C;
  --sans:"Geist",system-ui,sans-serif;
  --mono:"Geist Mono",ui-monospace,monospace;
}
.notif-v2 *, .notif-v2 *::before, .notif-v2 *::after {
  box-sizing:border-box;
}
.notif-v2 ::selection { background:var(--lime); color:var(--ink); }
.notif-v2 {
  font-family:var(--sans);
  -webkit-font-smoothing:antialiased;
  color:var(--ink);
  position:relative;
}
/* .campana-btn reemplaza .bell-btn */
.notif-v2 .campana-btn {
  position:relative !important;
  width:43px !important;
  height:43px !important;
  background:transparent !important;
  color:#2C5A48 !important;
  font-size:35px !important;
  border:none !important;
  border-radius:0 !important;
  display:flex !important;
  align-items:center !important;
  justify-content:center !important;
  cursor:pointer;
  padding:0 !important;
}
/* .campana-badge reemplaza .bell-badge */
.notif-v2 .campana-badge {
  position:absolute !important;
  top:-4px !important;
  right:-6px !important;
  background:none !important;
  color:#C25D3E !important;
  font:900 14px/1 var(--sans) !important;
  border-radius:0 !important;
  align-items:center !important;
  justify-content:center !important;
  min-width:auto !important;
  height:auto !important;
  padding:0 !important;
}
/* .campana-panel reemplaza .notif-panel */
.notif-v2 .campana-panel {
  position:absolute;
  right:0;
  top:calc(100% + 6px);
  width:380px !important;
  background:var(--paper) !important;
  box-shadow:0 1px 0 rgba(0,0,0,.04),0 24px 50px -20px rgba(15,31,24,.22) !important;
  border:1px solid rgba(111,168,138,.22) !important;
  border-radius:0 !important;
  z-index:9999;
  display:flex;
  flex-direction:column;
}
/* .campana-panel-header reemplaza .panel-header */
.notif-v2 .campana-panel-header {
  padding:16px 18px 14px !important;
  display:flex !important;
  justify-content:space-between !important;
  align-items:center !important;
  gap:12px;
  border-bottom:1px solid rgba(111,168,138,.22);
}
.notif-v2 .campana-panel-header > span {
  font:600 15px/1 var(--sans) !important;
  color:var(--ink) !important;
  letter-spacing:-.02em;
}
/* .campana-leer-todas reemplaza .mark-read */
.notif-v2 .campana-leer-todas {
  font:500 9.5px/1 var(--mono) !important;
  color:var(--green) !important;
  letter-spacing:.16em;
  text-transform:uppercase;
  background:transparent !important;
  border:none !important;
  border-bottom:1px solid rgba(44,90,72,.4) !important;
  border-radius:0 !important;
  padding:0 0 1px !important;
  cursor:pointer;
  width:auto !important;
  margin:0 !important;
}
/* .campana-lista reemplaza .notif-list */
.notif-v2 .campana-lista {
  display:flex !important;
  flex-direction:column !important;
  max-height:460px !important;
  overflow-y:auto !important;
}
/* .campana-item (generado dinámicamente) reemplaza .notif-row */
.notif-v2 .campana-item {
  display:grid !important;
  grid-template-columns:44px 1fr !important;
  gap:12px !important;
  padding:12px 18px !important;
  align-items:flex-start;
  border-top:1px solid rgba(111,168,138,.2) !important;
  cursor:pointer;
  background:rgba(233,235,226,.6) !important;
  border-radius:0 !important;
}
.notif-v2 .campana-item.no-leida {
  background:var(--paper) !important;
  border-left:2px solid var(--lime) !important;
}
.notif-v2 .campana-item:hover { background:var(--hush) !important; }
/* .campana-item-icono reemplaza .notif-icon */
.notif-v2 .campana-item-icono {
  width:40px !important;
  height:40px !important;
  display:flex !important;
  align-items:center !important;
  justify-content:center !important;
  flex-shrink:0;
  font-size:20px;
}
/* .campana-item-cuerpo reemplaza .notif-body */
.notif-v2 .campana-item-cuerpo { min-width:0; }
/* .campana-item-titulo reemplaza .notif-title */
.notif-v2 .campana-item-titulo {
  font:600 13px/1.25 var(--sans) !important;
  color:var(--ink) !important;
  letter-spacing:-.005em;
}
/* .campana-item-msg reemplaza .notif-body-text */
.notif-v2 .campana-item-msg {
  margin-top:4px;
  font:400 12px/1.4 var(--sans) !important;
  color:var(--ink) !important;
  opacity:.6;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
/* .campana-item-tiempo reemplaza .notif-time */
.notif-v2 .campana-item-tiempo {
  margin-top:6px;
  font:500 9px/1 var(--mono) !important;
  color:var(--ink) !important;
  opacity:.45;
  letter-spacing:.16em;
  text-transform:uppercase;
}
/* .campana-footer reemplaza .panel-cta */
.notif-v2 .campana-footer {
  padding:12px 18px 14px !important;
  border-top:1px solid rgba(111,168,138,.22) !important;
  background:var(--paper) !important;
}
/* .campana-ver-mas reemplaza .cta-btn */
.notif-v2 .campana-ver-mas {
  background:var(--green) !important;
  color:var(--paper) !important;
  padding:12px 16px !important;
  display:flex !important;
  justify-content:center !important;
  align-items:center !important;
  font:500 10px/1 var(--mono) !important;
  letter-spacing:.18em;
  text-transform:uppercase;
  cursor:pointer;
  border:none !important;
  border-radius:0 !important;
  width:100% !important;
  margin:0 !important;
}

/* ===== MODALES v2 (Trama) — fin ===== */

/* ===== MODAL ACTIVO v2 (Trama) · scopeado bajo .modal-activo-v2 ===== */
.modal-activo-v2 { display: none; position: fixed; top: 60px; left: 0; right: 0; bottom: 0; height: auto; z-index: 10102;
  background: rgba(15,31,24,0.55); backdrop-filter: blur(6px);
  justify-content: center; align-items: flex-start; padding: 20px;
  transition: background .4s ease, backdrop-filter .4s ease; }
.modal-activo-v2 .modal-card {
  background: var(--paper, #F4F5F0); width: 100%; max-width: 560px; max-height: calc(100vh - 80px);
  border: 1px solid rgba(111,168,138,0.35); border-radius: 2px; position: relative;
  overflow-y: auto; box-shadow: 0 24px 60px rgba(15,31,24,0.35);
  font-family: 'Geist', system-ui, sans-serif; }
.modal-activo-v2 .ma-close {
  position: absolute; top: 14px; right: 14px; width: 30px; height: 30px;
  display: flex; align-items: center; justify-content: center; background: transparent;
  border: 1px solid rgba(244,245,240,0.4); border-radius: 2px; color: var(--paper, #F4F5F0);
  cursor: pointer; z-index: 2; transition: background .12s; }
.modal-activo-v2 .ma-close:hover { background: rgba(244,245,240,0.15); }

.modal-activo-v2 .ma-header { padding: 22px 48px 18px 24px; border-bottom: none; background: var(--green, #2C5A48); }
.modal-activo-v2 .ma-eyebrow { font: 500 10px/1.4 'Geist Mono', monospace; letter-spacing: .14em;
  text-transform: uppercase; color: rgba(196,216,124,0.8); margin-bottom: 6px; }
.modal-activo-v2 .ma-title { font: 600 22px/1.15 'Geist', sans-serif; color: var(--paper, #F4F5F0); margin: 0 0 10px; }
.modal-activo-v2 .ma-status { display: inline-block; padding: 3px 10px; border-radius: 2px;
  font: 500 10px/1.4 'Geist Mono', monospace; letter-spacing: .08em; text-transform: uppercase;
  background: var(--amber, #D9A441); color: var(--ink, #0F1F18); }

.modal-activo-v2 .ma-img { margin: 0; height: 200px;
  background: var(--hush, #E9EBE2);
  background-image: repeating-linear-gradient(45deg, rgba(111,168,138,0.09) 0 10px, transparent 10px 20px);
  border-top: 3px solid var(--green, #2C5A48);
  border-bottom: 1px solid rgba(111,168,138,0.3);
  overflow: hidden; position: relative;
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; }
.modal-activo-v2 .ma-img img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: none; }
.ma-img-icon { font-size: 44px; color: rgba(44,90,72,0.4); pointer-events: none; line-height: 1; }
.ma-img-label { font: 400 10px/1 'Geist Mono', monospace; letter-spacing: .1em; text-transform: uppercase;
  color: rgba(44,90,72,0.4); pointer-events: none; }
#activoImagenPh { display: flex; flex-direction: column; align-items: center; gap: 8px; }

.modal-activo-v2 .ma-section { padding: 18px 24px; border-bottom: 1px solid rgba(111,168,138,0.18); }
.modal-activo-v2 .ma-section-title { font: 500 10px/1.4 'Geist Mono', monospace; letter-spacing: .14em;
  text-transform: uppercase; color: var(--green, #2C5A48); margin-bottom: 14px; }
.modal-activo-v2 .af-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.modal-activo-v2 .af-field { display: flex; flex-direction: column; gap: 4px; }
.modal-activo-v2 .af-field.full { grid-column: 1 / -1; }
.modal-activo-v2 .af-label { font: 400 9px/1.4 'Geist Mono', monospace; letter-spacing: .1em;
  text-transform: uppercase; color: var(--mesh, #6FA88A); }
.modal-activo-v2 .activo-field-value, .modal-activo-v2 .activo-field-calc {
  border: none; background: transparent; padding: 2px 0; font: 500 14px/1.3 'Geist', sans-serif;
  color: var(--ink, #0F1F18); width: 100%; outline: none; }
.modal-activo-v2 .activo-field-calc { color: var(--rust, #C25D3E); font-weight: 600; }
/* estado de edición: inputs activos */
.modal-activo-v2 .activo-field-input {
  border: 1px solid rgba(111,168,138,0.5); background: #fff; border-radius: 2px; padding: 7px 9px;
  font: 400 14px/1.3 'Geist', sans-serif; color: var(--ink, #0F1F18); width: 100%; outline: none; }
.modal-activo-v2 .activo-field-input:focus { border-color: var(--green, #2C5A48); }

.modal-activo-v2 .btn-ma-visor, .modal-activo-v2 .btn-ma-primary, .modal-activo-v2 .btn-ma-cancel {
  font: 500 12px/1 'Geist', sans-serif; padding: 10px 16px; border-radius: 2px; cursor: pointer;
  border: 1px solid var(--green, #2C5A48); transition: background .12s, color .12s; }
.modal-activo-v2 .btn-ma-visor { margin-top: 14px; background: transparent; color: var(--green, #2C5A48); width: 100%; }
.modal-activo-v2 .btn-ma-visor:hover { background: var(--green, #2C5A48); color: var(--paper, #F4F5F0); }
.modal-activo-v2 .ma-btn-row { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 14px; }
.modal-activo-v2 .btn-ma-primary { background: var(--green, #2C5A48); color: var(--paper, #F4F5F0); flex: 1; min-width: 140px; }
.modal-activo-v2 .btn-ma-primary:hover { background: var(--ink, #0F1F18); }
.modal-activo-v2 .btn-ma-cancel { background: transparent; color: var(--rust, #C25D3E); border-color: var(--rust, #C25D3E); }
.modal-activo-v2 .btn-ma-cancel:hover { background: var(--rust, #C25D3E); color: var(--paper, #F4F5F0); }

.modal-activo-v2 .ma-hist { background: var(--hush, #E9EBE2); border: 1px solid rgba(111,168,138,0.3);
  border-radius: 2px; padding: 14px; }
.modal-activo-v2 .ma-hist-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.modal-activo-v2 .ma-hist-item.full { grid-column: 1 / -1; }
.modal-activo-v2 .ma-hist-label { font: 400 9px/1.4 'Geist Mono', monospace; letter-spacing: .1em;
  text-transform: uppercase; color: var(--mesh, #6FA88A); margin-bottom: 3px; }
.modal-activo-v2 .ma-hist-value { font: 500 13px/1.3 'Geist', sans-serif; color: var(--ink, #0F1F18); }
.modal-activo-v2 .ma-details { margin-top: 12px; }
.modal-activo-v2 .ma-summary { font: 500 11px/1.4 'Geist Mono', monospace; color: var(--green, #2C5A48);
  cursor: pointer; letter-spacing: .06em; }
.modal-activo-v2 .ma-hist-table { width: 100%; border-collapse: collapse; margin-top: 10px; font-size: 12px; }
.modal-activo-v2 .ma-hist-table th { text-align: left; font: 500 9px/1.4 'Geist Mono', monospace;
  letter-spacing: .08em; text-transform: uppercase; color: var(--mesh, #6FA88A);
  padding: 6px 8px; border-bottom: 1px solid rgba(111,168,138,0.3); }
.modal-activo-v2 .ma-hist-table td { padding: 6px 8px; border-bottom: 1px solid rgba(111,168,138,0.15);
  color: var(--ink, #0F1F18); }

.modal-activo-v2 .ma-footer { padding: 18px 24px 24px; display: flex; gap: 8px; flex-wrap: wrap; }
/* modo-visor: el modal se ancla al margen izquierdo, superponiéndose exacto
   con la columna de funcionalidades (sidebar 520px, header 60px), dejando ver
   el visor a la derecha — misma mecánica que Indicadores y Calendario. */
.modal-activo-v2.modo-visor {
  background: rgba(15,31,24,0) !important; backdrop-filter: blur(0) !important;
  pointer-events: none !important; padding: 0 !important;
  right: auto !important; width: 520px !important;
  flex-direction: column !important;
  align-items: stretch !important; justify-content: flex-start !important;
}
.modal-activo-v2.modo-visor .modal-card {
  width: 100%; max-width: 100%; max-height: none; flex: 1 1 0%; min-height: 0;
  overflow-y: auto; transform: none; pointer-events: all;
  border-radius: 0; box-shadow: 4px 0 24px rgba(15,31,24,0.18);
}
.modal-activo-v2.modo-visor .modal-card .ma-img { display: flex !important; }
/* Topbar "Volver al calendario" fuera del modal-card (modo visor desde calendario) */
.activo-topbar-cal { display:flex; justify-content:center; align-items:center; background:var(--green,#2C5A48); padding:12px 20px; position:relative; flex-shrink:0; pointer-events:all; }
.activo-topbar-cal .ficha-close-btn { color:var(--paper,#fff); }
.activo-topbar-cal .ficha-close-btn:hover { color:rgba(255,255,255,0.8); }
.activo-topbar-cal .cal-ficha-close-x { position:absolute; right:16px; color:var(--paper,#fff); font-size:24px; cursor:pointer; line-height:1; }
.activo-topbar-cal .cal-ficha-close-x:hover { color:rgba(255,255,255,0.8); }
/* oculta el botón × del modal-card cuando se abre desde el calendario */
.modal-activo-v2.desde-calendario .ma-close { display:none !important; }

/* ===== PANEL OT v2 (Trama) ===== */

/* overlay y modal base */
.panel-ot-v2 { position: fixed; inset: 0; z-index: 9000; background: rgba(15,31,24,0.55); display: none; align-items: center; justify-content: center; }
.panel-ot-v2 .go-modal { background: var(--paper); border: none; border-radius: 2px; box-shadow: 0 24px 60px rgba(15,31,24,0.35); height: 90vh; max-height: 90vh; display: flex; flex-direction: column; width: 95vw; max-width: 1300px; overflow: hidden; }

/* header */
.panel-ot-v2 .go-header { background: var(--green); padding: 18px 24px; display: flex; align-items: center; justify-content: space-between; flex-shrink: 0; border-radius: 0; }
.panel-ot-v2 .go-header h2 { font: 600 20px/1.2 'Geist', sans-serif; color: var(--paper); margin: 0; }
.panel-ot-v2 .go-header p  { font: 400 11px/1.4 'Geist Mono', monospace; color: rgba(244,245,240,0.7); margin: 4px 0 0; letter-spacing: .06em; }
.panel-ot-v2 .go-close-x { font-size: 28px; color: var(--paper); cursor: pointer; line-height: 1; background: transparent; border: 1px solid rgba(244,245,240,0.4); border-radius: 2px; padding: 0 6px; transition: background .12s; }
.panel-ot-v2 .go-close-x:hover { background: rgba(244,245,240,0.15); transform: none; }
.panel-ot-v2 .btn-generar-orden { background: transparent; border: 1px solid var(--paper); color: var(--paper); border-radius: 2px; font: 500 10px/1.4 'Geist Mono', monospace; letter-spacing: .1em; text-transform: uppercase; padding: 9px 14px; cursor: pointer; transition: background .12s, color .12s; box-shadow: none; }
.panel-ot-v2 .btn-generar-orden:hover { background: var(--paper); color: var(--green); transform: none; box-shadow: none; }

/* KPI cards */
.panel-ot-v2 .go-indicadores { display: flex; gap: 8px; padding: 16px 20px; background: var(--hush); border-bottom: 1px solid rgba(111,168,138,0.2); flex-shrink: 0; flex-wrap: wrap; }
.panel-ot-v2 .go-ind { flex: 1; min-width: 80px; background: var(--paper); border: 1px solid rgba(111,168,138,0.3); border-left: none; border-radius: 2px; padding: 12px 14px; cursor: pointer; transition: background .12s, border-color .12s; box-shadow: none; }
.panel-ot-v2 .go-ind:hover { transform: none; box-shadow: none; background: var(--hush); border-color: var(--green); }
.panel-ot-v2 .go-ind.active { background: var(--green); border-color: var(--green); outline: none; }
.panel-ot-v2 .go-ind.active .go-ind-num,
.panel-ot-v2 .go-ind.active .go-ind-label { color: var(--paper); }
.panel-ot-v2 .go-ind-num { font: 700 26px/1 'Geist', sans-serif; color: var(--ink); }
.panel-ot-v2 .go-ind-label { font: 500 8px/1.4 'Geist Mono', monospace; letter-spacing: .1em; text-transform: uppercase; color: var(--mesh); margin-top: 4px; }
/* colores de acento por estado (border-top) */
.panel-ot-v2 .go-ind-total       { border-top: 2px solid var(--green); }
.panel-ot-v2 .go-ind-pend        { border-top: 2px solid var(--amber); }
.panel-ot-v2 .go-ind-proc        { border-top: 2px solid var(--lime); }
.panel-ot-v2 .go-ind-pausada     { border-top: 2px solid var(--clay,#D8C8B0); }
.panel-ot-v2 .go-ind-reprogramada{ border-top: 2px solid var(--mesh); }
.panel-ot-v2 .go-ind-cancelada   { border-top: 2px solid var(--rust); }
.panel-ot-v2 .go-ind-cerrada     { border-top: 2px solid var(--ink); }

/* criticidad */
.panel-ot-v2 .go-criticidad-bar { padding: 14px 20px; background: var(--paper); border-bottom: 1px solid rgba(111,168,138,0.2); flex-shrink: 0; }
.panel-ot-v2 .go-crit-label { font: 500 9px/1.4 'Geist Mono', monospace; letter-spacing: .12em; text-transform: uppercase; color: var(--mesh); margin-bottom: 10px; }
.panel-ot-v2 .go-critcard { background: var(--paper); border: 1px solid rgba(111,168,138,0.3); border-radius: 2px; padding: 12px 14px; cursor: pointer; transition: border-color .12s, background .12s; box-shadow: none; }
.panel-ot-v2 .go-critcard:hover { transform: none; box-shadow: none; border-color: var(--green); background: var(--hush); }
.panel-ot-v2 .go-critcard.active.go-crit-alta  { border: 2px solid var(--rust);  background: rgba(194,93,62,.06); }
.panel-ot-v2 .go-critcard.active.go-crit-media { border: 2px solid var(--amber); background: rgba(217,164,65,.06); }
.panel-ot-v2 .go-critcard.active.go-crit-baja  { border: 2px solid var(--green); background: rgba(44,90,72,.06); }
.panel-ot-v2 .go-cc-label { font: 500 9px/1.4 'Geist Mono', monospace; letter-spacing: .1em; text-transform: uppercase; color: var(--mesh); }
.panel-ot-v2 .go-crit-alta  .go-cc-n { color: var(--rust); }
.panel-ot-v2 .go-crit-media .go-cc-n { color: var(--amber); }
.panel-ot-v2 .go-crit-baja  .go-cc-n { color: var(--green); }
.panel-ot-v2 .go-cc-n { font: 700 26px/1 'Geist', sans-serif; }
.panel-ot-v2 .go-crit-hint { font: 400 11px/1.4 'Geist', sans-serif; color: var(--mesh); margin: 8px 0 0; }
.panel-ot-v2 .go-crit-hint a { color: var(--green); }

/* columna derecha: criticidad + detalle apilados */
.panel-ot-v2 .go-right-col { width: 420px; flex-shrink: 0; display: flex; flex-direction: column; border-left: 1px solid rgba(111,168,138,0.3); overflow: hidden; }
.panel-ot-v2 .go-right-col .go-criticidad-bar { flex-shrink: 0; border-bottom: 1px solid var(--line) !important; }
.panel-ot-v2 .go-right-col .go-detalle-panel { flex: 1; width: 100%; border-left: none; }
/* tabla */
.panel-ot-v2 .go-body { display: flex; flex: 1; min-height: 0; overflow: hidden; }
.panel-ot-v2 .go-tabla-panel { flex: 1; display: flex; flex-direction: column; overflow: hidden; border-right: 1px solid rgba(111,168,138,0.2); }
.panel-ot-v2 .go-tabla-scroll { flex: 1; overflow-y: auto; }
.panel-ot-v2 .go-tabla { width: 100%; border-collapse: collapse; font-size: 13px; font-family: 'Geist', sans-serif; }
.panel-ot-v2 .go-tabla thead th { font: 500 9px/1.4 'Geist Mono', monospace; letter-spacing: .1em; text-transform: uppercase; color: var(--mesh); padding: 10px 12px; border-bottom: 1px solid rgba(111,168,138,0.25); background: var(--hush); text-align: left; }
.panel-ot-v2 .go-tabla tbody tr { border-bottom: 1px solid rgba(111,168,138,0.12); cursor: pointer; transition: background .1s; }
.panel-ot-v2 .go-tabla tbody tr:hover { background: var(--hush); }
.panel-ot-v2 .go-tabla tbody tr.go-fila-activa { background: rgba(44,90,72,0.08); }
.panel-ot-v2 .go-tabla tbody td { padding: 10px 12px; color: var(--ink); font-size: 13px; }

/* panel de detalle */
.panel-ot-v2 .go-detalle-panel { width: 420px; flex-shrink: 0; overflow-y: auto; background: var(--paper); border-left: 1px solid rgba(111,168,138,0.3); }
.panel-ot-v2 .go-detalle-vacio { display: flex; flex-direction: column; align-items: center; justify-content: center; height: 100%; color: var(--mesh); font: 400 13px/1.5 'Geist', sans-serif; gap: 8px; }

/* chat */
.panel-ot-v2 .go-chat-header { background: var(--green); color: var(--paper); padding: 10px 14px; font: 600 13px/1 'Geist', sans-serif; display: flex; justify-content: space-between; align-items: center; }
.panel-ot-v2 .go-chat-cerrar { cursor: pointer; font-size: 20px; color: var(--paper); }

/* ===== FIN PANEL OT v2 ===== */

/* ── panel OT v2: parches de clases inyectadas por JS ── */

.panel-ot-v2 .go-tabla tbody td:first-child {
  font: 400 12px/1 'Geist Mono', monospace;
  color: var(--mesh);
}
.panel-ot-v2 .go-tabla tbody td:nth-child(2) strong {
  font: 600 13px/1 'Geist Mono', monospace;
  color: var(--green);
}

.panel-ot-v2 .orden-prioridad-badge {
  display: inline-block;
  padding: 3px 8px;
  border-radius: 2px;
  font: 600 9px/1.4 'Geist Mono', monospace;
  letter-spacing: .08em;
  text-transform: uppercase;
}
.panel-ot-v2 .orden-prioridad-badge.alta   { background: var(--rust);  color: var(--paper); }
.panel-ot-v2 .orden-prioridad-badge.media  { background: var(--amber); color: var(--ink); }
.panel-ot-v2 .orden-prioridad-badge.baja   { background: var(--lime);  color: var(--ink); }

.panel-ot-v2 .go-btn-accion {
  padding: 9px 16px;
  border: none;
  border-radius: 2px;
  font: 600 10px/1.4 'Geist Mono', monospace;
  letter-spacing: .08em;
  text-transform: uppercase;
  cursor: pointer;
  transition: opacity .12s;
  box-shadow: none;
}
.panel-ot-v2 .go-btn-accion:hover { transform: none; opacity: .85; }
.panel-ot-v2 .go-btn-accion.pausada      { background: var(--amber); color: var(--ink); }
.panel-ot-v2 .go-btn-accion.reprogramada { background: var(--mesh);  color: var(--paper); }
.panel-ot-v2 .go-btn-accion.cerrada      { background: var(--green); color: var(--paper); }
.panel-ot-v2 .go-btn-accion.cancelada    { background: var(--rust);  color: var(--paper); }

.panel-ot-v2 .go-update-textarea {
  width: 100%;
  border: 1px solid rgba(111,168,138,0.5);
  border-radius: 2px;
  padding: 10px 12px;
  font: 400 13px/1.5 'Geist', sans-serif;
  color: var(--ink);
  background: var(--paper);
  resize: vertical;
  outline: none;
  box-sizing: border-box;
}
.panel-ot-v2 .go-update-textarea:focus { border-color: var(--green); }

.panel-ot-v2 .go-btn-confirmar {
  background: var(--green);
  color: var(--paper);
  border: none;
  border-radius: 2px;
  padding: 10px 20px;
  font: 600 11px/1 'Geist Mono', monospace;
  letter-spacing: .08em;
  text-transform: uppercase;
  cursor: pointer;
  opacity: 1;
  transition: background .12s;
}
.panel-ot-v2 .go-btn-confirmar:hover {
  background: var(--ink);
}
/* botón "Confirmar cambio" real — usa clase btn-generar-orden dentro de go-motivo-acciones */
.panel-ot-v2 .go-motivo-acciones .btn-generar-orden {
  background: var(--green) !important;
  color: var(--paper) !important;
  border: none !important;
  border-radius: 2px !important;
  padding: 10px 20px !important;
  font: 600 11px/1 'Geist Mono', monospace !important;
  letter-spacing: .08em;
  text-transform: uppercase;
  cursor: pointer;
  opacity: 1;
  transition: background .12s;
}
.panel-ot-v2 .go-motivo-acciones .btn-generar-orden:hover {
  background: var(--ink) !important;
  color: var(--paper) !important;
  transform: none;
}
.panel-ot-v2 .go-btn-cancelar {
  background: transparent;
  color: var(--ink);
  border: 1px solid rgba(111,168,138,0.4);
  border-radius: 2px;
  padding: 10px 20px;
  font: 600 11px/1 'Geist Mono', monospace;
  letter-spacing: .08em;
  text-transform: uppercase;
  cursor: pointer;
}

/* ── fin parches panel OT v2 ── */

/* fila sticky: fondo diferenciado para OT seleccionada */
.panel-ot-v2 tr.seleccionada { background: #C4D87C !important; }

/* ════════════════════════════════════════════════════════════════
   panel OT v2 · consolidación Trama de piezas vivas
   (reemplaza los globales viejos .go-* del panel; al estar scopeadas
    ganan por especificidad y permiten purgar el CSS azul global)
   ════════════════════════════════════════════════════════════════ */

/* tabla / chat: estados vacíos */
.panel-ot-v2 .go-empty { text-align: center; padding: 48px 20px; color: var(--mesh); font: 400 13px/1.5 var(--sans); }
.panel-ot-v2 .go-chat-vacio { text-align: center; padding: 20px; color: var(--mesh); font: 400 12px/1.5 var(--sans); }

/* detalle: ícono de panel vacío */
.panel-ot-v2 .go-detalle-vacio-icon { font-size: 34px; opacity: .45; }

/* pills de estado y badge de prioridad: ahora globales Trama (cross-cutting con calendario/modal orden) */
/* botón de acción: variante faltante "enproceso" */
.panel-ot-v2 .go-btn-accion.enproceso { background: var(--green); color: var(--paper); }

/* ── checklist de activos incluidos ── */
.panel-ot-v2 .go-activos-sec { margin-top: 14px; border: 1px solid var(--line); border-radius: 2px; overflow: hidden; }
.panel-ot-v2 .go-activos-header { display: flex; align-items: center; justify-content: space-between; padding: 8px 12px; background: var(--hush); cursor: pointer; user-select: none; }
.panel-ot-v2 .go-activos-header:hover { background: rgba(111,168,138,.16); }
.panel-ot-v2 .go-activos-header-right { display: flex; align-items: center; gap: 8px; }
.panel-ot-v2 .go-activos-chevron { font-size: 14px; color: var(--green); transition: transform .2s; }
.panel-ot-v2 .go-activos-body { padding: 8px; }
.panel-ot-v2 .go-activos-lista { display: flex; flex-direction: column; gap: 4px; }
.panel-ot-v2 .go-activo-row { display: flex; align-items: flex-start; gap: 8px; padding: 7px 10px; border-radius: 2px; background: var(--paper); border: 1px solid var(--line); }
.panel-ot-v2 .go-activo-row.completado { background: rgba(196,216,124,.16); border-color: rgba(111,168,138,.4); }
.panel-ot-v2 .go-act-status { font-size: 14px; flex-shrink: 0; margin-top: 1px; }
.panel-ot-v2 .go-act-info { flex: 1; min-width: 0; }
.panel-ot-v2 .go-act-nombre { font: 600 12px/1.3 var(--sans); color: var(--ink); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.panel-ot-v2 .go-act-meta { font: 400 10.5px/1.3 var(--mono); color: var(--green); letter-spacing: .03em; margin-top: 1px; }
.panel-ot-v2 .go-act-nota { font: 400 11px/1.4 var(--sans); color: var(--amber); font-style: italic; margin-top: 2px; }
/* barra de progreso del checklist */
.panel-ot-v2 .gap-bar { height: 6px; background: var(--hush); border-radius: 2px; overflow: hidden; }
.panel-ot-v2 .gap-fill { height: 100%; background: var(--green); border-radius: 2px; transition: width .3s; }
.panel-ot-v2 .gap-count { font: 500 10.5px/1 var(--mono); color: var(--green); white-space: nowrap; }

/* ── caja de motivo de cambio de estado ── */
.panel-ot-v2 .go-motivo-box { margin-top: 12px; background: var(--hush); border: 1px solid var(--line); border-radius: 2px; padding: 14px; }
.panel-ot-v2 .go-motivo-titulo { font: 600 12.5px/1.3 var(--sans); color: var(--ink); margin-bottom: 8px; }
.panel-ot-v2 .go-estado-final { font: 400 12.5px/1.5 var(--sans); color: var(--mesh); font-style: italic; margin: 0; }
/* historial: motivo opcional */
.panel-ot-v2 .go-hist-motivo { font: 400 11px/1.45 var(--sans); color: var(--amber); font-style: italic; margin-top: 3px; }

/* ── chat inline: textarea, columna de íconos ── */
.panel-ot-v2 .go-icon-col { display: flex; flex-direction: column; gap: 2px; flex-shrink: 0; }
.panel-ot-v2 .go-icon-btn i { font-size: 20px; }
.panel-ot-v2 .go-msg-textarea { flex: 1; resize: none; border: none; background: transparent; font: 400 13px/1.5 var(--sans); padding: 0 4px; outline: none; color: var(--ink); height: 52px; min-height: 52px; max-height: 52px; overflow-y: auto; }
.panel-ot-v2 .go-btn-send i { font-size: 18px; }

/* ── chat inline: eventos del sistema ── */
.panel-ot-v2 .go-ci-evento { text-align: center; padding: 6px 0; }
.panel-ot-v2 .go-ci-evento-nombre { font: 600 11.5px/1.3 var(--sans); color: var(--ink); }
.panel-ot-v2 .go-ci-evento-accion { font: 400 11.5px/1.4 var(--sans); color: var(--ink); opacity: .7; }
.panel-ot-v2 .go-ci-evento-accion strong { color: var(--green); }
.panel-ot-v2 .go-ci-evento-motivo { font: 400 11px/1.45 var(--sans); color: var(--amber); font-style: italic; margin-top: 2px; }
.panel-ot-v2 .go-ci-evento-fecha { font: 400 9.5px/1 var(--mono); color: var(--mesh); letter-spacing: .06em; margin-top: 2px; }

/* ── chat inline: burbujas de mensaje ── */
.panel-ot-v2 .go-ci-msg-row { display: flex; flex-direction: column; gap: 2px; max-width: 85%; }
.panel-ot-v2 .go-ci-msg-row.gerente { align-self: flex-end; align-items: flex-end; }
.panel-ot-v2 .go-ci-msg-row.responsable { align-self: flex-start; align-items: flex-start; }
.panel-ot-v2 .go-ci-msg-sender { font: 500 8.5px/1 var(--mono); letter-spacing: .12em; text-transform: uppercase; color: var(--green); }
.panel-ot-v2 .go-ci-burbuja { padding: 8px 12px; border-radius: 10px; font: 400 13px/1.45 var(--sans); color: var(--ink); }
.panel-ot-v2 .go-ci-burbuja.gerente { background: #6FA88A; color: var(--paper); border: none; }
.panel-ot-v2 .go-ci-burbuja.responsable { background: #ffffff; border: 1.5px solid #ffffff; }
.panel-ot-v2 .go-ci-msg-time { font: 400 9.5px/1 var(--mono); color: var(--mesh); letter-spacing: .06em; }
.panel-ot-v2 .go-ci-msg-visto { font: 400 9px/1 var(--mono); color: #6FA88A; display: flex; align-items: center; gap: 3px; justify-content: flex-end; letter-spacing: .06em; }
.panel-ot-v2 .go-chat-img-preview { border-radius: 2px !important; }
/* tarjeta PDF adjunto en el chat */
.panel-ot-v2 .go-ci-pdf { display: flex; align-items: center; gap: 8px; background: var(--paper); border: 1px solid var(--line); border-radius: 2px; padding: 8px 10px; margin-top: 4px; cursor: pointer; }
.panel-ot-v2 .go-ci-pdf:hover { background: var(--hush); border-color: var(--green); }
.panel-ot-v2 .go-ci-pdf i { font-size: 22px; color: var(--green); }
.panel-ot-v2 .go-ci-pdf-name { font: 500 12px/1.3 var(--sans); color: var(--ink); }
.panel-ot-v2 .go-ci-pdf-size { font: 400 10px/1 var(--mono); color: var(--mesh); }

/* ── barra de preview de adjunto ── */
.panel-ot-v2 .preview-bar { display: flex; align-items: center; gap: 8px; background: var(--hush); border: 1px solid var(--line); border-radius: 2px; padding: 6px 10px; margin-bottom: 8px; }
.panel-ot-v2 .preview-bar img { width: 36px; height: 36px; object-fit: cover; border-radius: 2px; }
.panel-ot-v2 .preview-bar-name { flex: 1; font: 400 12px/1.3 var(--sans); color: var(--ink); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.panel-ot-v2 .preview-bar-remove { background: none; border: none; cursor: pointer; color: var(--mesh); font-size: 16px; }
.panel-ot-v2 .preview-bar-remove:hover { color: var(--rust); }
.panel-ot-v2 .preview-bar-icon { flex-shrink: 0; display: flex; align-items: center; justify-content: center; width: 32px; height: 32px; }
.panel-ot-v2 .preview-bar-icon i { font-size: 22px; color: var(--green); line-height: 1; }
.panel-ot-v2 .preview-bar-icon img { width: 32px; height: 32px; object-fit: cover; border-radius: 2px; display: block; }

/* ── archivos adjuntos: ícono y lista ── */
.panel-ot-v2 .go-archivo-item i { font-size: 20px; color: var(--green); flex-shrink: 0; }
.panel-ot-v2 .go-archivo-info { flex: 1; min-width: 0; }
.panel-ot-v2 .go-archivos-lista { display: flex; flex-direction: column; }

/* ── panel OT v2 · layout que vivía en los globales .go-* (Trama) ──
   El bloque A scopeado solo override de color; el layout de estas piezas
   (chat inline, caja de input, botones de ícono/enviar, toggle de archivos,
   sticky del thead) venía únicamente de los globales ya purgados. */
.panel-ot-v2 .go-chat-inline { display: flex; flex-direction: column; gap: 8px; min-height: 200px; max-height: 400px; overflow-y: auto; padding: 12px 14px; animation: chatFadeIn .3s ease; }
.panel-ot-v2 .go-chat-inline::-webkit-scrollbar { width: 4px; }
.panel-ot-v2 .go-chat-inline::-webkit-scrollbar-track { background: transparent; }
.panel-ot-v2 .go-chat-inline::-webkit-scrollbar-thumb { background: rgba(111,168,138,0.4); border-radius: 2px; }
.panel-ot-v2 .go-input-box { display: flex; align-items: center; gap: 6px; border-radius: 20px; padding: 6px 6px 6px 10px; }
.panel-ot-v2 .go-icon-btn { width: 32px; height: 32px; border: none; cursor: pointer; display: flex; align-items: center; justify-content: center; background: transparent; color: var(--green); border-radius: 50%; }
.panel-ot-v2 .go-btn-send { width: 36px; height: 36px; min-width: 36px; border: none; cursor: pointer; display: flex; align-items: center; justify-content: center; flex-shrink: 0; color: var(--paper); border-radius: 50%; }
.panel-ot-v2 .go-archivos-toggle { width: 100%; background: none; border: none; padding: 8px 16px; cursor: pointer; display: flex; align-items: center; gap: 6px; text-align: left; }
.panel-ot-v2 .go-archivos-toggle:hover { background: var(--hush); color: var(--ink); }
.panel-ot-v2 .go-archivos-toggle i { font-size: 14px; }
.panel-ot-v2 .go-archivos-toggle i:last-child { margin-left: auto; }
.panel-ot-v2 .go-archivos-bar { border-top: 1px solid var(--line); }
.panel-ot-v2 .go-archivos-lista { padding: 4px 8px 8px; }
.panel-ot-v2 .go-archivo-item:hover { background: var(--hush); }
.panel-ot-v2 .go-tabla thead th { position: sticky; top: 0; z-index: 20; }
.panel-ot-v2 tr.seleccionada { top: 33px; z-index: 5; }
.panel-ot-v2 .go-motivo-acciones { display: flex; gap: 8px; margin-top: 10px; justify-content: flex-end; }
.panel-ot-v2 .go-ci-evento { align-self: center; max-width: 85%; }

/* ── nueva-ot-v2 · huecos ── */
.nueva-ot-v2 .orden-info-box b { color: var(--ink); }
.nueva-ot-v2 .orden-input[readonly] { background: var(--hush); border-color: var(--line); color: var(--ink); font-weight: 500; cursor: default; }

/* ── nueva-ot-mult-v2 · huecos (resumen, checkbox, vacío, estados de botón) ── */
.nueva-ot-mult-v2 .otn-vacio { text-align: center; color: var(--mesh); font: 400 13px/1.5 var(--sans); padding: 32px 16px; margin: 0; }
.nueva-ot-mult-v2 .otn-item input[type="checkbox"] { width: 16px; height: 16px; accent-color: var(--green); flex-shrink: 0; cursor: pointer; }
.nueva-ot-mult-v2 .otn-res-count { font: 600 14px/1.2 var(--sans); color: var(--green); }
.nueva-ot-mult-v2 .otn-res-tipo  { font: 400 12px/1.3 var(--sans); color: var(--ink); opacity: .7; margin-top: 1px; }
.nueva-ot-mult-v2 .otn-res-aviso { font: 400 11.5px/1.4 var(--sans); color: var(--amber); background: rgba(217,164,65,.14); border-radius: 2px; padding: 4px 8px; margin-top: 6px; display: inline-block; }
.nueva-ot-mult-v2 .otn-btn-cancel:hover { background: var(--hush); }
.nueva-ot-mult-v2 .otn-btn-confirm:hover { background: var(--ink); }
.nueva-ot-mult-v2 .otn-btn-confirm:disabled { background: var(--mesh); cursor: not-allowed; opacity: .6; }

/* ===== proveedores-modal-v2 (Trama) · COMPLETO ===== */

/* overlay */
.proveedores-modal-v2 { position:fixed; inset:0; z-index:9500; display:none; }

/* layout shell */
.proveedores-modal-v2 .prov-modal { background:var(--paper); display:flex; flex-direction:column; width:100%; height:92vh; max-width:1200px; max-height:92vh; margin:auto; border-radius:2px; box-shadow:0 24px 60px rgba(15,31,24,0.35); overflow:hidden; font-family:'Geist',system-ui,sans-serif; }

/* header */
.proveedores-modal-v2 .prov-header { background:var(--green); padding:18px 24px; display:flex; align-items:center; justify-content:space-between; flex-shrink:0; }
.proveedores-modal-v2 .prov-eyebrow { font:500 10px/1.4 'Geist Mono',monospace; letter-spacing:.14em; text-transform:uppercase; color:rgba(244,245,240,0.7); margin-bottom:4px; }
.proveedores-modal-v2 .prov-title { font:600 20px/1.2 'Geist',sans-serif; color:var(--paper); margin:0; }
.proveedores-modal-v2 .prov-subtitle { font:400 12px/1.4 'Geist',sans-serif; color:rgba(244,245,240,0.7); margin:2px 0 0; }
.proveedores-modal-v2 .prov-close { font-size:26px; color:var(--paper); cursor:pointer; background:transparent; border:1px solid rgba(244,245,240,0.4); border-radius:2px; padding:0 6px; line-height:1.2; transition:background .12s; }
.proveedores-modal-v2 .prov-close:hover { background:rgba(244,245,240,0.15); }

/* filtros de rubro */
.proveedores-modal-v2 #provFiltros { display:flex; gap:6px; flex-wrap:wrap; padding:14px 20px; background:var(--hush); border-bottom:1px solid rgba(111,168,138,0.2); flex-shrink:0; }
.proveedores-modal-v2 .prov-filtro-pill { padding:6px 14px; border:1px solid rgba(111,168,138,0.35); border-radius:2px; background:var(--paper); font:500 10px/1.4 'Geist Mono',monospace; letter-spacing:.1em; text-transform:uppercase; color:var(--ink); cursor:pointer; transition:background .12s,border-color .12s; }
.proveedores-modal-v2 .prov-filtro-pill:hover { background:var(--hush); border-color:var(--green); }
.proveedores-modal-v2 .prov-filtro-pill.active { background:var(--green); border-color:var(--green); color:var(--paper); }

/* botón agregar */
.proveedores-modal-v2 #provBtnAgregar,
.proveedores-modal-v2 .btn-generar-orden { background:var(--green); color:var(--paper); border:none; border-radius:2px; padding:9px 16px; font:500 10px/1.4 'Geist Mono',monospace; letter-spacing:.1em; text-transform:uppercase; cursor:pointer; transition:background .12s; }
.proveedores-modal-v2 #provBtnAgregar:hover,
.proveedores-modal-v2 .btn-generar-orden:hover { background:var(--ink); }
.proveedores-modal-v2 .btn-cancelar-orden { background:transparent; color:var(--rust); border:1px solid var(--rust); border-radius:2px; padding:9px 16px; font:500 10px/1.4 'Geist Mono',monospace; letter-spacing:.1em; text-transform:uppercase; cursor:pointer; transition:background .12s,color .12s; }
.proveedores-modal-v2 .btn-cancelar-orden:hover { background:var(--rust); color:var(--paper); }

/* body: tabla + detalle */
.proveedores-modal-v2 .prov-body { flex:1; min-height:0; display:grid; grid-template-columns:1fr 500px; grid-template-rows:1fr; overflow:hidden; }
.proveedores-modal-v2 #provTablaPanel { display:flex; flex-direction:column; overflow:hidden; border-right:1px solid rgba(111,168,138,0.2); }
.proveedores-modal-v2 .prov-tabla-scroll { flex:1; overflow-y:auto; scrollbar-width:thin; scrollbar-color:rgba(0,0,0,0.28) transparent; }
.proveedores-modal-v2 .prov-tabla-scroll::-webkit-scrollbar { width:6px; }
.proveedores-modal-v2 .prov-tabla-scroll::-webkit-scrollbar-track { background:transparent; }
.proveedores-modal-v2 .prov-tabla-scroll::-webkit-scrollbar-thumb { background:rgba(0,0,0,0.28); border-radius:3px; }

/* tabla */
.proveedores-modal-v2 .prov-tabla { width:100%; border-collapse:collapse; font-size:13px; font-family:'Geist',sans-serif; }
.proveedores-modal-v2 .prov-tabla thead th { font:500 9px/1.4 'Geist Mono',monospace; letter-spacing:.1em; text-transform:uppercase; color:var(--mesh); padding:10px 14px; border-bottom:1px solid rgba(111,168,138,0.25); background:var(--hush); text-align:left; }
.proveedores-modal-v2 .prov-tabla tbody tr { border-bottom:1px solid rgba(111,168,138,0.12); cursor:pointer; transition:background .1s; }
.proveedores-modal-v2 .prov-tabla tbody tr:hover { background:var(--hush); }
.proveedores-modal-v2 .prov-tabla tbody tr.seleccionada { background:#C4D87C; border-left:3px solid var(--green); color:var(--ink); }
.proveedores-modal-v2 .prov-tabla tbody td { padding:10px 14px; color:var(--ink); }

/* semáforo vigente/vencido */
.proveedores-modal-v2 .prov-semaforo { display:inline-block; padding:3px 10px; border-radius:2px; font:600 9px/1.4 'Geist Mono',monospace; letter-spacing:.08em; text-transform:uppercase; }
.proveedores-modal-v2 .prov-semaforo.vigente { background:var(--lime); color:var(--ink); }
.proveedores-modal-v2 .prov-semaforo.vencido { background:var(--rust); color:var(--paper); }
.proveedores-modal-v2 .prov-semaforo.por-vencer { background:var(--amber); color:var(--ink); }

/* panel detalle */
.proveedores-modal-v2 #provDetallePanel { display:flex; flex-direction:column; overflow:hidden; background:var(--paper); border-left:1px solid rgba(111,168,138,0.2); }
.proveedores-modal-v2 .prov-detalle-scroll { flex:1; overflow-y:auto; scrollbar-width:thin; scrollbar-color:rgba(0,0,0,0.28) transparent; min-height:0; }
.proveedores-modal-v2 .prov-detalle-scroll::-webkit-scrollbar { width:5px; }
.proveedores-modal-v2 .prov-detalle-scroll::-webkit-scrollbar-track { background:transparent; }
.proveedores-modal-v2 .prov-detalle-scroll::-webkit-scrollbar-thumb { background:rgba(0,0,0,0.28); border-radius:3px; }
.proveedores-modal-v2 #provDetalleVacio { display:flex; flex-direction:column; align-items:center; justify-content:center; height:100%; color:var(--mesh); font:400 13px/1.5 'Geist',sans-serif; gap:8px; }
.proveedores-modal-v2 .prov-detalle-header { padding:18px 20px 14px; border-bottom:1px solid rgba(111,168,138,0.2); }
.proveedores-modal-v2 .prov-detalle-nombre { font:600 18px/1.2 'Geist',sans-serif; color:var(--ink); }
.proveedores-modal-v2 .prov-detalle-rubro { font:400 12px/1.4 'Geist Mono',monospace; color:var(--mesh); margin-top:4px; letter-spacing:.06em; }
.proveedores-modal-v2 .prov-info-label { font:500 9px/1.4 'Geist Mono',monospace; letter-spacing:.14em; text-transform:uppercase; color:var(--green); padding:14px 20px 8px; }
.proveedores-modal-v2 .prov-info-box { margin:0 20px 10px; padding:14px; background:var(--hush); border:1px solid rgba(111,168,138,0.25); border-radius:2px; font:400 13px/1.6 'Geist',sans-serif; color:var(--ink); }
.proveedores-modal-v2 .prov-info-box b { font-weight:600; }

/* formulario */
.proveedores-modal-v2 .prov-form-grid { display:grid; grid-template-columns:1fr 1fr; gap:12px; padding:0 20px; }
.proveedores-modal-v2 .prov-form-field { display:flex; flex-direction:column; gap:4px; }
.proveedores-modal-v2 .prov-form-field.full { grid-column:1/-1; }
.proveedores-modal-v2 .prov-form-label { font:500 9px/1.4 'Geist Mono',monospace; letter-spacing:.1em; text-transform:uppercase; color:var(--mesh); }
.proveedores-modal-v2 .prov-form-input { border:1px solid rgba(111,168,138,0.5); background:var(--paper); border-radius:2px; padding:8px 10px; font:400 13px/1.3 'Geist',sans-serif; color:var(--ink); width:100%; outline:none; box-sizing:border-box; }
.proveedores-modal-v2 .prov-form-input:focus { border-color:var(--green); }
.proveedores-modal-v2 .prov-form-input select { appearance:none; }

/* ===== calendario-mensual-v2 (Trama) · COMPLETO ===== */

/* overlay y shell */
.calendario-mensual-v2 { position:fixed; top:60px; left:0; right:0; bottom:0; z-index:10001; display:none; flex-direction:column; align-items:center; justify-content:center; background:rgba(15,31,24,0.55); backdrop-filter:blur(5px); padding:20px; font-family:'Geist',system-ui,sans-serif; }
.calendario-mensual-v2.open { display:flex; }

/* header */
.calendario-mensual-v2 .cal-header { display:flex; align-items:center; gap:16px; padding:20px 28px 14px; border-bottom:1px solid rgba(111,168,138,0.2); flex-shrink:0; }
.calendario-mensual-v2 .cal-eyebrow { font:500 9px/1.4 'Geist Mono',monospace; letter-spacing:.14em; text-transform:uppercase; color:var(--mesh); }
.calendario-mensual-v2 #calendarMonthLabel { font:600 28px/1 'Geist',sans-serif; color:var(--ink); }
.calendario-mensual-v2 .cal-nav-btn { width:32px; height:32px; border:1px solid rgba(111,168,138,0.4); border-radius:2px; background:transparent; color:var(--green); cursor:pointer; font-size:16px; display:flex; align-items:center; justify-content:center; transition:background .12s; }
.calendario-mensual-v2 .cal-nav-btn:hover { background:var(--hush); }
.calendario-mensual-v2 .cal-nav-year { width:auto; height:auto; padding:7px 14px; font:500 10px/1 'Geist Mono',monospace; letter-spacing:.14em; text-transform:uppercase; font-size:10px; }
.calendario-mensual-v2 .cal-btn-hoy { padding:7px 14px; border:1px solid rgba(111,168,138,0.4); border-radius:2px; background:transparent; color:var(--green); font:500 11px/1 'Geist Mono',monospace; letter-spacing:.08em; text-transform:uppercase; cursor:pointer; transition:background .12s; }
.calendario-mensual-v2 .cal-btn-hoy:hover { background:var(--hush); }
.calendario-mensual-v2 .cal-btn-anual { padding:7px 14px; border:1px solid var(--green); border-radius:2px; background:var(--green); color:var(--paper); font:500 11px/1 'Geist Mono',monospace; letter-spacing:.08em; text-transform:uppercase; cursor:pointer; transition:background .12s; }
.calendario-mensual-v2 .cal-btn-anual:hover { background:var(--ink); border-color:var(--ink); }

/* inner layout */
.calendario-mensual-v2 .cal-inner { padding:0; }

/* filtros */
.calendario-mensual-v2 .cal-filtros { display:flex; gap:6px; padding:10px 28px; border-bottom:1px solid rgba(111,168,138,0.15); flex-shrink:0; }
.calendario-mensual-v2 .cal-filtro-btn { padding:6px 14px; border:1px solid rgba(111,168,138,0.3); border-radius:2px; background:var(--paper); font:500 10px/1.4 'Geist Mono',monospace; letter-spacing:.08em; text-transform:uppercase; color:var(--ink); cursor:pointer; transition:background .12s,border-color .12s; }
.calendario-mensual-v2 .cal-filtro-btn:hover { background:var(--hush); border-color:var(--green); }
.calendario-mensual-v2 .cal-filtro-btn.active { background:var(--green); border-color:var(--green); color:var(--paper); }

/* grilla de días */
.calendario-mensual-v2 #calendarGrid { display:grid; grid-template-columns:repeat(7,1fr); grid-template-rows:30px repeat(6,1fr); gap:1px; background:rgba(111,168,138,0.15); border-top:1px solid rgba(111,168,138,0.2); flex:1; min-height:0; overflow:hidden; margin-top:0; }
.calendario-mensual-v2 .calendar-header-txt { background:var(--hush); padding:8px; font:500 9px/1 'Geist Mono',monospace; letter-spacing:.1em; text-transform:uppercase; color:var(--mesh); text-align:center; }
.calendario-mensual-v2 .calendar-day-box { background:var(--paper); min-height:90px; padding:8px; display:flex; flex-direction:column; gap:4px; cursor:default; transition:background .1s; position:relative; border:none; border-radius:0; aspect-ratio:auto; }
.calendario-mensual-v2 .calendar-day-box:hover { background:var(--hush); }
.calendario-mensual-v2 .calendar-day-box.today { outline:2px solid var(--green); outline-offset:-2px; }
.calendario-mensual-v2 .calendar-day-box.selected { background:var(--hush); outline:2px solid var(--green); outline-offset:-2px; }
.calendario-mensual-v2 .cal-day-num { font:600 13px/1 'Geist',sans-serif; color:var(--ink); }
.calendario-mensual-v2 .calendar-day-box.other-month { cursor:default; background:rgba(233,235,226,0.5); }
.calendario-mensual-v2 .calendar-day-box.other-month .cal-day-num { color:var(--mesh); opacity:.4; }
.calendario-mensual-v2 .calendar-day-box.other-month:hover { background:rgba(233,235,226,0.5); }

/* eventos en los días */
.calendario-mensual-v2 .cal-day-nombre { font:400 11px/1.3 'Geist',sans-serif; color:var(--ink); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.calendario-mensual-v2 .cal-day-cat { font:400 9px/1 'Geist Mono',monospace; color:var(--mesh); text-transform:uppercase; letter-spacing:.06em; }
.calendario-mensual-v2 .cal-day-dot-status { display:inline-block; width:6px; height:6px; border-radius:50%; margin-right:4px; flex-shrink:0; }
.calendario-mensual-v2 .cal-day-dot-status.vencido { background:var(--rust); }
.calendario-mensual-v2 .cal-day-dot-status.por-vencer { background:var(--amber); }
.calendario-mensual-v2 .cal-day-dot-status.ok { background:var(--lime); }
.calendario-mensual-v2 .cal-dot-ok { background:var(--lime); }
.calendario-mensual-v2 .cal-dot-ot { background:var(--green); }
.calendario-mensual-v2 .cal-dot-vencido { background:var(--rust); }
.calendario-mensual-v2 .cal-dot-porVencer { background:var(--amber); }
.calendario-mensual-v2 .cal-day-mas { font:500 9px/1 'Geist Mono',monospace; color:var(--mesh); margin-top:2px; }

/* colores de los días según tipo de evento — misma lógica que calendario anual */
.calendario-mensual-v2 .day-has-venc { background:rgba(194,93,62,0.1); border-top:3px solid var(--rust,#C25D3E); }
.calendario-mensual-v2 .day-has-ot { background:rgba(196,216,124,0.2); border-top:3px solid var(--lime,#C4D87C); }
.calendario-mensual-v2 .day-has-ambos { background:rgba(217,164,65,0.14); border-top:3px solid var(--amber,#D9A441); }
.calendario-mensual-v2 .day-has-venc .cal-day-num { color:var(--rust,#C25D3E); }
.calendario-mensual-v2 .day-has-ot .cal-day-num { color:var(--green,#2C5A48); }
.calendario-mensual-v2 .day-has-ambos .cal-day-num { color:var(--amber,#D9A441); }
/* dots por tipo (mismo sistema que calendario anual) */
.calendario-mensual-v2 .cal-day-dots { display:flex; gap:3px; padding-top:4px; }
.calendario-mensual-v2 .cal-day-dot { width:5px; height:5px; border-radius:50%; }
.calendario-mensual-v2 .cal-day-dot-venc { background:var(--rust,#C25D3E); }
.calendario-mensual-v2 .cal-day-dot-ot { background:var(--lime,#C4D87C); }

/* tarjetas de OT en el detalle */
.calendario-mensual-v2 .cal-ot-card { background:var(--hush); border:1px solid rgba(111,168,138,0.3); border-radius:2px; padding:10px 12px; }
.calendario-mensual-v2 .cal-ot-codigo { font:500 10px/1 'Geist Mono',monospace; color:var(--green); letter-spacing:.06em; }
.calendario-mensual-v2 .ord-alta { border-left:3px solid var(--rust); }
.calendario-mensual-v2 .ord-media { border-left:3px solid var(--amber); }
.calendario-mensual-v2 .ord-baja { border-left:3px solid var(--lime); }

/* tarjetas de activos */
.calendario-mensual-v2 .cal-asset-card { background:var(--hush); border:1px solid rgba(111,168,138,0.3); border-radius:2px; padding:10px 12px; }
.calendario-mensual-v2 .cal-asset-name { font:500 13px/1.2 'Geist',sans-serif; color:var(--ink); }
.calendario-mensual-v2 .cal-asset-cat { font:400 10px/1 'Geist Mono',monospace; color:var(--mesh); text-transform:uppercase; letter-spacing:.06em; }
.calendario-mensual-v2 .cal-meta-row { display:flex; gap:20px; flex-wrap:wrap; }
.calendario-mensual-v2 .cal-meta-label { font:400 9px/1 'Geist Mono',monospace; color:var(--mesh); text-transform:uppercase; letter-spacing:.08em; }
.calendario-mensual-v2 .cal-meta-value { font:500 12px/1 'Geist',sans-serif; color:var(--ink); }

/* panel de detalle del día */
.calendario-mensual-v2 .cal-day-detail { background:var(--hush); border-top:1px solid rgba(111,168,138,0.2); border-radius:0; max-height:0; overflow:hidden; margin-top:-32px; }
.calendario-mensual-v2 .cal-day-detail.visible { border-color:rgba(111,168,138,0.333); max-height:360px; overflow-y:auto; padding:0; margin-top:-32px; }
/* header unificado (título + botón) con borde inferior */
.calendario-mensual-v2 .cal-detail-header { display:flex; align-items:center; gap:12px; padding:10px 16px; border:1px solid rgba(44,90,72,0.35); position:sticky; top:0; background:var(--paper); z-index:1; flex-shrink:0; }
.calendario-mensual-v2 .cal-detail-back { font:500 10px/1 'Geist Mono',monospace; letter-spacing:.1em; text-transform:uppercase; color:var(--green,#2C5A48); cursor:pointer; padding:5px 10px; border:1px solid rgba(111,168,138,0.5); background:transparent; transition:background .12s; white-space:nowrap; flex-shrink:0; }
.calendario-mensual-v2 .cal-detail-back:hover { background:rgba(111,168,138,0.12); }
.calendario-mensual-v2 #calDayList { padding:10px 16px 14px; }
.calendario-mensual-v2 .cal-asset-card { background:var(--paper); border:1px solid rgba(111,168,138,0.25); border-radius:2px; }
.calendario-mensual-v2 .cal-asset-cat { font:400 9px/1 'Geist Mono',monospace; color:var(--mesh); letter-spacing:.06em; }
.calendario-mensual-v2 .cal-asset-name { font:500 13px/1.2 'Geist',sans-serif; color:var(--ink); }
.calendario-mensual-v2 .cal-meta-label { font:400 9px/1 'Geist Mono',monospace; color:var(--mesh); text-transform:uppercase; letter-spacing:.08em; }
.calendario-mensual-v2 .cal-meta-value { font:500 12px/1 'Geist',sans-serif; color:var(--ink); }

/* ficha topbar */
.calendario-mensual-v2 .cal-ficha-topbar { background:var(--green, #2C5A48); border-radius:0; }

/* cierre */
.calendario-mensual-v2 .cal-close-btn { background:transparent; border:1px solid rgba(111,168,138,0.4); border-radius:2px; color:var(--green); cursor:pointer; padding:6px 10px; font-size:18px; transition:background .12s; margin-left:auto; }
.calendario-mensual-v2 .cal-close-btn:hover { background:var(--hush); }

/* ===== calendario-anual-v2 (Trama) · COMPLETO ===== */

/* overlay y shell */
.calendario-anual-v2 { position:fixed; top:60px; left:0; right:0; bottom:0; z-index:10101; display:none; flex-direction:column; align-items:center; justify-content:center; background:rgba(15,31,24,0.55); backdrop-filter:blur(5px); padding:20px; font-family:'Geist',system-ui,sans-serif; }
.calendario-anual-v2.open { display:flex; }

/* header */
.calendario-anual-v2 .year-header { display:flex; align-items:center; gap:16px; padding:20px 28px 14px; border-bottom:1px solid rgba(111,168,138,0.2); flex-shrink:0; }
.calendario-anual-v2 .year-eyebrow { font:500 9px/1.4 'Geist Mono',monospace; letter-spacing:.14em; text-transform:uppercase; color:var(--mesh); }
.calendario-anual-v2 #yearViewLabel { font:600 36px/1 'Geist',sans-serif; color:var(--ink); }
.calendario-anual-v2 .year-nav-btn { width:32px; height:32px; border:1px solid rgba(111,168,138,0.4); border-radius:2px; background:transparent; color:var(--green); cursor:pointer; font-size:16px; display:flex; align-items:center; justify-content:center; transition:background .12s; }
.calendario-anual-v2 .year-nav-btn:hover { background:var(--hush); }
.calendario-anual-v2 .year-btn-mensual { padding:7px 14px; border:1px solid var(--green); border-radius:2px; background:transparent; color:var(--green); font:500 11px/1 'Geist Mono',monospace; letter-spacing:.08em; text-transform:uppercase; cursor:pointer; transition:background .12s; margin-left:auto; }
.calendario-anual-v2 .year-btn-mensual:hover { background:var(--green); color:var(--paper); }

/* filtros */
.calendario-anual-v2 .year-filtros { display:flex; gap:6px; padding:10px 28px; border-bottom:1px solid rgba(111,168,138,0.15); flex-shrink:0; }
.calendario-anual-v2 .year-filtro-btn { padding:6px 14px; border:1px solid rgba(111,168,138,0.3); border-radius:2px; background:var(--paper); font:500 10px/1.4 'Geist Mono',monospace; letter-spacing:.08em; text-transform:uppercase; color:var(--ink); cursor:pointer; transition:background .12s,border-color .12s; }
.calendario-anual-v2 .year-filtro-btn:hover { background:var(--hush); border-color:var(--green); }
.calendario-anual-v2 .year-filtro-btn.active { background:var(--green); border-color:var(--green); color:var(--paper); }

/* leyenda densidad */
.calendario-anual-v2 .year-density-legend { display:flex; align-items:center; gap:6px; padding:8px 28px; font:400 9px/1 'Geist Mono',monospace; color:var(--mesh); text-transform:uppercase; letter-spacing:.08em; }
.calendario-anual-v2 .den-swatch { width:12px; height:12px; border-radius:2px; }
.calendario-anual-v2 .den-0 { background:var(--hush); }
.calendario-anual-v2 .den-1 { background:rgba(196,216,124,0.4); }
.calendario-anual-v2 .den-2 { background:var(--lime); }
.calendario-anual-v2 .den-3 { background:var(--amber); }
.calendario-anual-v2 .den-4 { background:var(--rust); }

/* grilla de meses */
.calendario-anual-v2 #yearGrid { display:grid; grid-template-columns:repeat(4,1fr); gap:20px; padding:20px 28px 32px; }
.calendario-anual-v2 .year-month { background:var(--paper); }
.calendario-anual-v2 .year-month-name { font:600 11px/1 'Geist Mono',monospace; letter-spacing:.1em; text-transform:uppercase; color:var(--green); margin-bottom:8px; }
.calendario-anual-v2 .year-month-grid { display:grid; grid-template-columns:repeat(7,1fr); gap:2px; }
.calendario-anual-v2 .year-day-hdr { font:500 8px/1 'Geist Mono',monospace; color:var(--mesh); text-align:center; padding:2px 0; }

/* celdas de día */
.calendario-anual-v2 .year-day { width:100%; aspect-ratio:1; border-radius:2px; background:var(--hush); cursor:default; display:flex; align-items:center; justify-content:center; font:400 9px/1 'Geist',sans-serif; color:var(--ink); transition:opacity .1s; position:relative; }
.calendario-anual-v2 .year-day.has-events { cursor:pointer; }
.calendario-anual-v2 .year-day.has-events:hover { opacity:.8; }
.calendario-anual-v2 .year-day.empty { background:transparent; }

/* colores del heatmap */
.calendario-anual-v2 .year-day.y-venc { background:var(--rust); color:var(--paper); }
.calendario-anual-v2 .year-day.y-ot { background:var(--lime); color:var(--ink); }
.calendario-anual-v2 .year-day.y-ambos { background:var(--amber); color:var(--ink); }
.calendario-anual-v2 .year-day.y-today { outline:2px solid var(--green); outline-offset:-2px; }

/* dots */
.calendario-anual-v2 .year-day-dots { display:flex; gap:2px; position:absolute; bottom:2px; left:50%; transform:translateX(-50%); }
.calendario-anual-v2 .year-day-dot { width:4px; height:4px; border-radius:50%; }
.calendario-anual-v2 .year-day-dot-venc { background:var(--rust); }
.calendario-anual-v2 .year-day-dot-ot { background:var(--green); }

/* close */
.calendario-anual-v2 .year-close-btn { background:transparent; border:1px solid rgba(111,168,138,0.4); border-radius:2px; color:var(--green); cursor:pointer; padding:6px 10px; font-size:18px; transition:background .12s; }
.calendario-anual-v2 .year-close-btn:hover { background:var(--hush); }

/* ============================================================
   FICHA ACTIVO COMPARTIDA (panel lateral · Indicadores y Calendario)
   Reusa el CSS del modal-activo-v2 sin posicionarlo como overlay.
   ============================================================ */
.modal-activo-v2.ma-inline {
  display: block !important; position: static !important; inset: auto !important; z-index: auto !important;
  background: var(--paper, #F4F5F0) !important; backdrop-filter: none !important;
  padding: 0 !important; max-height: none !important; min-height: 0 !important;
}

/* ============================================================
   DOCUMENTACIÓN DEL ACTIVO (docBlock) — por tipo + por activo
   Clases propias (docb-*); aplican en los 3 contenedores.
   ============================================================ */
.docb { display: flex; flex-direction: column; gap: 18px; margin-top: 0; }
.docb-group { display: flex; flex-direction: column; gap: 8px; }
.docb-group-title { font: 500 9px/1.4 'Geist Mono', monospace; letter-spacing: .12em;
  text-transform: uppercase; color: var(--mesh, #6FA88A); }
.docb-list { display: flex; flex-direction: column; gap: 6px; }
.docb-vacio { font: 400 12px/1.4 'Geist', sans-serif; color: var(--mesh, #6FA88A); padding: 4px 0; }
.docb-item { display: flex; align-items: center; gap: 10px; padding: 8px 10px;
  border: 1px solid rgba(111,168,138,0.3); border-radius: 2px; background: #fff; }
.docb-item-icon { font-size: 18px; color: var(--green, #2C5A48); flex-shrink: 0; }
.docb-item-info { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1; }
.docb-item-name { font: 500 13px/1.3 'Geist', sans-serif; color: var(--ink, #0F1F18);
  cursor: pointer; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.docb-item-name:hover { color: var(--green, #2C5A48); text-decoration: underline; }
.docb-item-meta { font: 400 10px/1.3 'Geist Mono', monospace; letter-spacing: .06em;
  text-transform: uppercase; color: var(--mesh, #6FA88A); }
.docb-item-actions { display: flex; gap: 4px; flex-shrink: 0; }
.docb-icon-btn { width: 28px; height: 28px; display: flex; align-items: center; justify-content: center;
  border: 1px solid rgba(111,168,138,0.4); background: transparent; border-radius: 2px;
  color: var(--green, #2C5A48); cursor: pointer; font-size: 15px; transition: background .12s; }
.docb-icon-btn:hover { background: var(--hush, #E9EBE2); }
.docb-icon-danger { color: var(--rust, #C25D3E); border-color: rgba(194,93,62,0.4); }
.docb-icon-danger:hover { background: rgba(194,93,62,0.1); }
.docb-confirm { display: flex; align-items: center; gap: 6px; flex-shrink: 0;
  font: 500 11px/1 'Geist', sans-serif; color: var(--rust, #C25D3E); }
.docb-mini { border: 1px solid var(--green, #2C5A48); background: transparent; color: var(--green, #2C5A48);
  border-radius: 2px; padding: 4px 8px; font: 500 11px/1 'Geist', sans-serif; cursor: pointer; }
.docb-mini-danger { border-color: var(--rust, #C25D3E); color: #fff; background: var(--rust, #C25D3E); }
.docb-upload { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; margin-top: 2px; }
.docb-tipo { border: 1px solid rgba(111,168,138,0.5); border-radius: 2px; padding: 6px 8px;
  font: 400 12px/1 'Geist', sans-serif; color: var(--ink, #0F1F18); background: #fff; }
.docb-file { font: 400 11px/1.2 'Geist', sans-serif; flex: 1; min-width: 140px; }
.docb-add-btn { display: inline-flex; align-items: center; gap: 5px; border: 1px solid var(--green, #2C5A48);
  background: var(--green, #2C5A48); color: var(--paper, #F4F5F0); border-radius: 2px;
  padding: 7px 12px; font: 500 12px/1 'Geist', sans-serif; cursor: pointer; }
.docb-add-btn:hover { background: var(--ink, #0F1F18); }

/* ── Paneles laterales (Indicadores/Calendario) en estética Trama ──
   Reemplaza el topbar azul viejo y el fondo blanco redondeado para que la
   ficha se lea igual que el modal de activo de Gestión por categorías. */
.ind-ficha-panel, .cal-ficha-panel {
  background: var(--paper, #F4F5F0);
  border: 1px solid rgba(111,168,138,0.35);
  border-radius: 2px;
  box-shadow: 0 24px 60px rgba(15,31,24,0.35);
}
.ind-ficha-topbar, .cal-ficha-topbar {
  background: var(--hush, #E9EBE2);
  border-bottom: 1px solid rgba(111,168,138,0.3);
  border-radius: 0;
  justify-content: flex-start;
  padding: 12px 20px;
}
.ind-ficha-topbar .ficha-close-btn, .cal-ficha-topbar .ficha-close-btn {
  display: inline-flex; align-items: center; gap: 6px;
  font: 500 11px/1 'Geist Mono', monospace; letter-spacing: .08em; text-transform: uppercase;
}
.ind-ficha-topbar .ficha-close-btn { color: var(--green, #2C5A48); }
.ind-ficha-topbar .ficha-close-btn:hover { color: var(--ink, #0F1F18); }
.cal-ficha-topbar .ficha-close-btn { color: var(--paper, #fff); }
.cal-ficha-topbar .ficha-close-btn:hover { color: rgba(255,255,255,0.8); }
.ind-ficha-close-x { color: var(--green, #2C5A48); }
.ind-ficha-close-x:hover { color: var(--ink, #0F1F18); }
.cal-ficha-close-x { color: var(--paper, #fff); }
.cal-ficha-close-x:hover { color: rgba(255,255,255,0.8); transform: rotate(90deg); }

/* ── Previsualización inline de documentos (docBlock.previsualizarInline) ── */
#docInlinePreview { position: fixed; inset: 0; z-index: 22000; display: none; align-items: center; justify-content: center; }
.dip-backdrop { position: absolute; inset: 0; background: rgba(15,31,24,0.72); backdrop-filter: blur(4px); cursor: pointer; }
.dip-modal { position: relative; background: var(--paper, #F4F5F0); width: 90vw; max-width: 900px; height: 85vh; display: flex; flex-direction: column; border-radius: 2px; border: 1px solid rgba(111,168,138,0.35); box-shadow: 0 24px 60px rgba(15,31,24,0.4); z-index: 1; overflow: hidden; }
.dip-header { background: var(--green, #2C5A48); padding: 12px 18px; display: flex; justify-content: space-between; align-items: center; flex-shrink: 0; gap: 12px; }
.dip-nombre { color: var(--paper, #F4F5F0); font: 500 13px/1.3 'Geist', sans-serif; flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dip-close { background: transparent; border: 1px solid rgba(244,245,240,0.4); border-radius: 2px; color: var(--paper, #F4F5F0); cursor: pointer; padding: 5px 8px; display: flex; align-items: center; font-size: 15px; transition: background .12s; }
.dip-close:hover { background: rgba(244,245,240,0.15); }
.dip-body { flex: 1; overflow: hidden; display: flex; align-items: center; justify-content: center; background: #1c1c1c; }
#dipFrame { width: 100%; height: 100%; border: none; display: none; }
#dipImg { max-width: 100%; max-height: 100%; object-fit: contain; display: none; }
.dip-cargando { color: rgba(244,245,240,0.5); font: 400 13px/1.4 'Geist Mono', monospace; letter-spacing: .06em; }

/* ============================================================
   PANEL ADMINISTRADOR — scoped under .admin-panel
   ============================================================ */
.admin-panel { position:fixed; inset:0; background:var(--paper); flex-direction:column; font-family:var(--font-sans); z-index:100; overflow:hidden; }
.admin-panel .admin-tabs-bar { display:flex; border-bottom:1px solid var(--line); flex-shrink:0; padding:0 22px; background:var(--paper); }
.admin-panel .admin-tab-btn { background:none; border:none; border-bottom:2px solid transparent; padding:12px 16px; font:500 13px/1 var(--font-sans); color:var(--fg-muted); cursor:pointer; margin-bottom:-1px; transition:color .15s,border-color .15s; }
.admin-panel .admin-tab-btn:hover { color:var(--ink); }
.admin-panel .admin-tab-btn.active { color:var(--green); border-bottom-color:var(--green); }
.admin-panel .admin-content { flex:1; overflow-y:auto; padding:24px 28px; }
.admin-panel .admin-toolbar { display:flex; gap:10px; margin-bottom:16px; }
.admin-panel .admin-table-wrap { overflow-x:auto; border:1px solid var(--line); }
.admin-panel .admin-table { width:100%; border-collapse:collapse; font:400 13px/1.4 var(--font-sans); color:var(--ink); background:var(--paper); }
.admin-panel .admin-table th { background:var(--hush); padding:9px 12px; text-align:left; font:500 10px/1 'Geist Mono',monospace; letter-spacing:.08em; text-transform:uppercase; color:var(--fg-muted); border-bottom:1px solid var(--line); white-space:nowrap; }
.admin-panel .admin-table td { padding:9px 12px; border-bottom:1px solid var(--line-soft); vertical-align:middle; }
.admin-panel .admin-table tr:last-child td { border-bottom:none; }
.admin-panel .admin-table tr:hover td { background:var(--hush); }
.admin-panel .admin-td-loading { text-align:center; color:var(--fg-muted); padding:32px !important; }
.admin-panel .admin-badge { display:inline-block; padding:3px 8px; font:500 10px/1 'Geist Mono',monospace; letter-spacing:.06em; text-transform:uppercase; }
.admin-panel .admin-badge-ok { background:rgba(196,216,124,.25); color:#3e5a1e; }
.admin-panel .admin-badge-off { background:rgba(194,93,62,.15); color:var(--rust); }
.admin-panel .admin-row-actions { display:flex; gap:4px; }
.admin-panel .admin-icon-btn { background:none; border:1px solid transparent; width:28px; height:28px; display:flex; align-items:center; justify-content:center; cursor:pointer; color:var(--fg-muted); font-size:14px; transition:background .12s,color .12s,border-color .12s; }
.admin-panel .admin-icon-btn:hover { background:var(--hush); border-color:var(--line); color:var(--ink); }
.admin-panel .admin-icon-btn.danger:hover { background:rgba(194,93,62,.1); border-color:var(--rust); color:var(--rust); }
.admin-panel .admin-btn-primary { background:var(--green); color:var(--paper); border:none; padding:9px 16px; font:500 12px/1 var(--font-sans); cursor:pointer; display:inline-flex; align-items:center; gap:6px; transition:background .15s; }
.admin-panel .admin-btn-primary:hover { background:var(--ink); }
.admin-panel .admin-btn-primary:disabled { opacity:.5; cursor:not-allowed; }
.admin-panel .admin-btn-secondary { background:transparent; color:var(--ink); border:1px solid var(--line-hush); padding:9px 16px; font:500 12px/1 var(--font-sans); cursor:pointer; display:inline-flex; align-items:center; gap:6px; transition:background .15s,border-color .15s; }
.admin-panel .admin-btn-secondary:hover { background:var(--hush); border-color:var(--mesh); }
.admin-panel .admin-btn-danger { background:var(--rust); color:#fff; border:none; padding:9px 16px; font:500 12px/1 var(--font-sans); cursor:pointer; display:inline-flex; align-items:center; gap:6px; transition:background .15s; }
.admin-panel .admin-btn-danger:hover { background:#a84930; }
.admin-panel .admin-modal-overlay { position:fixed; inset:0; background:rgba(15,31,24,.45); display:flex; align-items:center; justify-content:center; z-index:200; }
.admin-panel .admin-modal { background:var(--paper); width:460px; max-width:95vw; max-height:85vh; display:flex; flex-direction:column; box-shadow:0 8px 40px rgba(15,31,24,.18); }
.admin-panel .admin-modal-wide { width:680px; }
.admin-panel .admin-modal-sm { width:380px; }
.admin-panel .admin-modal-header { display:flex; align-items:center; justify-content:space-between; padding:16px 20px; border-bottom:1px solid var(--line); font:600 14px/1 var(--font-sans); color:var(--ink); flex-shrink:0; }
.admin-panel .admin-modal-close { background:none; border:none; color:var(--fg-muted); font-size:17px; cursor:pointer; padding:2px; line-height:1; }
.admin-panel .admin-modal-close:hover { color:var(--ink); }
.admin-panel .admin-modal-body { flex:1; overflow-y:auto; padding:18px 20px; }
.admin-panel .admin-modal-footer { display:flex; gap:10px; justify-content:flex-end; padding:14px 20px; border-top:1px solid var(--line); flex-shrink:0; }
.admin-panel .admin-modal-section-label { font:600 10px/1 'Geist Mono',monospace; letter-spacing:.1em; text-transform:uppercase; color:var(--mesh); padding:14px 0 10px; border-bottom:1px solid var(--line-soft); margin-bottom:12px; margin-top:8px; }
.admin-panel .admin-form-row { display:flex; flex-direction:column; gap:5px; margin-bottom:11px; }
.admin-panel .admin-form-row label { font:500 10px/1 'Geist Mono',monospace; letter-spacing:.08em; text-transform:uppercase; color:var(--fg-muted); }
.admin-panel .admin-form-row input,.admin-panel .admin-form-row select,.admin-panel .admin-form-row textarea { background:var(--hush); border:1px solid var(--line); padding:8px 10px; font:400 13px/1.4 var(--font-sans); color:var(--ink); width:100%; box-sizing:border-box; border-radius:0; outline:none; transition:border-color .15s; resize:vertical; }
.admin-panel .admin-form-row input:focus,.admin-panel .admin-form-row select:focus,.admin-panel .admin-form-row textarea:focus { border-color:var(--green); }
.admin-panel .admin-modal-error { color:var(--rust); font:400 12px/1.4 var(--font-sans); margin:8px 0 0; min-height:16px; }
.admin-panel .admin-upload-row { display:flex; gap:20px; flex-wrap:wrap; margin-bottom:8px; }
.admin-panel .admin-upload-block { display:flex; flex-direction:column; gap:7px; }
.admin-panel .admin-upload-label { font:500 10px/1 'Geist Mono',monospace; letter-spacing:.08em; text-transform:uppercase; color:var(--fg-muted); }
.admin-panel .admin-upload-preview { width:120px; height:76px; border:1px solid var(--line); background:var(--hush); display:flex; align-items:center; justify-content:center; overflow:hidden; }
.admin-panel .admin-upload-preview img { width:100%; height:100%; object-fit:cover; }
.admin-panel .admin-upload-btn { cursor:pointer; }
.admin-panel .admin-upload-status { font:400 11px/1.3 var(--font-sans); color:var(--fg-muted); }
.admin-panel .admin-asig-list { display:flex; flex-direction:column; gap:4px; max-height:160px; overflow-y:auto; margin-bottom:10px; }
.admin-panel .admin-asig-item { display:flex; align-items:center; justify-content:space-between; padding:6px 10px; background:var(--hush); border:1px solid var(--line-soft); font:400 13px/1.3 var(--font-sans); color:var(--ink); }
.admin-panel .admin-asig-add { display:flex; gap:8px; align-items:center; }
.admin-panel .admin-asig-add select { flex:1; background:var(--hush); border:1px solid var(--line); padding:8px 10px; font:400 13px/1.4 var(--font-sans); color:var(--ink); border-radius:0; outline:none; transition:border-color .15s; }
.admin-panel .admin-asig-add select:focus { border-color:var(--green); }
.admin-panel .admin-tab-panel { width:100%; }
.admin-panel .admin-form-readonly { font:400 13px/1.4 var(--font-sans); color:var(--ink); padding:8px 10px; background:var(--paper); border:1px solid var(--line-soft); opacity:.85; }
.admin-panel .admin-modelo-bar-wrap { background:var(--hush); height:4px; border:1px solid var(--line); }
.admin-panel .admin-modelo-bar { background:var(--green); height:100%; width:0%; transition:width .3s ease; }
.admin-panel .admin-modelo-etapa { font:400 12px/1.4 var(--font-sans); color:var(--fg-muted); }
.admin-panel .ap-archivo-row { display:flex; align-items:center; gap:8px; padding:6px 10px; background:var(--paper); border:1px solid var(--line-soft); }
.admin-panel .ap-archivo-icon { font-size:14px; color:var(--green); flex-shrink:0; }
.admin-panel .ap-archivo-nombre { flex:1; font:400 12px/1.4 var(--mono); color:var(--ink); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.admin-panel .ap-archivo-del { background:none; border:none; color:var(--rust); cursor:pointer; padding:2px 6px; font-size:14px; display:flex; align-items:center; flex-shrink:0; opacity:.75; }
.admin-panel .ap-archivo-del:hover { opacity:1; }