
/* Los colores viven en temas.css, que define los tokens de las tres vistas.
   Aqui no debe quedar ningun color fijo: si lo hubiera, esa parte de la
   pantalla se quedaria clara en la vista oscura. */
/* Tipografia unica del menu lateral: la usan las opciones y los titulos de
   grupo. Esta aqui y no repetida en cada regla para que no puedan divergir. */
:root{--menu-font:400 13.5px/1.45 "Segoe UI",system-ui,-apple-system,Roboto,Arial,sans-serif}
*{box-sizing:border-box}
body{margin:0;font:14px/1.45 "Segoe UI",system-ui,-apple-system,Roboto,Arial,sans-serif;color:var(--txt);background:var(--paper)}
.app{display:grid;grid-template-columns:220px 1fr;min-height:100vh}
nav.side{background:var(--side);color:var(--sidebar-text);padding:18px 12px;position:relative}
/* El logo ocupa el ancho util de la barra y se alinea con el texto de abajo:
   mismo margen lateral de 10px que .brand, para que no quede flotando. La
   imagen es blanca sobre transparente, que es justo lo que pide este fondo. */
.brand-logo{display:block;width:100%;height:auto;padding:0 10px 12px;margin:0}
/* El nombre del portal, sobre el del modulo: mas pequeno y en mayusculas
   espaciadas, para que se lea como el paraguas que es y no compita con el
   modulo en el que se esta trabajando. */
.brand-portal{color:var(--sidebar-muted);font-size:11px;font-weight:700;letter-spacing:.12em;
  text-transform:uppercase;padding:0 10px 2px}
