/* ============================================================
   panel-components.css — componentes compartidos del panel
   (radio, notificaciones, catálogo, modales, editor de catálogo)
   NO incluye layout (.side, .main, .topbar, .content, .tabs, .cal-grid)
   que viven en styles.css para evitar pisar estilos.
   Orden: variables -> componentes UI -> catálogo -> modal -> editor -> responsive
   ============================================================ */

/* ---------- Variables de color (fallback para categoría) ---------- */
/* Tokens --cat-extras / --cat-backline / --on-amber movidos a shared/tokens.css
   (única fuente, así el mapa también los tiene sin depender de fallbacks inline). */

/* ---------- Radio en vivo (port de RadioPlayer.tsx) ---------- */
.rp{position:relative}
.rp-btn{position:relative;width:40px;height:40px;border-radius:12px;display:grid;place-items:center;background:var(--card-2);border:1px solid var(--line);color:var(--bone);cursor:pointer;transition:.2s var(--glide)}
.rp-btn:hover{border-color:var(--amber);color:var(--amber)}
.rp-btn.on{background:rgba(255,138,0,.12);border-color:var(--amber);color:var(--amber)}
.rp-ico{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.rp-dot{position:absolute;top:8px;right:8px;width:7px;height:7px;border-radius:50%;background:var(--ok);box-shadow:0 0 0 2px var(--card-2)}
.rp-pop{position:absolute;top:48px;right:0;width:260px;background:var(--card);border:1px solid var(--line);border-radius:16px;padding:14px;z-index:60;box-shadow:0 20px 50px rgba(0,0,0,.5)}
.rp-pop-head{display:flex;align-items:center;justify-content:space-between;font-family:var(--font-display);font-weight:700;font-size:13px;text-transform:uppercase;margin-bottom:10px}
.rp-live{display:inline-flex;align-items:center;gap:6px;color:var(--ok);font-size:11px}
.rp-live-dot{width:7px;height:7px;border-radius:50%;background:var(--ok);animation:pulse 1.4s infinite}
.rp-body{display:flex;gap:12px;align-items:center}
.rp-art{position:relative;width:64px;height:64px;border-radius:12px;background:var(--card-2);display:grid;place-items:center;flex:0 0 auto}
.rp-art-inner{width:34px;height:34px;color:var(--amber)}
.rp-play{position:absolute;inset:0;margin:auto;width:40px;height:40px;border-radius:50%;background:var(--amber);border:none;color:var(--on-amber,#1a1a1d);display:grid;place-items:center;cursor:pointer;box-shadow:0 6px 16px rgba(255,138,0,.4)}
.rp-play-ico{width:18px;height:18px;fill:currentColor}
.rp-meta{min-width:0}
.rp-track{font-weight:700;margin:0 0 2px}
.rp-state{font-size:12px;color:var(--bone-dim);margin:0}
.rp-eq{display:flex;gap:3px;align-items:flex-end;height:14px;margin-top:6px}
.rp-eq span{width:3px;background:var(--amber);border-radius:2px;animation:eq 1s infinite ease-in-out}
.rp-eq span:nth-child(2){animation-delay:.2s}
.rp-eq span:nth-child(3){animation-delay:.4s}
.rp-eq span:nth-child(4){animation-delay:.6s}
.rp-vol{display:flex;align-items:center;gap:8px;margin-top:12px}
.rp-mute{background:none;border:none;color:var(--bone-dim);cursor:pointer;width:22px;height:22px;display:grid;place-items:center}
.rp-mute svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.rp-vol input[type=range]{flex:1;accent-color:var(--amber)}
.rp-vol-num{font-size:12px;color:var(--bone-dim);width:22px;text-align:right}
@keyframes eq{0%,100%{height:4px}50%{height:14px}}

/* ---------- Notificaciones (Pulse Badge de Kinetics) ---------- */
.notif{position:relative}
.notif-btn{position:relative;width:40px;height:40px;border-radius:12px;display:grid;place-items:center;background:var(--card-2);border:1px solid var(--line);color:var(--bone);cursor:pointer;transition:.2s var(--glide)}
.notif-btn:hover{border-color:var(--amber);color:var(--amber)}
.notif-btn svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.pulse-badge{position:absolute;top:6px;right:6px;min-width:18px;height:18px;padding:0 4px;border-radius:10px;background:var(--amber);color:var(--on-amber,#1a1a1d);font-size:11px;font-weight:800;display:grid;place-items:center}
.pulse-ring{position:absolute;inset:-4px;border-radius:50%;border:2px solid var(--amber);animation:pulse 1.4s infinite}
@keyframes pulse{0%{transform:scale(.9);opacity:.9}70%{transform:scale(1.5);opacity:0}100%{opacity:0}}
.notif-pop{position:absolute;top:48px;right:0;width:300px;max-height:380px;display:flex;flex-direction:column;background:var(--card);border:1px solid var(--line);border-radius:16px;z-index:60;box-shadow:0 20px 50px rgba(0,0,0,.5);overflow:hidden}
.notif-pop[hidden]{display:none}
.notif-head{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;border-bottom:1px solid var(--line);font-family:var(--font-display);font-weight:700;font-size:13px;text-transform:uppercase}
.notif-clear{background:none;border:none;color:var(--bone-dim);font-size:12px;cursor:pointer}
.notif-clear:hover{color:var(--amber)}
.notif-list{overflow:auto;padding:8px}
.notif-item{display:flex;flex-direction:column;gap:2px;padding:10px 12px;border-radius:10px;cursor:pointer}
.notif-item:hover{background:var(--card-2)}
.notif-item .t{font-weight:600;font-size:14px}
.notif-item .m{font-size:12px;color:var(--bone-dim)}
.notif-item .badge{font-size:11px;color:var(--amber)}
.notif-empty{padding:20px;text-align:center;color:var(--bone-faint);font-size:13px}

/* ---------- Modales (base) — declarar antes que variantes ---------- */
.modal-scrim{position:fixed;inset:0;background:rgba(8,8,10,.66);backdrop-filter:blur(4px);display:grid;place-items:center;z-index:200;padding:16px}
.modal-scrim[hidden]{display:none}
.modal{width:calc(100% - 32px);max-width:440px;background:var(--card);border:1px solid var(--line);border-radius:18px;overflow:hidden;display:flex;flex-direction:column;max-height:calc(100vh - 48px);box-shadow:0 30px 80px rgba(0,0,0,.6)}
.modal.modal-sm{max-width:380px}
.modal.modal-lg{max-width:900px;width:calc(100% - 32px)}
.modal-head{display:flex;align-items:center;justify-content:space-between;padding:18px 20px;border-bottom:1px solid var(--line);flex:none;gap:12px}
.modal-head h3{font-family:var(--font-display);font-weight:800;font-size:17px;text-transform:uppercase;letter-spacing:-.01em;color:var(--bone)}
.modal-x{width:32px;height:32px;border-radius:9px;border:1px solid var(--line);background:transparent;color:var(--bone-dim);cursor:pointer;display:grid;place-items:center;flex:none}
.modal-x:hover{color:var(--danger);border-color:var(--danger)}
.modal-x svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round}
.modal-body{padding:20px;overflow:auto;min-width:0}
.modal-foot{display:flex;justify-content:flex-end;gap:10px;padding:14px 20px;border-top:1px solid var(--line);background:var(--card-2);flex:none;flex-wrap:wrap}
.modal-foot .btn-save,.modal-foot .btn-ghost{flex:0 0 auto}

/* ---------- Botones de formulario ---------- */
.btn-save{background:var(--amber);color:var(--on-amber,#1a1a1d);border:none;font-family:var(--font-display);font-weight:800;padding:12px 26px;border-radius:12px;cursor:pointer;box-shadow:var(--shadow-key-lg);transition:transform .12s,box-shadow .12s;font-size:14px}
.btn-save:hover{transform:translateY(-2px)}
.btn-save:active{transform:translateY(4px);box-shadow:var(--shadow-key-press)}
.btn-ghost{background:transparent;color:var(--bone);border:1px solid var(--line);font-family:var(--font-display);font-weight:700;padding:11px 18px;border-radius:10px;cursor:pointer;transition:.18s var(--glide);font-size:14px}
.btn-ghost:hover{border-color:var(--amber);color:var(--amber)}
.btn-add{background:var(--amber);color:var(--on-amber,#1a1a1d);border:none;font-family:var(--font-display);font-weight:800;padding:10px 18px;border-radius:10px;cursor:pointer;box-shadow:var(--shadow-key);transition:transform .12s,box-shadow .12s;font-size:13px;display:inline-flex;align-items:center;gap:6px}
.btn-add:hover{transform:translateY(-2px)}
.btn-add:active{transform:translateY(3px);box-shadow:var(--shadow-key-press)}
.btn-add svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round}
.btn-danger{background:var(--danger);color:var(--card);border:none;font-family:var(--font-display);font-weight:800;padding:11px 18px;border-radius:10px;cursor:pointer;transition:.18s var(--glide);font-size:14px}
.btn-danger:hover{background:color-mix(in srgb,var(--danger) 85%,var(--card))}
.btn-mini{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);background:var(--card-2);color:var(--bone);border-radius:8px;padding:8px 12px;font-size:12px;font-weight:600;cursor:pointer;transition:.18s var(--glide)}
.btn-mini:hover{border-color:var(--amber);color:var(--amber)}

/* ---------- Catálogo (tarjetas) ---------- */
.cat-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px}
.cat-card{display:flex;flex-direction:row;align-items:stretch;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;transition:transform .3s var(--glide),border-color .3s ease;min-height:96px}
.cat-card:hover{transform:translateY(-2px);border-color:var(--amber)}
.cat-tile{width:96px;min-width:96px;display:grid;place-items:center;background:radial-gradient(120% 100% at 50% 0%,var(--graphite-2),var(--card));border-right:1px solid var(--line)}
.cat-tile .mono{width:50px;height:50px;border-radius:13px;background:var(--card-2);border:1px solid var(--line);display:grid;place-items:center;font-family:var(--font-display);font-weight:900;font-size:22px;color:var(--amber)}
.cat-salas .cat-tile .mono{background:var(--amber);color:var(--on-amber,#1a1a1d)}
.cat-extras .cat-tile .mono{background:var(--cat-extras,#7c5cff);color:var(--card)}
.cat-rental .cat-tile .mono{background:var(--cat-backline,#46d4a0);color:var(--graphite)}
.cat-body{padding:14px 16px;display:flex;flex-direction:column;justify-content:center;gap:4px;flex:1;min-width:0}
.cat-body .name{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--bone)}
.cat-body .desc{font-size:12px;color:var(--bone-dim);line-height:1.35;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.cat-meta-row{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:2px}
.cat-room-tag{font-size:10px;font-family:var(--font-display);color:var(--bone-faint);text-transform:uppercase;letter-spacing:.04em;display:inline-block;padding:3px 9px;border-radius:20px;background:rgba(255,255,255,.06)}
.cat-salas .cat-room-tag{background:rgba(255,138,0,.16);color:var(--amber)}
.cat-extras .cat-room-tag{background:rgba(124,92,255,.18);color:var(--cat-extras,#7c5cff)}
.cat-rental .cat-room-tag{background:rgba(70,212,160,.16);color:var(--cat-backline,#46d4a0)}
.cat-price{font-family:var(--font-display);font-weight:800;font-size:14px;color:var(--amber);white-space:nowrap}
.cat-actions{display:flex;flex-direction:column;justify-content:center;gap:6px;padding:10px 12px;border-left:1px solid var(--line);background:var(--card-2)}
.cat-edit,.cat-del{border-radius:8px;padding:6px 10px;font-family:var(--font-display);font-weight:700;font-size:11px;cursor:pointer;border:1px solid var(--line);transition:.18s var(--glide);min-width:64px;text-align:center}
.cat-edit{background:transparent;color:var(--bone)}
.cat-edit:hover{border-color:var(--amber);color:var(--amber);background:rgba(255,138,0,.08)}
.cat-del{background:transparent;color:var(--danger)}
.cat-del:hover{border-color:var(--danger);background:rgba(255,92,92,.1)}
.cat-add{margin-top:14px;width:100%;border:1px dashed var(--line);background:transparent;color:var(--bone-dim);border-radius:12px;padding:14px;font-family:var(--font-display);font-weight:700;cursor:pointer;transition:.2s var(--glide);display:inline-flex;align-items:center;justify-content:center;gap:6px}
.cat-add:hover{border-color:var(--amber);color:var(--amber);background:rgba(255,138,0,.06)}
.cat-add svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round}

/* ---------- Editor de catálogo (dentro del modal-lg) ---------- */
.edit-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.edit-grid .edit-field.full{grid-column:1 / -1}
.edit-field{display:flex;flex-direction:column;gap:7px;min-width:0}
.edit-field label{font-size:12px;color:var(--bone-dim);font-weight:600}
.edit-field input,.edit-field select,.edit-field textarea{background:var(--card-2);border:1px solid var(--line);border-radius:10px;padding:10px 13px;color:var(--bone);font-size:14px;outline:none;transition:border-color .2s ease;min-width:0}
.edit-field input:focus,.edit-field select:focus,.edit-field textarea:focus{border-color:var(--amber)}
.photos-block{display:flex;flex-direction:column;gap:12px;margin-top:18px;padding-top:18px;border-top:1px solid var(--line)}
.photos-block>label{font-size:12px;color:var(--bone-dim);font-weight:600}
.photos-prev{min-height:48px}
.ph-gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:12px}
.ph-thumb{position:relative;border-radius:12px;overflow:hidden;border:1px solid var(--line);background:var(--graphite-2);transition:transform .25s var(--glide),box-shadow .25s ease,border-color .25s ease;cursor:default}
.ph-thumb:hover{transform:translateY(-3px);box-shadow:0 14px 28px -16px rgba(0,0,0,.6);border-color:var(--amber)}
.ph-thumb img{width:100%;height:96px;object-fit:cover;display:block;background:var(--graphite-2)}
.ph-x{position:absolute;top:6px;right:6px;width:24px;height:24px;border-radius:50%;background:rgba(8,8,10,.72);color:var(--bone);border:1px solid var(--line);cursor:pointer;font-size:15px;line-height:1;display:grid;place-items:center;opacity:0;transition:opacity .2s ease,background .2s ease}
.ph-thumb:hover .ph-x{opacity:1}
.ph-x:hover{background:var(--danger);color:var(--card);border-color:var(--danger)}
.ph-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:26px 18px;border:1px dashed var(--line);border-radius:12px;color:var(--bone-faint);font-size:13px;text-align:center;background:transparent}
.ph-empty-ico{display:grid;place-items:center;width:40px;height:40px;border-radius:11px;background:var(--graphite-2);border:1px solid var(--line);color:var(--bone-dim)}
.ph-upload{display:flex;flex-direction:row;align-items:center;justify-content:center;gap:9px;width:fit-content;padding:11px 18px;border:1px dashed var(--amber);border-radius:11px;background:rgba(255,138,0,.06);color:var(--amber);font-family:var(--font-display);font-weight:700;font-size:13px;cursor:pointer;transition:.18s var(--glide)}
.ph-upload:hover{background:rgba(255,138,0,.14);transform:translateY(-1px)}
.ph-upload svg{flex:none}
.list-edit{display:flex;flex-direction:column;gap:12px;margin-top:18px;padding-top:18px;border-top:1px solid var(--line)}
.list-edit .le-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}
.list-edit .le-head label{font-size:13px;color:var(--bone);font-weight:700}
.eq-groups-wrap{display:flex;flex-direction:column;gap:12px}
.eq-group-card{background:var(--card-2);border:1px solid var(--line);border-radius:12px;padding:14px;display:flex;flex-direction:column;gap:10px;transition:border-color .2s ease}
.eq-group-card:hover{border-color:color-mix(in srgb,var(--amber) 40%,var(--line))}
.eq-group-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding-bottom:8px;border-bottom:1px solid var(--line)}
.eq-cat-select-wrap{display:flex;align-items:center;gap:8px;flex:1;min-width:0;flex-wrap:wrap}
.eq-group-cat-select,.eq-group-custom-cat{background:var(--card);border:1px solid var(--line);border-radius:8px;padding:7px 10px;color:var(--bone);font-size:13px;font-weight:600;outline:none;font-family:inherit}
.eq-group-cat-select:focus,.eq-group-custom-cat:focus{border-color:var(--amber)}
.eq-group-cat-select{flex:1;max-width:280px;min-width:180px}
.eq-group-custom-cat{flex:1;min-width:150px}
.btn-del-eq-group{width:26px;height:26px;border-radius:6px;background:none;border:1px solid var(--line);color:var(--danger);font-size:16px;cursor:pointer;display:grid;place-items:center;transition:background .15s}
.btn-del-eq-group:hover{background:rgba(255,92,92,.12);border-color:var(--danger)}
.eq-items-list{display:flex;flex-direction:column;gap:6px}
.eq-item-row{display:flex;align-items:center;gap:8px}
.eq-item-bullet{color:var(--amber);font-size:14px;flex:none}
.eq-item-input{flex:1;min-width:0;background:var(--card);border:1px solid var(--line);border-radius:8px;padding:7px 10px;color:var(--bone);font-size:13px;outline:none}
.eq-item-input:focus{border-color:var(--amber)}
.btn-del-eq-item{width:24px;height:24px;border-radius:6px;background:none;border:1px solid transparent;color:var(--bone-dim);font-size:15px;cursor:pointer;display:grid;place-items:center;transition:color .15s,background .15s}
.btn-del-eq-item:hover{color:var(--danger);background:rgba(255,92,92,.1);border-color:var(--line)}
.btn-add-item-to-group{align-self:flex-start;font-size:12px;font-weight:600;color:var(--amber);background:none;border:none;cursor:pointer;padding:4px 6px;border-radius:6px;transition:background .15s}
.btn-add-item-to-group:hover{background:rgba(255,138,0,.1)}
.eq-empty{padding:18px;text-align:center;color:var(--bone-dim);font-size:13px;border:1px dashed var(--line);border-radius:10px}

/* ---------- Calendario: wrap y línea de hora actual ---------- */
.cal-wrap{position:relative}
.cal-now{position:absolute;left:0;z-index:10;background:var(--danger);pointer-events:none;box-shadow:0 0 8px rgba(255,92,92,.6)}
.cal-now .now-label{position:absolute;left:6px;top:-10px;background:var(--danger);color:var(--card);font-size:10px;font-weight:800;font-family:var(--font-display);padding:2px 6px;border-radius:6px;white-space:nowrap;transform:none}

/* ---------- Responsive (consolidado en un solo bloque) ---------- */
@media(max-width:820px){.cat-grid{grid-template-columns:1fr}}
@media(max-width:680px){
  .edit-grid{grid-template-columns:1fr}
  .modal{max-height:calc(100vh - 24px);padding:0}
  .modal-foot{flex-wrap:wrap}
  .modal-foot .btn-save,.modal-foot .btn-ghost{flex:1}
}
@media(max-width:560px){
  .cat-card{flex-direction:column}
  .cat-tile{width:100%;height:80px;border-right:none;border-bottom:1px solid var(--line)}
  .cat-actions{flex-direction:row;border-left:none;border-top:1px solid var(--line)}
}
@media(max-width:420px){
  .notif-pop{width:calc(100vw - 28px);right:-8px}
  .cat-edit,.cat-del{padding:8px 10px;font-size:12px}
  .le-row{flex-wrap:wrap}
  .le-row .eq-short{flex:0 0 100%;max-width:none}
  .le-row .le-x{margin-left:auto}
}
/* ---------- Items de notificación (el prototipo usaba estas clases sin definirlas:
   el svg sin tamaño explotaba a 300x150 — el "recuadro negro gigante") ---------- */
.notif-item{flex-direction:row;align-items:flex-start;gap:10px}
.notif-ic{flex:0 0 30px;width:30px;height:30px;border-radius:9px;background:var(--card-2);border:1px solid var(--line);display:grid;place-items:center;color:var(--amber)}
.notif-ic svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.notif-body{min-width:0;flex:1;display:flex;flex-direction:column;gap:2px}
.notif-t{font-weight:600;font-size:13px;color:var(--bone)}
.notif-t b{color:var(--amber);font-weight:700}
.notif-s{font-size:12px;color:var(--bone-dim);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.notif-time{font-size:11px;color:var(--bone-faint)}

/* ---------- Campana de avisos (los dos paneles) ----------
   Compartida a propósito: el dueño y el músico ven la misma pieza con datos distintos.
   Duplicarla en cada panel era garantizar que se separaran a la primera corrección. */
.bell-wrap{position:relative;flex:none}
.bell-btn{position:relative;display:grid;place-items:center;width:38px;height:38px;border-radius:11px;border:1px solid var(--line);background:var(--card-2);color:var(--bone-dim);cursor:pointer;transition:.2s var(--glide)}
.bell-btn svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.bell-btn:hover{color:var(--amber);border-color:color-mix(in srgb,var(--amber) 45%,transparent)}
.bell-btn.on{color:var(--amber);border-color:var(--amber)}
/* Punto y no número: lo que importa es "hay algo nuevo", y un contador de dos dígitos
   obliga a agrandar el botón para algo que se resuelve abriendo el panel igual. */
.bell-dot{position:absolute;top:8px;right:9px;width:8px;height:8px;border-radius:50%;background:var(--amber);box-shadow:0 0 0 2px var(--card-2)}
.bell-dot[hidden]{display:none}

.bell-panel{position:absolute;top:calc(100% + 10px);right:0;width:min(360px,calc(100vw - 32px));z-index:80;border:1px solid var(--line);border-radius:14px;background:var(--card);box-shadow:0 18px 50px rgba(0,0,0,.45);overflow:hidden}
.bell-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 14px;border-bottom:1px solid var(--line);font-family:var(--font-display);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--bone-faint)}
.bell-all{border:none;background:none;color:var(--amber);font:inherit;font-size:11px;letter-spacing:.04em;cursor:pointer;padding:0}
.bell-all:hover{text-decoration:underline}
.bell-list{max-height:min(420px,60vh);overflow-y:auto}
.bell-item{display:block;width:100%;text-align:left;padding:12px 14px;border:none;border-bottom:1px solid var(--line);background:none;color:var(--bone-dim);font:inherit;cursor:pointer;transition:.15s var(--glide)}
.bell-item:last-child{border-bottom:none}
.bell-item:hover{background:var(--card-2)}
.bell-item.unread{background:color-mix(in srgb,var(--amber) 7%,transparent)}
.bell-item.unread .bell-title{color:var(--bone)}
.bell-title{display:block;font-size:13px;font-weight:600;color:var(--bone-dim);margin-bottom:3px}
/* pre-wrap: el cuerpo llega con saltos de línea reales desde el backend (fecha, teléfono,
   comprobante en renglones separados). */
.bell-body{display:block;font-size:12px;line-height:1.5;color:var(--bone-faint);white-space:pre-wrap;word-break:break-word}
.bell-when{display:block;margin-top:5px;font-family:var(--font-display);font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--bone-faint)}
.bell-empty{padding:26px 14px;text-align:center;font-size:13px;color:var(--bone-faint)}

/* ---------- Chat músico ↔ sala (los dos paneles) ----------
   Compartida, igual que la campana: misma pieza, datos distintos según la sesión. */
.chat-wrap{display:grid;grid-template-columns:minmax(200px,280px) 1fr;gap:0;border:1px solid var(--line);border-radius:14px;overflow:hidden;min-height:min(560px,70vh)}
.chat-lista{border-right:1px solid var(--line);background:var(--card-2);overflow-y:auto;max-height:min(560px,70vh)}
.chat-conv{display:flex;flex-direction:column;min-width:0;background:var(--card)}

.chat-hilo{position:relative;display:flex;flex-direction:column;gap:4px;width:100%;padding:13px 15px;border:none;border-bottom:1px solid var(--line);background:none;color:var(--bone-dim);font:inherit;text-align:left;cursor:pointer;transition:.15s var(--glide)}
.chat-hilo:hover{background:var(--card)}
.chat-hilo.activo{background:var(--card);box-shadow:inset 3px 0 0 var(--amber)}
.chat-hilo.sinleer .chat-hilo-quien{color:var(--bone)}
.chat-hilo-top{display:flex;align-items:baseline;justify-content:space-between;gap:8px}
.chat-hilo-quien{font-size:13px;font-weight:700;color:var(--bone-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.chat-hilo-hora{flex:none;font-family:var(--font-display);font-size:10px;color:var(--bone-faint)}
.chat-hilo-prev{font-size:12px;color:var(--bone-faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-right:22px}
.chat-hilo-badge{position:absolute;right:12px;bottom:12px;min-width:18px;height:18px;padding:0 5px;display:grid;place-items:center;border-radius:100px;background:var(--amber);color:var(--on-amber,#1a1a1d);font-family:var(--font-display);font-size:10px;font-weight:800}

.chat-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:13px 16px;border-bottom:1px solid var(--line)}
.chat-head-quien{font-family:var(--font-display);font-weight:800;font-size:14px;color:var(--bone)}
.chat-archivar{border:1px solid var(--line);background:none;border-radius:8px;padding:5px 11px;color:var(--bone-faint);font:inherit;font-size:11px;cursor:pointer}
.chat-archivar:hover{color:var(--amber);border-color:color-mix(in srgb,var(--amber) 45%,transparent)}

.chat-msgs{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:12px;min-height:200px}
.chat-msg{display:flex;flex-direction:column;gap:3px;max-width:78%}
.chat-msg.mio{align-self:flex-end;align-items:flex-end}
.chat-msg.suyo{align-self:flex-start}
/* El del sistema no es de nadie: centrado y sin cola, para que no se confunda con alguien
   que escribió eso. */
.chat-msg.sistema{align-self:center;max-width:92%;align-items:center}
.chat-burbuja{padding:10px 14px;border-radius:14px;font-size:13.5px;line-height:1.5;white-space:pre-wrap;word-break:break-word}
.chat-msg.suyo .chat-burbuja{background:var(--card-2);border:1px solid var(--line);color:var(--bone);border-bottom-left-radius:5px}
.chat-msg.mio .chat-burbuja{background:var(--amber);color:var(--on-amber,#1a1a1d);border-bottom-right-radius:5px}
.chat-msg.sistema .chat-burbuja{background:none;border:1px dashed var(--line);color:var(--bone-faint);font-size:12.5px;text-align:center}
.chat-meta{font-family:var(--font-display);font-size:10px;letter-spacing:.05em;color:var(--bone-faint)}

.chat-form{display:flex;gap:10px;padding:12px 14px;border-top:1px solid var(--line);align-items:flex-end}
.chat-input{flex:1;min-height:40px;max-height:120px;resize:vertical;padding:10px 12px;border-radius:10px;border:1px solid var(--line);background:var(--card-2);color:var(--bone);font:inherit;font-size:13.5px;line-height:1.45}
.chat-input:focus{outline:none;border-color:var(--amber)}
.chat-enviar{flex:none;height:40px;padding:0 18px;border-radius:10px;border:none;background:var(--amber);color:var(--on-amber,#1a1a1d);font-family:var(--font-display);font-weight:800;font-size:12px;cursor:pointer}
.chat-enviar:hover{filter:brightness(1.08)}
.chat-vacio{padding:30px 18px;text-align:center;font-size:13px;color:var(--bone-faint)}

@media(max-width:760px){
  /* En teléfono no entran las dos columnas: la bandeja arriba, acotada. */
  .chat-wrap{grid-template-columns:1fr}
  .chat-lista{border-right:none;border-bottom:1px solid var(--line);max-height:190px}
}