.brand{color:#fff;font-weight:700;font-size:17px;padding:4px 10px 18px;letter-spacing:-.2px}
.brand small{display:block;font-weight:400;color:var(--sidebar-muted);font-size:12px}
.side h4{color:var(--sidebar-muted);margin:14px 0 2px}
.side a{display:flex;justify-content:space-between;color:var(--sidebar-text);text-decoration:none;
  padding:7px 10px 7px 26px;border-radius:6px;font:var(--menu-font);position:relative}
/* Sangria de las opciones respecto de su titulo de grupo: la linea de la
   izquierda hace de guia y deja ver de un vistazo que opciones cuelgan de que
   titulo. Sin ella, con el titulo y la opcion en la misma tipografia y el mismo
   cuerpo, las dos se leen como si estuvieran al mismo nivel. */
.side a:before{content:"";position:absolute;left:14px;top:0;bottom:0;width:1px;background:var(--sidebar-border)}
/* El enlace del logo no es una opcion: ni sangria, ni linea guia, ni relleno. */
.side a.brand-logo-enlace{padding:0;border-radius:0}
.side a.brand-logo-enlace:before{display:none}
.side a:first-of-type:before{top:4px}
.side a:last-of-type:before{bottom:4px}
.side a:hover{background:var(--side2)}
.side a.on{background:var(--bg-sidebar-active);color:#fff}
.side a .n{font-size:12px;opacity:.8}

/* ---------------------------------------------------------------- menu colapsable
   Dos cosas distintas, pedidas por Mauro:
   1. Los GRUPOS se abren y se cierran con un clic en su titulo.
   2. La BARRA ENTERA se encoge a una franja de iconos, para ganar ancho en la
      bandeja y en el ticket, que son tablas.
   Lo que dibuja los iconos y el boton es app.js: asi no hay que tocar el HTML de
   cada pantalla, y el menu no puede quedar distinto en una pagina que en otra. */

/* --- el boton que encoge la barra */
.side-toggle{position:absolute;top:14px;right:10px;width:26px;height:26px;display:grid;
  place-items:center;background:none;border:1px solid var(--sidebar-border);border-radius:6px;
  color:var(--sidebar-text);cursor:pointer;padding:0}
.side-toggle:hover{background:var(--side2)}
.side-toggle svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:2}

/* --- titulos de grupo, ahora son controles
   MISMA TIPOGRAFIA Y MISMO TAMANO QUE LAS OPCIONES (pedido de Mauro): el tipo,
   el cuerpo y el grosor salen de la misma variable que .side a, asi que cambiar
   uno cambia los dos y no se pueden separar por descuido. Lo unico que
   distingue al titulo de grupo es el color y el chevron, que no son tipografia. */
.side h4{display:flex;align-items:center;gap:6px;cursor:pointer;user-select:none;
  background:none;border:0;padding:7px 10px;width:100%;text-align:left;
  font:var(--menu-font);letter-spacing:0}
.side h4:hover{color:var(--sidebar-text)}
.side h4 .chev{width:9px;height:9px;flex:none;transition:transform .15s;
  fill:none;stroke:currentColor;stroke-width:2.5}
.side h4[aria-expanded="false"] .chev{transform:rotate(-90deg)}
/* El grupo cerrado lo marca app.js opcion por opcion, y no con selectores de
   hermanos: con hermanos habria que escribir una regla por cada opcion posible y
   el dia que un grupo tenga una mas, esa se quedaria visible sin que nadie lo note. */
.side a.plegado{display:none}

/* --- iconos de cada opcion */
.side a .ico{width:16px;height:16px;flex:none;margin-right:9px;fill:none;
  stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.side a{align-items:center}
.side a > span:first-of-type{flex:1}

/* --- barra encogida: solo los iconos */
.app.side-min{grid-template-columns:56px 1fr}
.app.side-min nav.side{padding:18px 8px;overflow:hidden}
.app.side-min .brand,
.app.side-min .side h4,
.app.side-min .side a span{display:none}
.app.side-min .brand-logo{padding:0;margin-bottom:10px;opacity:0}
.app.side-min .side-toggle{right:auto;left:50%;transform:translateX(-50%)}
.app.side-min .side a{justify-content:center;padding:9px 0;margin-top:2px}
.app.side-min .side a:before{display:none}
.app.side-min .side a .ico{margin-right:0}
header.top{display:flex;align-items:center;gap:14px;padding:12px 24px;background:var(--surface);border-bottom:1px solid var(--line)}
header.top h1{font-size:18px;margin:0;flex:1}
.search{border:1px solid var(--line);border-radius:6px;padding:7px 10px;width:280px;color:var(--muted);background:var(--paper)}
.btn{border:1px solid var(--line);background:var(--surface);border-radius:6px;padding:7px 12px;font:inherit;cursor:pointer}
.btn.pri{background:var(--petrol);border-color:var(--petrol);color:#fff}
main{padding:20px 24px;overflow-x:auto}
.panel{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:16px;margin-bottom:16px}
.panel h2{font-size:15px;margin:0 0 12px}
.grid{display:grid;gap:16px}
.g2{grid-template-columns:1fr 1fr}.g3{grid-template-columns:repeat(3,1fr)}.g4{grid-template-columns:repeat(4,1fr)}
.g-side{grid-template-columns:1fr 320px}
table{width:100%;border-collapse:collapse}
th{text-align:left;font-size:12px;color:var(--muted);font-weight:600;padding:8px;border-bottom:1px solid var(--line)}
td{padding:9px 8px;border-bottom:1px solid var(--line-soft);vertical-align:middle}
tr:hover td{background:var(--bg-row-hover)}
.id{font-family:ui-monospace,Consolas,monospace;font-size:12.5px;color:var(--petrol)}
.ch{display:inline-block;font-size:11.5px;padding:2px 7px;border-radius:10px;background:var(--chip-bg);color:var(--chip-fg)}
.ch.mail{background:var(--chip-mail-bg);color:var(--chip-mail-fg)}.ch.wa{background:var(--chip-wa-bg);color:var(--chip-wa-fg)}.ch.chat{background:var(--chip-chat-bg);color:var(--chip-chat-fg)}
.ch.tel{background:var(--chip-tel-bg);color:var(--chip-tel-fg)}.ch.rs{background:var(--chip-rs-bg);color:var(--chip-rs-fg)}
.st{font-size:12px;font-weight:600}
.st.nuevo{color:var(--st-nuevo)}.st.abierto{color:var(--petrol)}.st.curso{color:var(--st-curso)}.st.espera{color:var(--st-espera)}.st.res{color:var(--ok)}
.prio{font-size:12px}.prio.alta{color:var(--late);font-weight:600}.prio.urg{color:#fff;background:var(--late);padding:1px 6px;border-radius:4px}
.sla{width:150px}
.sla .bar{height:6px;background:var(--bar-track);border-radius:3px;overflow:hidden}
.sla .bar i{display:block;height:100%}
.sla small{font-size:11.5px;color:var(--muted)}
.sla.ok i{background:var(--ok)}.sla.warn i{background:var(--warn)}.sla.late i{background:var(--late)}
.sla.late small{color:var(--late);font-weight:600}
.filters{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px}
.chip{border:1px solid var(--line);background:var(--surface);border-radius:16px;padding:5px 11px;font-size:13px}
.chip.on{border-color:var(--petrol);background:var(--petrol-soft);color:var(--petrol);font-weight:600}
.kpi .v{font-size:28px;font-weight:700;letter-spacing:-.5px}
.kpi .l{color:var(--muted);font-size:12.5px}
.kpi .d{font-size:12px}.up{color:var(--late)}.down{color:var(--ok)}
.muted{color:var(--muted)}
.hbar{display:flex;align-items:center;gap:10px;margin:7px 0}
.hbar span:first-child{width:140px;font-size:13px}
.hbar .track{flex:1;height:14px;background:var(--bar-track);border-radius:3px;position:relative;overflow:hidden}
.hbar .track i{position:absolute;left:0;top:0;bottom:0;background:var(--petrol)}
.hbar .cap{position:absolute;top:-3px;bottom:-3px;width:2px;background:var(--txt)}
.hbar b{width:105px;text-align:right;font-size:13px}
.flow{display:grid;grid-template-columns:repeat(6,1fr);gap:0;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:var(--surface)}
.flow div{padding:14px;border-right:1px solid var(--line)}
.flow div:last-child{border-right:0}
.flow .v{font-size:26px;font-weight:700}.flow .l{font-size:12.5px;color:var(--muted)}
.flow .t{font-size:11.5px;color:var(--muted);margin-top:6px}
.cols{display:flex;align-items:flex-end;gap:10px;height:170px;padding-top:10px;border-bottom:1px solid var(--line)}
.cols .c{flex:1;display:flex;gap:3px;align-items:flex-end;height:100%}
.cols .c i{flex:1;border-radius:2px 2px 0 0}
.lbls{display:flex;gap:10px}.lbls span{flex:1;text-align:center;font-size:11.5px;color:var(--muted)}
.legend{display:flex;gap:14px;font-size:12px;color:var(--muted);margin-top:8px}
.legend i{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:5px;vertical-align:-1px}
.conv .msg{border:1px solid var(--line);border-radius:8px;padding:12px;margin-bottom:12px}
.conv .msg.out{background:var(--petrol-soft);border-color:var(--primary-soft-border)}
.conv .msg.auto{background:var(--msg-auto-bg);border-color:var(--msg-auto-bd)}
.conv .msg.note{background:var(--msg-note-bg);border-color:var(--msg-note-bd)}
.msg .h{display:flex;justify-content:space-between;font-size:12.5px;color:var(--muted);margin-bottom:6px}
.msg .h b{color:var(--txt)}
.reply{border:1px solid var(--line);border-radius:8px;overflow:hidden}
.reply .tabs{display:flex;border-bottom:1px solid var(--line);background:var(--paper)}
.reply .tabs span{padding:8px 14px;font-size:13px}.reply .tabs span.on{background:var(--surface);font-weight:600}
.reply .body{height:90px;padding:12px;color:var(--muted)}
.reply .foot{display:flex;justify-content:space-between;padding:8px 12px;border-top:1px solid var(--line)}
dl.props{display:grid;grid-template-columns:110px 1fr;gap:8px 10px;margin:0;font-size:13px}
dl.props dt{color:var(--muted)}dl.props dd{margin:0}
.tl{list-style:none;margin:0;padding:0;border-left:2px solid var(--line)}
.tl li{position:relative;padding:0 0 12px 14px;font-size:13px}
.tl li:before{content:"";position:absolute;left:-6px;top:4px;width:10px;height:10px;border-radius:50%;background:var(--surface);border:2px solid var(--petrol)}
.tl li small{display:block;color:var(--muted);font-size:11.5px}
.rule{border:1px solid var(--line);border-radius:8px;overflow:hidden;margin-bottom:12px}
.rule .rh{display:flex;justify-content:space-between;align-items:center;padding:10px 14px;background:var(--paper);border-bottom:1px solid var(--line)}
.rule .rb{padding:14px}
.step{display:flex;gap:12px;align-items:flex-start;margin-bottom:12px}
.step .k{width:92px;font-size:12px;font-weight:700;color:var(--petrol);padding-top:7px}
.step .v{flex:1;display:flex;flex-wrap:wrap;gap:6px}
.pill{border:1px solid var(--line);border-radius:6px;padding:6px 10px;background:var(--surface);font-size:13px}
.pill.op{background:var(--ink);color:#fff;border-color:var(--ink)}
.toggle{display:inline-block;width:34px;height:18px;border-radius:9px;background:var(--petrol);position:relative;vertical-align:middle}
.toggle:after{content:"";position:absolute;right:2px;top:2px;width:14px;height:14px;border-radius:50%;background:#fff}
.toggle.off{background:var(--toggle-off)}.toggle.off:after{right:auto;left:2px}
.av{display:inline-grid;place-items:center;width:28px;height:28px;border-radius:50%;background:var(--petrol-soft);color:var(--petrol);font-size:12px;font-weight:700;margin-right:8px;vertical-align:middle}
.dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px}
.field{margin-bottom:12px}.field label{display:block;font-size:12.5px;color:var(--muted);margin-bottom:4px}
.input{border:1px solid var(--line);border-radius:6px;padding:8px 10px;background:var(--surface)}
.code{font-family:ui-monospace,Consolas,monospace;font-size:12.5px;background:var(--paper);border:1px solid var(--line);border-radius:6px;padding:12px;white-space:pre-wrap}
.age{display:grid;grid-template-columns:repeat(4,1fr);gap:0;border-radius:6px;overflow:hidden;height:34px;color:#fff;font-size:12px;font-weight:600}
.age span{display:grid;place-items:center}
.kbcard{padding:12px 0;border-bottom:1px solid var(--line-soft)}
.kbcard h3{font-size:14.5px;margin:0 0 4px;color:var(--petrol)}
@media (max-width:900px){.app{grid-template-columns:1fr}nav.side{display:none}.g2,.g3,.g4,.g-side{grid-template-columns:1fr}.flow{grid-template-columns:repeat(3,1fr)}}

.email{border:1px solid var(--line);border-radius:8px;margin-bottom:14px;background:var(--surface)}
.email .mh{display:grid;grid-template-columns:70px 1fr;gap:3px 10px;padding:12px 150px 12px 14px;position:relative;border-bottom:1px solid var(--line);font-size:13px}
.email .mh dt{color:var(--muted)}.email .mh dd{margin:0}
.email .mh .when{position:absolute;top:12px;right:14px;color:var(--muted);font-size:12.5px;text-align:right}
.email .mb{padding:14px 16px;font-size:14px;line-height:1.55}
.email .mb p{margin:0 0 10px;max-width:70ch}
.email.out{border-color:var(--primary-soft-border)}.email.out .mh{background:var(--petrol-soft)}
.email.auto{border-color:var(--msg-auto-bd)}.email.auto .mh{background:var(--msg-auto-bg)}
.inline-img{display:block;max-width:520px;width:100%;border:1px solid var(--line);border-radius:6px;margin:6px 0 10px;cursor:zoom-in}
.imgcap{font-size:12px;color:var(--muted);margin:-4px 0 12px}
.att{display:flex;gap:10px;flex-wrap:wrap;padding:12px 14px;border-top:1px solid var(--line);background:var(--bg-row-hover)}
.att a{display:block;width:150px;border:1px solid var(--line);border-radius:6px;background:var(--surface);text-decoration:none;color:var(--txt);overflow:hidden}
.att a .th{height:90px;display:grid;place-items:center;background:var(--bg-soft);overflow:hidden}
.att a .th svg{width:100%;height:100%}
.att a .nm{padding:6px 8px;font-size:12px}.att a .nm small{display:block;color:var(--muted)}
.att-h{font-size:12.5px;color:var(--muted);padding:10px 14px 0;border-top:1px solid var(--line);background:var(--bg-row-hover)}
.lb{display:none;position:fixed;inset:0;background:rgba(22,32,43,.85);z-index:10;place-items:center;padding:30px}
.lb:target{display:grid}
.lb .box{background:var(--surface);border-radius:8px;max-width:900px;width:100%;overflow:hidden}
.lb .bh{display:flex;justify-content:space-between;align-items:center;padding:10px 14px;border-bottom:1px solid var(--line);font-size:13px}
.lb .bh a{text-decoration:none}
.lb svg{display:block;width:100%}
.tabs2{display:flex;gap:2px;border-bottom:1px solid var(--line);margin-bottom:16px}
.tabs2 span{padding:9px 14px;font-size:13.5px;color:var(--muted);border-bottom:2px solid transparent}
.tabs2 span.on{color:var(--petrol);border-color:var(--petrol);font-weight:600}
.form2{display:grid;grid-template-columns:1fr 1fr;gap:4px 18px}
.saved{font-size:12px;color:var(--muted)}
td .input{padding:5px 8px;display:inline-block;min-width:70px}
.tag-def{font-size:11px;background:var(--petrol-soft);color:var(--petrol);padding:1px 6px;border-radius:4px;margin-left:6px}
@media (max-width:900px){.form2{grid-template-columns:1fr}}
