:root {
  /* Colores de Kiwi House: azul marino del logo, marfil y un dorado suave para los iconos */
  --bg: #f3f1ec;
  --surface: #ffffff;
  --surface-2: #f2efe8;
  --text: #142231;
  --muted: #69737e;
  --border: #e3ded3;
  --brand: #1f4565;
  --brand-ink: #ffffff;
  --brand-soft: #e5ebf1;
  --gold: #b49a62;
  --side-bg: linear-gradient(180deg, #173550 0%, #1f4566 100%);
  --side-text: rgba(244, 241, 234, .78);
  --side-icon: #d6c69c;
  --warn: #9a5b00;
  --warn-soft: #fbefd9;
  --danger: #a8261f;
  --danger-soft: #f9e3e1;
  --ok: #2c6e3f;
  --ok-soft: #e2f0e6;
  --radius: 12px;
  --shadow: 0 1px 0 rgba(255,255,255,.9) inset, 0 1px 2px rgba(14,34,51,.06), 0 10px 28px -12px rgba(14,34,51,.22);
  --shadow-hover: 0 1px 0 rgba(255,255,255,.9) inset, 0 2px 4px rgba(14,34,51,.08), 0 18px 36px -14px rgba(14,34,51,.32);
  --card-bg: linear-gradient(180deg, #ffffff 0%, #fbfaf7 100%);
  --serif: "Iowan Old Style", "Palatino Linotype", Palatino, "Book Antiqua", Georgia, serif;
  color-scheme: light;
}
@media (prefers-color-scheme: dark) {
  :root {
    --bg: #0a131c; --surface: #112030; --surface-2: #162a3d; --text: #ece8df; --muted: #9aa7b3;
    --border: #213649; --brand: #a9c4dc; --brand-ink: #0a131c; --brand-soft: #1a3248; --gold: #d6c69c;
    --side-bg: linear-gradient(180deg, #08111a 0%, #0e2233 100%);
    --warn: #f0b552; --warn-soft: #3a2c12; --danger: #f2877f; --danger-soft: #3b1c1a;
    --ok: #7fcf83; --ok-soft: #1b3320;
    --shadow: 0 1px 0 rgba(255,255,255,.04) inset, 0 1px 2px rgba(0,0,0,.3), 0 12px 28px -12px rgba(0,0,0,.6);
    --shadow-hover: 0 1px 0 rgba(255,255,255,.06) inset, 0 2px 4px rgba(0,0,0,.35), 0 18px 36px -14px rgba(0,0,0,.7);
    --card-bg: linear-gradient(180deg, #132436 0%, #101e2d 100%);
    color-scheme: dark;
  }
}
* { box-sizing: border-box; }
html, body { margin: 0; }
body {
  font: 15px/1.45 system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  background: var(--bg); color: var(--text);
}
a { color: var(--brand); }
h1 { font-size: 1.4rem; margin: 0 0 1rem; }
h2 { font-size: 1.1rem; margin: 1.5rem 0 .6rem; }
h3 { font-size: 1rem; margin: 0 0 .5rem; }

/* Layout */
.shell { display: grid; grid-template-columns: 220px 1fr; min-height: 100vh; }
.side { background: var(--surface); border-right: 1px solid var(--border); padding: 1rem .75rem; position: sticky; top: 0; height: 100vh; overflow-y: auto; }
.logo { font-weight: 700; font-size: 1.15rem; padding: .25rem .5rem 1rem; display: flex; gap: .4rem; align-items: center; }
.nav a { display: flex; align-items: center; gap: .6rem; padding: .55rem .65rem; border-radius: 8px; color: var(--text); text-decoration: none; margin-bottom: 2px; }
.nav a:hover { background: var(--surface-2); }
.nav a.active { background: var(--brand-soft); color: var(--brand); font-weight: 600; }
.side-foot { margin-top: 1.5rem; padding: .5rem; color: var(--muted); font-size: .85rem; }
main { padding: 1.5rem 2rem 4rem; max-width: 1280px; width: 100%; min-width: 0; }
.topbar { display: none; }

@media (max-width: 820px) {
  .shell { grid-template-columns: 1fr; }
  .side { display: none; }
  .shell.menu-open .side { display: block; position: fixed; inset: 0 30% 0 0; z-index: 30; height: 100vh; box-shadow: var(--shadow); }
  .topbar { display: flex; align-items: center; justify-content: space-between; padding: .6rem 16px; background: var(--surface); border-bottom: 1px solid var(--border); position: sticky; top: 0; z-index: 20; }
  main { padding: 1rem 16px 4rem; }
}

/* Componentes */
.card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); padding: 1rem; box-shadow: var(--shadow); }
.grid { display: grid; gap: 1rem; }
.kpis { grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); }
.two { grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); }
.kpi .label { color: var(--muted); font-size: .85rem; }
.kpi .value { font-size: 1.6rem; font-weight: 700; font-variant-numeric: tabular-nums; }
.row { display: flex; gap: .5rem; align-items: center; flex-wrap: wrap; }
.spread { justify-content: space-between; }
.muted { color: var(--muted); }
.small { font-size: .85rem; }
.num { font-variant-numeric: tabular-nums; text-align: right; }

button, .btn {
  font: inherit; border: 1px solid var(--border); background: var(--surface); color: var(--text);
  padding: .45rem .85rem; border-radius: 8px; cursor: pointer; text-decoration: none; display: inline-flex; align-items: center; gap: .35rem;
}
button:hover, .btn:hover { background: var(--surface-2); }
button.primary, .btn.primary { background: var(--brand); color: var(--brand-ink); border-color: var(--brand); font-weight: 600; }
button.primary:hover { filter: brightness(1.05); }
button.danger { color: var(--danger); }
button.ghost { border-color: transparent; background: transparent; }
button.sm { padding: .2rem .55rem; font-size: .85rem; }
button:disabled { opacity: .5; cursor: default; }

input, select, textarea {
  font: inherit; color: var(--text); background: var(--surface); border: 1px solid var(--border);
  border-radius: 8px; padding: .45rem .6rem; width: 100%; min-width: 0;
}
textarea { min-height: 80px; resize: vertical; }
label { display: block; font-size: .85rem; color: var(--muted); margin-bottom: .6rem; }
label > input, label > select, label > textarea { margin-top: .2rem; }
.form-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 0 1rem; }
.toolbar { display: flex; gap: .5rem; flex-wrap: wrap; margin-bottom: 1rem; align-items: center; }
.toolbar input, .toolbar select { width: auto; }
.toolbar .grow { flex: 1; min-width: 160px; }

.table-wrap { overflow-x: auto; }
table { width: 100%; border-collapse: collapse; background: var(--surface); }
th, td { text-align: left; padding: .55rem .6rem; border-bottom: 1px solid var(--border); vertical-align: top; }
th { font-size: .8rem; color: var(--muted); font-weight: 600; text-transform: uppercase; letter-spacing: .02em; }
tr.clickable { cursor: pointer; }
tr.clickable:hover td { background: var(--surface-2); }

.badge { display: inline-block; padding: .1rem .5rem; border-radius: 999px; font-size: .78rem; background: var(--surface-2); color: var(--muted); white-space: nowrap; }
.badge.ok { background: var(--ok-soft); color: var(--ok); }
.badge.warn { background: var(--warn-soft); color: var(--warn); }
.badge.danger { background: var(--danger-soft); color: var(--danger); }
.badge.brand { background: var(--brand-soft); color: var(--brand); }

.tabs { display: flex; gap: .25rem; border-bottom: 1px solid var(--border); margin-bottom: 1rem; overflow-x: auto; }
.tabs button { border: none; border-bottom: 2px solid transparent; border-radius: 0; background: none; padding: .6rem .8rem; color: var(--muted); white-space: nowrap; }
.tabs button.active { color: var(--brand); border-bottom-color: var(--brand); font-weight: 600; }

/* Kanban */
.kanban { display: grid; grid-template-columns: repeat(6, minmax(165px, 1fr)); gap: .75rem; overflow-x: auto; padding-bottom: .5rem; }
.col { background: var(--surface-2); border-radius: var(--radius); padding: .6rem; min-height: 200px; }
.col h3 { font-size: .85rem; text-transform: uppercase; color: var(--muted); display: flex; justify-content: space-between; }
.col.drop { outline: 2px dashed var(--brand); }
.lead-card { background: var(--surface); border: 1px solid var(--border); border-radius: 8px; padding: .6rem; margin-bottom: .5rem; cursor: pointer; }
.lead-card:hover { border-color: var(--brand); }
/* Tarjeta del embudo: como mucho 3 líneas (nombre, resumen y etiquetas), cada una cortada con «…» si no cabe. */
.lead-card .name, .lead-card .sum { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.lead-card .name { font-weight: 600; }
.lead-card .meta { font-size: .8rem; color: var(--muted); margin-top: .25rem; display: flex; gap: .35rem; flex-wrap: nowrap; overflow: hidden; white-space: nowrap; }

/* Tareas de limpieza */
.day { margin-bottom: 1.25rem; }
.day > h3 { position: sticky; top: 0; background: var(--bg); padding: .4rem 0; }
.day > h3::first-letter { text-transform: uppercase; }
.task { display: grid; grid-template-columns: 70px 1fr auto; gap: .75rem; align-items: start; background: var(--surface); border: 1px solid var(--border); border-left: 4px solid var(--border); border-radius: 8px; padding: .7rem; margin-bottom: .5rem; }
.task.urgent { border-left-color: var(--danger); }
.task.tight { border-left-color: var(--warn); }
.task.done { opacity: .6; }
.task .time { font-weight: 700; font-variant-numeric: tabular-nums; }
.task .actions { display: flex; flex-direction: column; gap: .3rem; align-items: stretch; }
@media (max-width: 600px) { .task { grid-template-columns: 1fr; } .task .actions { flex-direction: row; flex-wrap: wrap; } }

/* Semana de limpiezas */
.week { display: grid; grid-template-columns: repeat(7, minmax(130px, 1fr)); gap: .5rem; overflow-x: auto; padding-bottom: .5rem; }
.week-day { background: var(--surface-2); border-radius: var(--radius); padding: .5rem; min-height: 160px; }
.week-day.today { outline: 2px solid var(--brand); }
.week-day > h3 { font-size: .85rem; color: var(--muted); }
.week-day > h3::first-letter { text-transform: uppercase; }
.week-task { background: var(--surface); border: 1px solid var(--border); border-radius: 8px; padding: .5rem; margin-bottom: .4rem; cursor: pointer; font-size: .9rem; }
.week-task:hover { border-color: var(--brand); }
.week-task.done { opacity: .55; }
@media (max-width: 820px) { .week { grid-template-columns: 1fr; } .week-day { min-height: 0; } }

/* Pedidos de productos */
.order { margin-bottom: .75rem; }
.order-items { margin: .5rem 0; padding-left: 1.2rem; }
.order-items li { margin: .15rem 0; }
.chips { display: flex; flex-wrap: wrap; gap: .3rem; margin: -.2rem 0 .8rem; }
.chip-wrap { display: inline-flex; align-items: center; }
.chip-wrap .chip-x { padding: .2rem .35rem; margin-left: -.15rem; color: var(--muted); }
.btn.sm { padding: .2rem .55rem; font-size: .85rem; }
label.check { display: flex; align-items: center; gap: .5rem; color: var(--text); font-size: .9rem; }
label.check input { width: 18px; height: 18px; margin: 0; }

/* Importación de LinkedIn */
.li-list { max-height: 50vh; overflow-y: auto; border-top: 1px solid var(--border); }
.li-item { display: flex; gap: .6rem; align-items: flex-start; padding: .55rem 0; border-bottom: 1px solid var(--border); color: var(--text); font-size: .9rem; margin: 0; cursor: pointer; }
.li-item input { width: 18px; height: 18px; margin-top: .15rem; flex: none; }

.check-item { display: flex; align-items: center; gap: .6rem; padding: .55rem 0; border-bottom: 1px solid var(--border); }
.check-item input[type=checkbox] { width: 20px; height: 20px; }
.check-item.bought .txt { text-decoration: line-through; color: var(--muted); }

/* Portal */
.unit { display: flex; justify-content: space-between; gap: .5rem; padding: .45rem 0; border-bottom: 1px solid var(--border); }
.unit:last-child { border-bottom: 0; }
.bar { height: 8px; background: var(--surface-2); border-radius: 99px; overflow: hidden; }
.bar > span { display: block; height: 100%; background: var(--brand); }

/* Modal */
.modal-bg { position: fixed; inset: 0; background: rgba(0,0,0,.4); display: flex; align-items: flex-start; justify-content: center; padding: 5vh 16px; z-index: 50; overflow-y: auto; }
.modal { background: var(--surface); border-radius: var(--radius); width: 100%; max-width: 640px; padding: 1.25rem; box-shadow: 0 10px 40px rgba(0,0,0,.25); }
.modal-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1rem; }
.modal-head h2 { margin: 0; }
.modal-foot { display: flex; justify-content: flex-end; gap: .5rem; margin-top: 1rem; }
.note { border-left: 3px solid var(--border); padding: .3rem .7rem; margin: .5rem 0; }
.note .when { font-size: .78rem; color: var(--muted); }

#toast { position: fixed; bottom: 20px; left: 50%; transform: translateX(-50%); background: var(--text); color: var(--bg); padding: .6rem 1rem; border-radius: 8px; opacity: 0; transition: opacity .2s; pointer-events: none; z-index: 60; max-width: calc(100% - 32px); }
#toast.show { opacity: 1; }

.login { min-height: 100vh; display: grid; place-items: center; padding: 16px; }
.login .card { width: 100%; max-width: 360px; }
.empty { padding: 2rem; text-align: center; color: var(--muted); }
pre.code { background: var(--surface-2); padding: .75rem; border-radius: 8px; overflow-x: auto; font-size: .8rem; white-space: pre-wrap; word-break: break-all; }
[hidden] { display: none !important; }

/* Bandeja de WhatsApp */
.nav a .count { margin-left: auto; background: var(--brand); color: var(--brand-ink); border-radius: 999px; font-size: .72rem; font-weight: 700; padding: .05rem .45rem; }
.inbox { display: grid; grid-template-columns: minmax(240px, 340px) 1fr; gap: 1rem; margin-top: .75rem; align-items: start; }
.inbox-list { padding: .25rem; max-height: calc(100vh - 150px); overflow-y: auto; }
.inbox-row { display: flex; flex-direction: column; gap: .2rem; width: 100%; text-align: left; padding: .6rem; border: 0; border-radius: 8px; background: none; color: var(--text); cursor: pointer; align-items: stretch; justify-content: flex-start; }
.inbox-row > span { width: 100%; text-align: left; }
.inbox-row:hover { background: var(--surface-2); }
.inbox-row.active { background: var(--brand-soft); }
.inbox-chat { display: flex; flex-direction: column; gap: .5rem; min-height: 420px; }
.chat-head { border-bottom: 1px solid var(--border); padding-bottom: .5rem; align-items: flex-start; }
.chat-msgs { display: flex; flex-direction: column; gap: .35rem; max-height: calc(100vh - 330px); min-height: 200px; overflow-y: auto; padding: .25rem; }
.msg { max-width: 78%; padding: .45rem .65rem; border-radius: 12px; font-size: .92rem; line-height: 1.35; overflow-wrap: anywhere; background: var(--surface-2); align-self: flex-start; }
.msg.out { background: var(--brand-soft); align-self: flex-end; }
.msg.note { background: var(--warn-soft); align-self: flex-end; }
.msg.system { background: none; color: var(--muted); font-size: .8rem; align-self: center; }
.msg-time { display: block; font-size: .7rem; color: var(--muted); margin-top: .15rem; text-align: right; }
.chat-form { display: flex; gap: .5rem; align-items: flex-end; }
.chat-form textarea { flex: 1; margin: 0; }
.tpl-form { flex-direction: column; align-items: stretch; }
.tpl-preview { max-width: 100%; align-self: stretch; }
@media (max-width: 820px) {
  .inbox { grid-template-columns: 1fr; }
  .inbox-list { max-height: 40vh; }
  .chat-msgs { max-height: 55vh; }
  .msg { max-width: 90%; }
}

/* Social */
.ig-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: .75rem; margin-top: 1rem; }
.ig-post { display: flex; flex-direction: column; gap: .3rem; padding: .5rem; text-decoration: none; color: var(--text); }
.ig-post img { width: 100%; aspect-ratio: 1; object-fit: cover; border-radius: 8px; background: var(--surface-2); }
.card.clickable { cursor: pointer; }
.card.clickable:hover { border-color: var(--brand); }

/* ---------- Estilo Kiwi House: más elegante y con profundidad ---------- */
body { background: radial-gradient(1200px 600px at 100% -10%, rgba(180,154,98,.10), transparent 60%), var(--bg); background-attachment: fixed; }
h1 { font-family: var(--serif); font-weight: 600; font-size: 1.75rem; letter-spacing: .01em; }
h2, h3 { letter-spacing: .01em; }

/* Barra lateral azul marino */
.side { background: var(--side-bg); border-right: 0; box-shadow: 4px 0 24px -8px rgba(14,34,51,.45); color: var(--side-text); padding: 1.25rem .85rem; }
.logo { padding: .25rem .4rem 1.4rem; gap: .7rem; border-bottom: 1px solid rgba(255,255,255,.08); margin-bottom: 1rem; }
.logo .brand-logo { width: 46px; height: 46px; box-shadow: 0 0 0 1px rgba(214,198,156,.35), 0 6px 16px rgba(0,0,0,.35); }
.logo strong { display: block; font-family: var(--serif); font-weight: 600; font-size: 1.05rem; color: #f4f1ea; letter-spacing: .04em; }
.logo span { display: block; font-size: .72rem; letter-spacing: .28em; text-transform: uppercase; color: var(--side-icon); }
.brand-logo { border-radius: 50%; display: block; }
.nav a { color: var(--side-text); padding: .6rem .7rem; gap: .75rem; border-radius: 10px; font-size: .93rem; letter-spacing: .01em; transition: background .15s, color .15s, transform .15s; }
.nav a .ico { width: 19px; height: 19px; flex: none; color: var(--side-icon); opacity: .9; }
.nav a:hover { background: rgba(255,255,255,.06); color: #fff; }
.nav a.active { background: linear-gradient(180deg, rgba(255,255,255,.13), rgba(255,255,255,.06)); color: #fff; font-weight: 600;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.12), 0 6px 14px -6px rgba(0,0,0,.5); position: relative; }
.nav a.active::before { content: ""; position: absolute; left: -.85rem; top: 22%; bottom: 22%; width: 3px; border-radius: 0 3px 3px 0; background: var(--side-icon); }
.nav a.active .ico { opacity: 1; }
.nav a .count { background: var(--side-icon); color: #0e2233; }
.side-foot { color: rgba(244,241,234,.55); border-top: 1px solid rgba(255,255,255,.08); padding-top: 1rem; }
.side-foot button { background: rgba(255,255,255,.06); border-color: rgba(255,255,255,.12); color: #f4f1ea; }
.side-foot button:hover { background: rgba(255,255,255,.12); }

/* Barra superior del móvil */
@media (max-width: 820px) {
  .topbar { background: var(--side-bg); color: #f4f1ea; border-bottom: 0; box-shadow: 0 4px 16px -6px rgba(14,34,51,.5); }
  .topbar button { color: #f4f1ea; }
  .topbar-brand { display: flex; align-items: center; gap: .5rem; font-family: var(--serif); font-weight: 600; letter-spacing: .03em; }
  .topbar-brand .brand-logo { width: 30px; height: 30px; }
  .shell.menu-open .side { box-shadow: 8px 0 32px rgba(0,0,0,.45); }
}

/* Tarjetas con relieve */
.card { background: var(--card-bg); border-color: var(--border); box-shadow: var(--shadow); }
.card.clickable, .lead-card, .week-task, .inbox-row { transition: transform .15s ease, box-shadow .15s ease, border-color .15s; }
.card.clickable:hover, .lead-card:hover, .week-task:hover { transform: translateY(-2px); box-shadow: var(--shadow-hover); }
.lead-card, .week-task, .task { background: var(--card-bg); box-shadow: 0 1px 2px rgba(14,34,51,.06), 0 4px 12px -6px rgba(14,34,51,.16); }
.kpi { position: relative; overflow: hidden; }
.kpi::after { content: ""; position: absolute; inset: 0 0 auto 0; height: 3px; background: linear-gradient(90deg, var(--brand), var(--gold)); opacity: .85; }
.kpi .label { text-transform: uppercase; letter-spacing: .08em; font-size: .72rem; }
.kpi .value { font-family: var(--serif); font-weight: 600; font-size: 1.85rem; color: var(--brand); }
.col, .week-day { background: linear-gradient(180deg, var(--surface-2), transparent 140%); box-shadow: inset 0 1px 2px rgba(14,34,51,.05); }
.modal { box-shadow: 0 30px 80px -20px rgba(14,34,51,.55), 0 0 0 1px rgba(14,34,51,.06); border-radius: 16px; }
table { background: transparent; }
th { color: var(--muted); letter-spacing: .08em; font-size: .72rem; }

/* Botones con volumen */
button, .btn { background: linear-gradient(180deg, var(--surface), var(--surface-2)); box-shadow: 0 1px 0 rgba(255,255,255,.8) inset, 0 1px 2px rgba(14,34,51,.08);
  transition: transform .1s, box-shadow .15s, filter .15s; }
button:hover, .btn:hover { box-shadow: 0 1px 0 rgba(255,255,255,.8) inset, 0 4px 10px -4px rgba(14,34,51,.25); }
button:active, .btn:active { transform: translateY(1px); box-shadow: inset 0 1px 3px rgba(14,34,51,.2); }
button.primary, .btn.primary { background: linear-gradient(180deg, #24496a 0%, var(--brand) 55%, #0e2233 100%); border-color: #0e2233;
  box-shadow: 0 1px 0 rgba(255,255,255,.18) inset, 0 6px 14px -6px rgba(14,34,51,.6); letter-spacing: .01em; }
button.primary:hover, .btn.primary:hover { filter: brightness(1.08); }
button.ghost, .tabs button { background: transparent; box-shadow: none; }
.tabs button.active { color: var(--brand); border-bottom-color: var(--gold); }
input, select, textarea { box-shadow: inset 0 1px 2px rgba(14,34,51,.06); transition: border-color .15s, box-shadow .15s; }
input:focus, select:focus, textarea:focus { outline: none; border-color: var(--gold); box-shadow: inset 0 1px 2px rgba(14,34,51,.06), 0 0 0 3px rgba(180,154,98,.22); }

/* Entrada */
.login { background: var(--side-bg); }
.login .card { box-shadow: 0 30px 80px -20px rgba(0,0,0,.6); border: 0; }
.login-brand { display: flex; flex-direction: column; align-items: center; gap: .6rem; margin-bottom: 1rem; }
.login-brand img { width: 96px; height: 96px; border-radius: 50%; box-shadow: 0 10px 24px -8px rgba(14,34,51,.6); }
.login-brand h1 { margin: 0; }
.login-note { background: var(--warn-soft); color: var(--warn); padding: .6rem .8rem; border-radius: 8px; }
.login .login-btn { width: 100%; justify-content: center; margin-top: .4rem; }
.login .login-google { display: flex; align-items: center; gap: .5rem; background: #fff; color: #1f1f1f; border: 1px solid #dadce0; text-decoration: none; font-weight: 600; margin: 0 0 .2rem; }
.login .login-google .muted { font-weight: 400; }
.login-or { display: flex; align-items: center; gap: .6rem; margin: .8rem 0 .4rem; color: var(--muted); font-size: .8rem; }
.login-or::before, .login-or::after { content: ''; flex: 1; border-top: 1px solid var(--border); }
.login .login-link { display: block; width: 100%; justify-content: center; text-align: center; margin-top: .6rem; font-size: .88rem; line-height: 1.35; white-space: normal; }

@media (prefers-color-scheme: dark) {
  button, .btn { box-shadow: 0 1px 0 rgba(255,255,255,.04) inset, 0 1px 2px rgba(0,0,0,.4); }
  button.primary, .btn.primary { background: linear-gradient(180deg, #c4d7e8, var(--brand)); border-color: var(--brand); }
}

/* Checkouts por mes */
details.month { margin-bottom: .75rem; padding: 0; overflow: hidden; }
details.month > summary { list-style: none; cursor: pointer; display: flex; align-items: center; gap: .6rem; padding: .85rem 1rem; }
details.month > summary::-webkit-details-marker { display: none; }
details.month > summary::before { content: "›"; font-size: 1.2rem; color: var(--gold); transition: transform .15s; }
details.month[open] > summary::before { transform: rotate(90deg); }
details.month[open] > summary { border-bottom: 1px solid var(--border); }
details.month .month-title { display: inline-block; font-family: var(--serif); font-weight: 600; font-size: 1.1rem; margin-right: auto; }
details.month .month-title::first-letter { text-transform: uppercase; }
details.month .table-wrap, details.month > p { padding: 0 .5rem .5rem; }

/* Logo arriba a la izquierda: el original de la marca, grande y centrado, con un aro dorado */
.side .logo { flex-direction: column; justify-content: center; gap: .55rem; padding: .5rem 0 1.25rem; text-decoration: none; }
.side .logo .brand-logo { width: 92px; height: 92px; object-fit: cover; transition: transform .25s ease, box-shadow .25s ease;
  box-shadow: 0 0 0 2px rgba(214,198,156,.55), 0 0 0 6px rgba(214,198,156,.10), 0 14px 30px -8px rgba(0,0,0,.65); }
.side .logo:hover .brand-logo { transform: translateY(-2px) scale(1.03);
  box-shadow: 0 0 0 2px rgba(214,198,156,.85), 0 0 0 8px rgba(214,198,156,.14), 0 18px 36px -8px rgba(0,0,0,.7); }
.side .logo .logo-tag { display: flex; align-items: center; gap: .55rem; font-size: .68rem; font-weight: 600; letter-spacing: .42em;
  padding-left: .42em; color: var(--side-icon); text-transform: uppercase; }
.side .logo .logo-tag::before, .side .logo .logo-tag::after { content: ""; width: 22px; height: 1px; background: linear-gradient(90deg, transparent, var(--side-icon)); }
.side .logo .logo-tag::after { background: linear-gradient(90deg, var(--side-icon), transparent); }

/* Historial de fianzas devueltas */
tr.refund-items > td { background: var(--surface-2); }
table.mini { margin: .25rem 0 .5rem; }
table.mini td { border-bottom: 0; padding: .2rem .5rem; }

/* Bandeja: pestañas Chats / Coliving / Proveedores encima de la lista */
.inbox-side { display: flex; flex-direction: column; min-width: 0; }
.inbox-tabs { margin-bottom: .5rem; }
.inbox-tabs button { flex: 1; font-size: .85rem; padding: .45rem .5rem; }
.group-row { cursor: default; }

/* Chats fijados arriba */
.inbox-row.pinned { background: linear-gradient(90deg, rgba(180,154,98,.12), transparent 70%); }
.inbox-row.pinned-last { border-bottom: 1px solid var(--border); border-radius: 8px 8px 0 0; margin-bottom: .35rem; padding-bottom: .7rem; }
.inbox-row .pin { font-size: .85em; }

/* Semana de limpiezas: tarjetas compactas, el estado por color */
.week-task { border-left: 3px solid var(--st, var(--border)); padding: .4rem .5rem; line-height: 1.3; }
.week-task .wt-time { display: flex; align-items: center; gap: .35rem; font-weight: 600; font-variant-numeric: tabular-nums; font-size: .85rem; }
.week-task .wt-prop { font-weight: 600; }
.week-task .wt-who { font-size: .82rem; color: var(--muted); }
.week-task .buy { font-size: .8em; }
.dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; background: var(--st, var(--muted)); flex: none; }
.st-pendiente { --st: #9aa3ad; }
.st-en_curso { --st: var(--gold); }
.st-hecha { --st: var(--ok); }
.st-incidencia { --st: var(--danger); }
.week-task.st-hecha { opacity: .6; }
.legend .dot { margin: 0 .15rem 0 .5rem; vertical-align: middle; }

/* Limpiezas › Por piso */
.prop-grid { grid-template-columns: repeat(auto-fill, minmax(340px, 1fr)); }
.prop-weekly { margin: .5rem 0; display: flex; flex-wrap: wrap; gap: .3rem; }
.prop-weekly .chip { background: var(--surface-2); border-radius: 999px; padding: .15rem .55rem; }
.prop-out { display: flex; justify-content: space-between; align-items: center; gap: .5rem; padding: .45rem .55rem; border-radius: 8px; margin-top: .35rem; border-left: 3px solid; }
.prop-out.is-unassigned { background: var(--warn-soft); border-color: var(--warn); }
.prop-out.is-assigned { background: var(--ok-soft); border-color: var(--ok); }
.prop-out select { width: auto; max-width: 48%; }
select.unassigned { border-color: var(--warn); }
select.assigned { border-color: var(--ok); }
@media (max-width: 600px) { .prop-out { flex-direction: column; align-items: stretch; } .prop-out select { max-width: none; } }

/* Tareas de Martín y Nicolás */
.wtask-cols { align-items: start; }
.wtask-cols section { display: flex; flex-direction: column; gap: .6rem; }
.wtask-new { display: flex; gap: .4rem; padding: .5rem; align-items: center; }
.wtask-new input[name=title] { flex: 1; }
.wtask { border-left: 3px solid var(--st, var(--border)); padding: .7rem .8rem; }
.wtask.st-hecha { opacity: .65; }
.wtask.st-hecha .wtask-title { text-decoration: line-through; }
.wtask-head { flex-wrap: nowrap; align-items: flex-start; }
.wtask-title { padding: 0; font-weight: 600; text-align: left; white-space: normal; box-shadow: none; flex: 1; justify-content: flex-start; }
.wtask-status { width: auto; font-size: .82rem; padding: .2rem .4rem; }
.wtask-body { margin-top: .6rem; border-top: 1px solid var(--border); padding-top: .5rem; }
.wcomment { background: var(--surface-2); border-radius: 8px; padding: .4rem .6rem; margin-bottom: .4rem; font-size: .9rem; }
.wcomment .sm { padding: 0 .3rem; float: right; }
.wcomment-form { display: flex; gap: .4rem; align-items: flex-end; }
.wcomment-form textarea { min-height: 0; margin: 0; }

/* Tareas › Calendario (Google Calendar, solo lectura) */
.task-views { margin-bottom: .5rem; }
.cal-title { text-transform: capitalize; }
.cal { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: .4rem; }
.cal-head { font-size: .72rem; text-transform: uppercase; letter-spacing: .08em; color: var(--muted); padding: 0 .3rem; }
.cal-day { background: var(--card-bg); border: 1px solid var(--border); border-radius: 10px; padding: .4rem; min-height: 110px; box-shadow: var(--shadow); overflow: hidden; }
.cal-semana .cal-day { min-height: 320px; }
.cal-day.today { outline: 2px solid var(--gold); }
.cal-day.out { opacity: .45; }
.cal-date { font-size: .8rem; font-weight: 600; color: var(--muted); margin-bottom: .3rem; }
.cal-date::first-letter { text-transform: uppercase; }
.cal-ev { display: block; font-size: .78rem; line-height: 1.25; padding: .2rem .35rem; margin-bottom: .2rem; border-radius: 6px; text-decoration: none; color: var(--text);
  background: color-mix(in srgb, var(--ev, #17344d) 14%, transparent); border-left: 3px solid var(--ev, #17344d); overflow: hidden; text-overflow: ellipsis; }
.cal-mes .cal-ev { white-space: nowrap; }
.cal-time { font-weight: 600; font-variant-numeric: tabular-nums; }
.cal-task { --ev: var(--gold); }
.cal-key { display: inline-block; width: 9px; height: 9px; border-radius: 3px; background: var(--ev); margin: 0 .25rem 0 .4rem; }
@media (max-width: 820px) { .cal-semana { grid-template-columns: 1fr; } .cal-semana .cal-day { min-height: 0; } }

/* Tareas › Habitaciones (disponibilidad) */
.avail-wrap { max-height: calc(100vh - 230px); }
table.avail { border-collapse: separate; border-spacing: 2px; font-size: .75rem; }
table.avail th { text-align: center; padding: .15rem; font-weight: 600; min-width: 26px; position: sticky; top: 0; background: var(--bg); z-index: 1; }
table.avail th span { display: block; font-weight: 400; color: var(--muted); }
table.avail th.we { color: var(--gold); }
table.avail th.today { background: var(--brand-soft); border-radius: 6px; }
table.avail td { padding: 0; border: 0; height: 24px; }
.avail-room { position: sticky; left: 0; background: var(--bg); white-space: nowrap; padding: 0 .5rem 0 0 !important; font-weight: 600; z-index: 2; text-align: left !important; }
tr.avail-prop td { font-family: var(--serif); font-weight: 600; font-size: .9rem; padding: .5rem 0 .1rem !important; color: var(--brand); position: sticky; left: 0; }
td.cell { border-radius: 4px; text-align: left; overflow: hidden; white-space: nowrap; max-width: 26px; font-size: .68rem; color: #fff; padding-left: 2px !important; }
td.cell.free, .key.free { background: var(--ok-soft); }
td.cell.busy, .key.busy { background: var(--brand); }
td.cell.blocked, .key.blocked { background: repeating-linear-gradient(45deg, #9aa3ad, #9aa3ad 4px, #c3c9cf 4px, #c3c9cf 8px); }
.legend .key { display: inline-block; width: 12px; height: 12px; border-radius: 3px; vertical-align: middle; margin: 0 .2rem 0 .5rem; border: 1px solid var(--border); }
.wtask-src { margin: .3rem 0; line-height: 1.35; }
.wtask-src a.badge { text-decoration: none; }
.chat-kind { width: auto; font-size: .82rem; padding: .2rem .4rem; }
.inbox-groups-head { padding: .7rem .5rem .3rem; border-top: 1px solid var(--border); margin-top: .5rem; }
.inbox-tabs { flex-wrap: wrap; }

.task-cats { margin: .2rem 0 1rem; }
.wtask-cat { cursor: pointer; border: 0; font: inherit; }

.inbox-sub { font-size: .72rem; text-transform: uppercase; letter-spacing: .06em; color: var(--muted); padding: .6rem .5rem .2rem; font-weight: 600; }
#id-form .chips button { margin: 0; }

.bp-table .bp-prop td { background: var(--surface-2); padding-top: .7rem; }
.bp-table .bp-prop .badge { margin-left: .4rem; }
.bp-table tr.is-unassigned td:first-child { color: #b45309; }
.bp-table select { min-width: 160px; }

.inbox-bulk { display: flex; gap: .4rem; align-items: center; padding: .5rem; position: sticky; top: 0; background: var(--surface); z-index: 1; }
.inbox-bulk select { flex: 1; }
.bulk-list { max-height: 220px; overflow: auto; margin: .4rem 0; }

.inbox-stay { padding: .5rem .5rem 0; margin: 0; }


/* Limpiezas › Semana: calendario con horas y limpiezas que se arrastran de día u hora */
.wk-scroll { overflow-x: auto; padding-bottom: .5rem; }
.wk { display: grid; grid-template-columns: 40px repeat(7, minmax(88px, 1fr)); gap: 0 .25rem; min-width: 680px; }
.wk-head { padding: .25rem .25rem .5rem; }
.wk-head h3 { font-size: .85rem; color: var(--muted); margin: 0 0 .25rem; }
.wk-head h3::first-letter { text-transform: uppercase; }
.wk-head.today h3 { color: var(--brand); }
.wk-untimed .week-task { margin-bottom: .25rem; }
.wk-gutter { position: relative; }
.wk-gutter span { position: absolute; right: 4px; transform: translateY(-50%); font-size: .7rem; color: var(--muted); }
.wk-gutter span:first-child { transform: none; }
.wk-col { position: relative; background: var(--surface-2); border-radius: var(--radius); }
.wk-col.today { outline: 2px solid var(--brand); }
.wk-col.drop { outline: 2px dashed var(--brand); }
.wk-line { position: absolute; left: 0; right: 0; border-top: 1px solid var(--border); opacity: .6; }
.wk-pos { position: absolute; }
.wk-pos .week-task { height: 100%; margin: 0; overflow: hidden; padding: .3rem .4rem; font-size: .8rem; line-height: 1.25; }
.week-task.draggable { touch-action: pan-x pan-y; user-select: none; -webkit-user-select: none; -webkit-touch-callout: none; }
.week-task.wk-moving { opacity: .35; }
.wk-ghost { position: fixed; z-index: 1000; pointer-events: none; opacity: .92; box-shadow: 0 8px 24px rgba(0,0,0,.25); cursor: grabbing; font-size: .8rem; }
@media (max-width: 820px) { .wk { min-width: 760px; grid-template-columns: 40px repeat(7, minmax(100px, 1fr)); } }

/* Checkouts › Entradas y salidas: tarjetas Todos / Check-ins / Check-outs, filtros y un bloque por día */
.ops-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: .5rem; margin: .75rem 0; }
.ops-card { display: flex; justify-content: space-between; align-items: center; gap: .5rem; padding: .7rem .9rem; border: 1px solid var(--border);
  border-radius: var(--radius); background: var(--surface); text-align: left; font-weight: 600; }
.ops-card.active { border-color: var(--brand); background: var(--brand-soft); }
.ops-card .muted { font-weight: 400; font-size: .85rem; }
.ops-filters { flex-wrap: wrap; align-items: center; gap: .5rem; }
.ops-ranges { margin: 0; border: 0; flex-wrap: wrap; }
.ops-dates input { width: auto; }
.ops-day { margin-bottom: 1rem; }
.ops-type { font-weight: 600; white-space: nowrap; font-size: .85rem; }
/* Cambios de checkout en Vivin sin avisar: en rojo fuerte, en Check-in/out y en Limpiezas */
.nav a .count.alert, .bubble { background: var(--danger); color: #fff; }
.bubble { display: inline-block; min-width: 1.3rem; border-radius: 999px; padding: .05rem .45rem; font-size: .72rem; font-weight: 700; text-align: center; vertical-align: middle; }
.ops-card.alert { border-color: var(--danger); background: var(--danger-soft); color: var(--danger); }
tr.change-alert td, .xt tr.change-alert td { background: var(--danger-soft); }
tr.change-alert td:first-child { box-shadow: inset 4px 0 0 var(--danger); }
/* Check-in hecho: verde = acaba de entrar (sin ver); amarillo = debería haber entrado y no consta */
.nav a .count.ok { background: var(--ok); color: #0e2a14; margin-left: .25rem; }
.nav a .count.warn { background: var(--warn); color: #2e2208; margin-left: .25rem; }
tr.entered-new td { background: var(--ok-soft); }
tr.entered-new td:first-child { box-shadow: inset 4px 0 0 var(--ok); }
tr.late-alert td { background: var(--warn-soft); }
tr.late-alert td:first-child { box-shadow: inset 4px 0 0 var(--warn); }
.change-note { display: block; margin-top: .25rem; padding: .3rem .5rem; border-radius: 6px; background: var(--danger); color: #fff; font-weight: 600; font-size: .8rem; }
.task.change-alert { border-left-color: var(--danger); background: var(--danger-soft); }
.week-task.change-alert { outline: 3px solid var(--danger); outline-offset: -1px; }
.change-banner { border: 2px solid var(--danger); background: var(--danger-soft); color: var(--danger); font-weight: 600; }
.ops-type.in { color: var(--ok, #2e9e6a); }
.ops-type.out { color: var(--warn, #c98a1b); }
@media (max-width: 820px) {
  .ops-cards { grid-template-columns: 1fr 1fr; }
  .ops-card { flex-direction: column; align-items: flex-start; padding: .55rem .6rem; font-size: .85rem; }
  .ops-hide-sm { display: none; }
}

/* Facturación › Bancos y extractos */
.bank-grid { grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 1rem; }
.bank-missing { color: var(--danger); }
.mv-in { color: var(--ok); }
.bk-cards { grid-template-columns: repeat(4, 1fr); }
@media (max-width: 700px) { .bk-cards { grid-template-columns: 1fr 1fr; } }

table.ledger td, table.ledger th { white-space: nowrap; }
@media (max-width: 700px) { #lg-cards { grid-template-columns: 1fr 1fr !important; } }
.fin-nav { flex-wrap: wrap; gap: .25rem; margin: .25rem 0 .75rem; position: sticky; top: 0; z-index: 5; background: var(--bg); padding: .35rem 0; }
.fin-sec { margin-bottom: 1rem; border: 1px solid var(--border); border-radius: 12px; padding: .25rem 1rem .75rem; background: var(--surface); }
.fin-sec > summary { cursor: pointer; list-style: none; padding: .5rem 0; }
.fin-sec > summary::-webkit-details-marker { display: none; }
.fin-sec > summary h2 { display: inline; margin: 0; font-size: 1.1rem; }
.fin-sec > summary::after { content: '▾'; float: right; color: var(--muted); }
.fin-sec:not([open]) > summary::after { content: '▸'; }
.rp-layout { display: grid; grid-template-columns: minmax(0, 1fr) 300px; gap: 1rem; align-items: start; }
.rp-side { position: sticky; top: 3.5rem; display: grid; gap: .75rem; }
.rp-side .card { margin: 0; }
.rp-field { background: var(--surface-2); border-radius: 8px; padding: .4rem .6rem; margin: .15rem 0 .5rem; }
.rp-total { display: flex; justify-content: space-between; align-items: baseline; margin: .75rem 0 .5rem; font-weight: 600; }
.rp-total strong { font-size: 1.35rem; }
.rp-line { padding: .2rem 0; }
.rp-balance { display: flex; justify-content: space-between; align-items: center; background: var(--brand-soft); border-radius: 10px; padding: .6rem .75rem; margin: .5rem 0; font-weight: 600; }
.rp-balance strong { font-size: 1.3rem; }
.rp-mini { display: flex; justify-content: space-between; align-items: center; gap: .5rem; }
.rp-mini strong { font-size: 1.15rem; }
.multi { position: relative; }
.multi > summary { cursor: pointer; list-style: none; border: 1px solid var(--border); border-radius: 8px; padding: .45rem .7rem; max-width: 22rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.multi-list { position: absolute; z-index: 20; background: var(--surface); border: 1px solid var(--border); border-radius: 8px; padding: .5rem .75rem; margin-top: .25rem; display: grid; gap: .3rem; min-width: 14rem; max-height: 20rem; overflow: auto; box-shadow: 0 8px 24px rgba(0,0,0,.25); }
@media (max-width: 900px) { .rp-layout { grid-template-columns: minmax(0, 1fr); } .rp-main .row { flex-wrap: wrap; } .rp-side { position: static; order: -1; } }

/* Facturas de compra › revisión paso a paso */
details.review-step { border-top: 1px solid var(--border); padding: .45rem 0; }
details.review-step > summary { cursor: pointer; display: flex; flex-wrap: wrap; align-items: center; gap: .5rem; }
details.review-step .review-detail { flex-basis: 100%; padding-left: 1.6rem; }
ul.review-items { list-style: none; margin: .4rem 0 0; padding: 0 0 0 1.6rem; display: grid; gap: .3rem; }
ul.review-items li { overflow-wrap: anywhere; }

/* Tabla tipo Excel (xTable): filtro debajo de cada título, orden al pulsarlo, cabecera fija */
.xt-bar { display: flex; align-items: center; gap: .5rem; margin: .25rem 0 .4rem; }
.xt-bar .xt-csv { margin-left: auto; }
.xt-wrap { max-height: 75vh; overflow: auto; border: 1px solid var(--border); border-radius: 10px; background: var(--surface); }
table.xt { font-size: .88rem; }
table.xt thead th { position: sticky; top: 0; z-index: 2; background: var(--surface); white-space: nowrap; }
table.xt thead tr.xt-filters th { top: 2.1rem; padding: .25rem .3rem; text-transform: none; letter-spacing: 0; border-bottom: 2px solid var(--border); }
table.xt thead tr:first-child th { cursor: pointer; user-select: none; }
table.xt thead tr:first-child th:hover { color: var(--brand); }
table.xt .xt-filters input, table.xt .xt-filters select { width: 100%; min-width: 90px; padding: .25rem .4rem; font-size: .8rem; margin: 0; }
table.xt .xt-filters .on { border-color: var(--brand); background: var(--brand-soft); }
table.xt td { padding: .4rem .6rem; }
table.xt tbody tr:hover td { background: var(--brand-soft); }
table.xt .nowrap, table.ct .nowrap { white-space: nowrap; }
table.xt select.wtask-status { width: auto; padding: .2rem .4rem; font-size: .82rem; margin: 0; }

/* Lista de conexiones (Marketing y Ajustes) */
table.ct td { vertical-align: middle; }
table.ct .ct-group td { background: var(--surface-2); font-weight: 600; padding: .45rem .6rem; }
table.ct .ct-act { white-space: nowrap; text-align: right; }
table.ct .ct-act > * { margin-left: .25rem; }
table.ct .ct-form td { background: var(--brand-soft); }
.ct-chips { margin: .25rem 0 .5rem; }

.mk-cards { grid-template-columns: repeat(4, 1fr); }
.wt-cards { grid-template-columns: repeat(5, 1fr); }
@media (max-width: 820px) {
  .mk-cards { grid-template-columns: 1fr 1fr; }
  .wt-cards { grid-template-columns: repeat(3, 1fr); }
  table.ct .ct-act { white-space: normal; }
}
table.xt td.xt-wide { min-width: 280px; }
/* Columna que ocupa solo lo que necesita (el espacio que sobra va a las demás). */
table.xt .xt-fit { width: 1%; white-space: nowrap; max-width: none; }
@media (max-width: 700px) {
  table.ct thead { display: none; }
  table.ct tr:not(.ct-group):not(.ct-form) { display: grid; grid-template-columns: auto 1fr; gap: .1rem .5rem; padding: .5rem 0; border-bottom: 1px solid var(--border); }
  table.ct tr:not(.ct-group):not(.ct-form) td { border: 0; padding: .1rem .5rem; }
  table.ct tr:not(.ct-group):not(.ct-form) td:nth-child(4), table.ct .ct-act { grid-column: 1 / -1; }
  table.ct .ct-act { text-align: left; }
  table.ct .ct-act > * { margin: 0 .25rem 0 0; }
}
/* ct-movil */
@media (max-width: 700px) {
  table.ct tr:not(.ct-group):not(.ct-form) td { white-space: normal; overflow: visible; text-overflow: clip; max-width: none; min-width: 0; overflow-wrap: anywhere; }
  table.ct .badge { white-space: normal; max-width: 100%; border-radius: .5rem; }
}
.inbox-pane { display: flex; align-items: center; gap: .4rem; margin: 0 0 .5rem; }
.inbox-pane select { flex: 1; margin: 0; }

/* Facturas y cobros del banco: rojo lo que falta conciliar, verde lo conciliado, gris lo que no necesita factura */
table.xt tr.row-bad td { background: var(--danger-soft); }
table.xt tr.row-ok td { background: var(--ok-soft); }
table.xt tr.row-muted td { color: var(--muted); }
/* Desplegable bajo una fila (p. ej. los documentos de un huésped en Empadronamiento). */
table.xt tr.xt-detail > td { background: var(--surface-2, var(--surface)); padding: .5rem .75rem 1rem 2.5rem; }
table.xt tr.xt-detail table td { padding: .2rem .5rem; border: 0; vertical-align: top; }
table.xt td.rec-bank { border-left: 1px solid var(--border); }
.chip { display: inline-block; padding: .05rem .5rem; border-radius: 999px; background: var(--brand-soft); font-size: .8rem; white-space: nowrap; }
.rec-months { grid-template-columns: repeat(auto-fill, minmax(7.5rem, 1fr)); margin: .5rem 0; }
.rec-line { padding: .2rem 0; border-bottom: 1px solid var(--border); flex-wrap: wrap; }

/* «Buscar gastos nuevos»: recuadro pequeño arriba a la derecha que sigue la búsqueda */
.rv-float { position: fixed; top: 4.5rem; right: 1rem; z-index: 60; width: min(22rem, calc(100vw - 2rem)); max-height: 70vh; overflow: auto;
  background: var(--surface); border: 1px solid var(--border); border-radius: 10px; box-shadow: 0 6px 24px rgba(0,0,0,.18); padding: .75rem .85rem; display: grid; gap: .4rem; }
.rv-bad { list-style: none; margin: 0; padding: 0; display: grid; gap: .4rem; }
.rv-bad li { border-top: 1px solid var(--border); padding-top: .35rem; }
.spin { display: inline-block; width: .9em; height: .9em; border: 2px solid var(--border); border-top-color: var(--ok); border-radius: 50%; animation: spin .8s linear infinite; vertical-align: -.1em; }
@keyframes spin { to { transform: rotate(360deg); } }
/* Como en el Excel: una línea por fila, con desplazamiento a los lados */
#rec-list table.xt td, #co-list table.xt td { white-space: nowrap; }
#rec-list table.xt td .small { display: inline-block; max-width: 22rem; overflow: hidden; text-overflow: ellipsis; vertical-align: bottom; }
table.xt tr.row-warn td, table.today-team tr.row-warn td { background: var(--warn-soft); }
@media (max-width: 700px) { table.today-team tr.row-warn { background: var(--warn-soft); box-shadow: inset 4px 0 0 var(--warn); } } /* hoy-amarillo */
#live-badge { color: var(--ok); }

/* Recuadro de la búsqueda: cada web del paso actual, según va */
.rv-live { list-style: none; margin: .3rem 0; padding: 0; display: grid; gap: .15rem; max-height: 40vh; overflow: auto; }

/* ---------- Más compacto ---------- */
/* Menú de la izquierda oculto en todas las pantallas: barra fina arriba con ☰, el menú sale por encima y se cierra al pulsar fuera. */
.shell { grid-template-columns: 1fr; }
.side { display: none; }
.shell.menu-open .side { display: block; position: fixed; top: 0; left: 0; bottom: 0; width: 250px; z-index: 40; height: 100vh; box-shadow: 8px 0 32px rgba(0,0,0,.45); }
.side-backdrop { display: none; }
.shell.menu-open .side-backdrop { display: block; position: fixed; inset: 0; z-index: 35; background: rgba(0,0,0,.35); }
.topbar { display: flex; align-items: center; gap: .75rem; justify-content: flex-start; padding: .35rem 16px; position: sticky; top: 0; z-index: 20;
  background: var(--side-bg); color: #f4f1ea; box-shadow: 0 4px 16px -6px rgba(14,34,51,.5); }
.topbar button { color: #f4f1ea; font-size: 1.2rem; padding: .2rem .55rem; }
.topbar-brand { display: flex; align-items: center; gap: .5rem; font-family: var(--serif); font-weight: 600; letter-spacing: .03em; }
.topbar-brand .brand-logo { width: 28px; height: 28px; }
main { max-width: 1680px; padding: 1rem 1.5rem 4rem; }
@media (max-width: 820px) { main { padding: 1rem 16px 4rem; } }
/* Filas de las tablas en una sola línea: lo largo se corta con «…» (el texto entero sale al pasar el ratón). */
th, td { white-space: nowrap; padding: .3rem .55rem; vertical-align: middle; }
td { max-width: 36ch; overflow: hidden; text-overflow: ellipsis; }
td:has(button, select, input, .btn, .badge) { max-width: none; overflow: visible; }
td button, td .btn, td .badge, td select { white-space: nowrap; }
td button.sm, td .btn.sm { padding-top: .15rem; padding-bottom: .15rem; }
/* En el ordenador el menú abierto ocupa su columna: la pantalla se ajusta y no tapa nada. */
@media (min-width: 821px) {
  .shell.menu-open { grid-template-columns: 240px minmax(0, 1fr); }
  .shell.menu-open .topbar { grid-column: 1 / -1; }
  .shell.menu-open .side { position: sticky; top: 46px; width: auto; height: calc(100vh - 46px); z-index: 10; box-shadow: 4px 0 24px -8px rgba(14,34,51,.45); }
  .shell.menu-open .side-backdrop { display: none; }
}

/* Historial de informes: el archivo es solo un icono. */
.or-icon { font-size: 1.2rem; text-decoration: none; padding: 0 .2rem; }

/* «🎓 Enseñar al robot»: la pantalla del robot a la izquierda, los pasos a la derecha */
.modal.modal-teach { max-width: min(1500px, 97vw); width: 97vw; }
.teach { display: grid; grid-template-columns: minmax(0, 1fr) 300px; gap: .8rem; }
.teach-main { display: grid; gap: .4rem; align-content: start; }
.teach-screen { position: relative; border: 1px solid var(--border); border-radius: 8px; overflow: hidden; background: #fff; aspect-ratio: 1366 / 900; }
.teach-screen img { width: 100%; height: 100%; display: block; cursor: crosshair; }
.teach-screen.busy img { opacity: .75; cursor: progress; }
.teach-load { position: absolute; inset: 0; display: grid; place-items: center; color: #333; background: #fff; }
.teach-steps { max-height: 34vh; overflow: auto; margin: .3rem 0 0 1.1rem; padding: 0; }
.teach-steps li { white-space: normal; margin-bottom: .15rem; }
@media (max-width: 900px) { .teach { grid-template-columns: 1fr; } }
/* Robot de facturas: «Qué pasó» corto (el texto entero al pasar el ratón) y botones de solo icono */
td.wb-detail { max-width: 26ch; }
.wb-acts .btn, .wb-acts button { padding: .1rem .35rem; }

/* Email editable en la vista previa */
.mail-edit { margin-top: 0; max-height: 50vh; overflow: auto; outline: 1px dashed var(--border); }
.mail-edit:focus { outline: 2px solid var(--brand, #2a7); }

/* Limpiezas › Productos de limpieza: una línea por piso y por pedido (la lista entera sale al pasar el ratón) */
.sp-line { display: block; max-width: 38ch; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.change-banner-soft { border: 2px solid var(--warn); }
.sp-inline { width: auto; margin: 0; padding: .2rem .4rem; font-size: .82rem; }
.sp-inline.late { border-color: var(--danger); color: var(--danger); background: var(--danger-soft); }
select.sp-inline.st-entregada { border-color: var(--ok, #2e9e6a); }
select.sp-inline.st-no_entregada, select.sp-inline.st-cancelada { border-color: var(--warn); color: var(--warn); }
.kind-tag { display: inline-block; padding: .05rem .4rem; border-radius: 6px; font-size: .78rem; font-weight: 600; white-space: nowrap; background: var(--brand-soft); color: var(--brand); }
.kind-tag.k-checkout { background: var(--warn-soft); color: var(--warn); }
.kind-tag.k-habitacion { background: var(--ok-soft, var(--brand-soft)); color: var(--ok, var(--brand)); }
.login-btn.login-alt { margin-top: .5rem; }
/* Portal de quien limpia: cuatro recuadros grandes (amarillo = tiene, rojo = hoy) y tres botones (Accesos, Productos, Cobros) */
.ph-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: .6rem; margin: .5rem 0 .6rem; }
.ph-grid.ph-more { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .5rem; margin-bottom: .9rem; }
.ph-tile { position: relative; display: flex; align-items: center; gap: .6rem; padding: .8rem .85rem; text-align: left; font: inherit; color: var(--text);
  background: var(--surface); border: 1px solid var(--border); border-left: 5px solid var(--border); border-radius: 14px; min-height: 4.6rem; cursor: pointer; }
.ph-tile .ph-ico { flex: 0 0 auto; width: 2.4rem; height: 2.4rem; border-radius: 50%; display: grid; place-items: center; background: var(--brand-soft); color: var(--brand); }
.ph-tile .ph-ico svg { width: 1.35rem; height: 1.35rem; }
.ph-tile .ph-t { display: flex; flex-direction: column; min-width: 0; line-height: 1.2; }
.ph-tile .ph-t strong { font-size: 1rem; }
.ph-tile .ph-t span { font-size: .78rem; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ph-tile .ph-n { position: absolute; top: .4rem; right: .45rem; min-width: 1.6rem; height: 1.6rem; padding: 0 .4rem; border-radius: 999px;
  display: grid; place-items: center; font-weight: 700; font-size: .85rem; background: var(--surface-2, var(--brand-soft)); color: var(--muted); }
.ph-tile.has { border-left-color: var(--gold, #d4a72c); }
.ph-tile.has .ph-n { background: var(--gold, #e0b23a); color: #1d1600; }
.ph-tile.today { border-left-color: var(--danger); }
.ph-tile.today .ph-n { background: var(--danger); color: #fff; }
.ph-tile.today .ph-t span { color: var(--danger); font-weight: 600; }
.ph-tile.active { border-color: var(--brand); box-shadow: inset 0 0 0 1px var(--brand); background: var(--brand-soft); }
.ph-tile.has.active { border-left-color: var(--gold, #d4a72c); } .ph-tile.today.active { border-left-color: var(--danger); }
.ph-tile.ph-small { min-height: 0; padding: .5rem .6rem; gap: .45rem; border-left-width: 1px; border-radius: 12px; }
.ph-tile.ph-small .ph-ico { width: 1.9rem; height: 1.9rem; } .ph-tile.ph-small .ph-ico svg { width: 1.1rem; height: 1.1rem; }
.ph-tile.ph-small .ph-t strong { font-size: .9rem; }
.ph-tile.ph-small .ph-n { background: none; min-width: 0; top: .25rem; right: .3rem; font-size: .8rem; }
/* Accesos en pequeño: una línea por piso con «Portal» y «Piso» */
.ph-access .asig-title { font-size: .85rem; margin: .3rem 0 .4rem; }
.ph-access .door-list { display: flex; flex-direction: column; gap: .4rem; margin-bottom: .8rem; }
.ph-access .door-card { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 0 .6rem; padding: .45rem .6rem; border-radius: 12px; }
.ph-access .door-head { margin: 0; font-size: .95rem; grid-column: 1; }
.ph-access .addr-line { grid-column: 1; margin: 0; font-size: .75rem; }
.ph-access .door-btns { grid-column: 2; grid-row: 1 / span 3; display: flex; gap: .35rem; }
.ph-access .door-btn { aspect-ratio: auto; min-height: 0; flex-direction: row; gap: .3rem; padding: .45rem .6rem; font-size: .85rem; }
.ph-access .door-ico svg { width: 1.15rem; height: 1.15rem; }
.ph-access .door-sub { display: none; }
.ph-access .code-box { grid-column: 2; grid-row: 1 / span 3; flex-direction: row; gap: .4rem; padding: .3rem .55rem; }
.ph-access .code-box .small { display: none; }
.ph-access .code-digits { font-size: 1.3rem; letter-spacing: .2em; }
.ph-sup.card { display: flex; flex-direction: column; gap: .55rem; padding: .8rem; }
.ph-sup label { margin: 0; font-weight: 600; }
.ph-sup select { width: 100%; margin-top: .3rem; font-size: 1rem; }
.ph-sup #ph-sup-go { align-self: stretch; padding: .65rem; font-size: 1rem; }
.ph-sup #ph-sup-info:empty { display: none; }
.ph-sup .sup-line { flex-direction: column; align-items: stretch; }
.ph-sup .sup-chip { justify-content: space-between; border-radius: 12px; padding: .45rem .5rem .45rem .75rem; font-size: .95rem; }
.ph-sup .sup-chip button { padding: .35rem .8rem; }
@media (max-width: 820px) {
  .ph-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .45rem; }
  .ph-grid.ph-more { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .35rem; }
  .ph-tile { padding: .65rem .6rem; gap: .5rem; min-height: 4.1rem; }
  .ph-tile .ph-ico { width: 2.1rem; height: 2.1rem; }
  .ph-tile.ph-small { flex-direction: column; align-items: center; text-align: center; gap: .2rem; padding: .45rem .3rem; }
  .ph-tile.ph-small .ph-t span { display: none; }
  /* Limpiezas › «Más»: dentro de la pantalla del móvil */
  .cl-more-menu { position: fixed; left: 16px; right: 16px; top: auto; min-width: 0; max-width: none; }
}
/* Portal: «Reportar» destacado en la botonera y tarjetas de «Hoy» con todos los botones */
.ph-grid.ph-more.ph-more4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.ph-tile.ph-report { border-color: var(--warn); background: var(--warn-soft, var(--surface)); }
.ph-tile.ph-report .ph-ico { background: var(--warn); color: #fff; }
.ph-today { display: flex; flex-direction: column; gap: .5rem; margin: .2rem 0 .9rem; }
.ph-card { background: var(--surface); border: 1px solid var(--border); border-left: 5px solid var(--danger); border-radius: 14px; padding: .65rem .75rem; }
.ph-card.done { border-left-color: var(--ok); opacity: .85; }
.ph-card-h { display: flex; gap: .5rem; align-items: center; flex-wrap: wrap; margin-bottom: .2rem; }
.ph-card-a { font-size: .92rem; margin-bottom: .45rem; }
.ph-card-b, .ph-card-c { display: flex; flex-wrap: wrap; gap: .4rem; align-items: center; }
.ph-card-c { margin-top: .4rem; }
.ph-card button { min-height: 2.4rem; }
button.ph-rep-btn { background: var(--warn); color: #fff; border-color: var(--warn); font-weight: 600; }
.rp-cats { display: grid; grid-template-columns: 1fr 1fr; gap: .5rem; margin-bottom: .6rem; }
.rp-cat { display: flex; flex-direction: column; align-items: flex-start; gap: .15rem; padding: .7rem; text-align: left; border: 1px solid var(--border); border-radius: 12px; background: var(--surface); box-shadow: none; font-size: 1rem; }
.rp-cat span { font-size: .8rem; color: var(--muted); }
.rp-cat.on { border-color: var(--brand); background: var(--brand-soft); box-shadow: inset 0 0 0 1px var(--brand); }
/* Portal: botonera en dos filas, tarjetas de HOY compactas y lista más apretada */
.ph-grid.ph-act, .ph-grid.ph-act2 { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .45rem; margin: .1rem 0 .45rem; }
.ph-grid.ph-act2 { margin-bottom: .8rem; }
.ph-act .ph-tile.ph-small, .ph-act2 .ph-tile.ph-small { flex-direction: row; justify-content: center; text-align: left; gap: .5rem; }
.ph-act .ph-tile.ph-small { padding: .7rem .5rem; }
.ph-act .ph-tile.ph-small .ph-t strong { font-size: 1rem; }
.ph-act2 .ph-tile.ph-small { padding: .4rem .5rem; }
.ph-act .ph-tile.ph-small .ph-t span, .ph-act2 .ph-tile.ph-small .ph-t span { display: none; }
.ph-tile.ph-report .ph-ico svg { width: 1.15rem; height: 1.15rem; }
.ph-card { padding: .45rem .6rem; border-left-width: 4px; border-radius: 12px; }
.ph-card-h { gap: .35rem; margin: 0 0 .35rem; font-size: .9rem; line-height: 1.25; }
.ph-card-h { flex-wrap: nowrap; white-space: nowrap; }
.ph-card-addr { font-weight: 600; min-width: 0; flex: 1; overflow: hidden; text-overflow: ellipsis; }
.ph-map { text-decoration: none; margin-left: auto; font-size: 1rem; }
.ph-card-b { gap: .3rem; }
.ph-card button, .ph-card .btn { min-height: 0; padding: .3rem .55rem; font-size: .8rem; border-radius: 8px; }
.ph-card .badge { font-size: .75rem; }
.ph-today { gap: .4rem; }
@media (max-width: 820px) {
  .ph-grid { gap: .4rem; margin: .3rem 0 .45rem; }
  .ph-tile { min-height: 3.4rem; padding: .5rem .55rem; }
  .ph-tile .ph-ico { width: 1.9rem; height: 1.9rem; }
  .ph-tile .ph-ico svg { width: 1.1rem; height: 1.1rem; }
  .ph-act .ph-tile.ph-small, .ph-act2 .ph-tile.ph-small { flex-direction: row; align-items: center; }
  body.portal-limpieza #ch-table table.xt tbody tr { padding: .4rem .5rem; gap: .3rem; font-size: .86rem; }
  body.portal-limpieza #ch-table table.xt td .addr-line { display: inline; margin: 0 0 0 .3rem; }
  body.portal-limpieza #ch-table table.xt td button, body.portal-limpieza #ch-table table.xt td .btn { min-height: 0; padding: .25rem .5rem; font-size: .8rem; }
  body.portal-limpieza main h1 { margin: .2rem 0 .3rem; font-size: 1.5rem; }
}
.rp-title { width: 12rem; max-width: 40vw; }
/* «🕒 Jornada»: línea de tiempo por persona (sólido = medido, rayado = estimado) */
.jr-card { margin: .5rem 0; padding: .6rem .75rem; }
.jr-tot { font-size: 1.15rem; }
.jr-ticks { position: relative; height: 14px; margin-top: .45rem; font-size: .66rem; color: var(--muted); }
.jr-ticks span { position: absolute; transform: translateX(-50%); }
.jr-line { position: relative; height: 32px; margin: .15rem 0 .5rem; border-radius: 8px; background: var(--surface-2, rgba(127,127,127,.12)); overflow: hidden; }
.jr-blk { position: absolute; top: 4px; bottom: 4px; min-width: 3px; border-radius: 6px; padding: 0 .3rem; background: var(--brand); color: var(--brand-ink, #fff);
  font-size: .68rem; font-weight: 600; line-height: 24px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.jr-blk.est { background: repeating-linear-gradient(45deg, var(--gold, #d4a72c) 0 6px, rgba(0,0,0,.18) 6px 12px); color: #1d1600; }
.jr-blk.open { background: var(--warn); color: #fff; }
.jr-now { position: absolute; top: 0; bottom: 0; width: 2px; background: var(--danger); }
.jr-key { display: inline-block; width: 1.1rem; height: .7rem; border-radius: 3px; vertical-align: middle; background: var(--brand); }
.jr-key.est { background: repeating-linear-gradient(45deg, var(--gold, #d4a72c) 0 4px, rgba(0,0,0,.18) 4px 8px); }
.jr-table { width: 100%; border-collapse: collapse; font-size: .88rem; }
.jr-table td, .jr-table th { white-space: nowrap; padding: .3rem .45rem; text-align: left; border-top: 1px solid var(--border); }
.jr-table th { font-size: .72rem; text-transform: uppercase; letter-spacing: .04em; color: var(--muted); border-top: 0; }
.jr-src { font-size: .72rem; color: var(--muted); }
/* Botoncito 📲 junto al saludo del portal: vuelve a abrir el vídeo de la pantalla de inicio */
.ph-hello { display: flex; align-items: center; gap: .4rem; }
button.ph-guide { min-height: 0; padding: .1rem .35rem; font-size: .95rem; line-height: 1.2; border-radius: 8px; background: transparent; border: 1px solid var(--border); opacity: .75; }
button.ph-guide:hover { opacity: 1; }
/* Productos: dos recuadros (Solicitudes / Realizadas) y la lista como icono */
.cl-types.sp-types { grid-template-columns: repeat(2, minmax(0, 1fr)); max-width: 40rem; }
@media (max-width: 820px) { .cl-types.sp-types { grid-template-columns: 1fr 1fr; } }
.sp-icon { font-size: 1.1rem; padding: 0 .25rem; text-decoration: none; }
/* Circulito «i» de información junto al título: las explicaciones en viñetas, al pasar el ratón o pulsar */
.info-dot-wrap { position: relative; display: inline-block; vertical-align: super; margin-left: .2rem; }
.info-dot { width: 1.15rem; height: 1.15rem; min-width: 0; padding: 0; border-radius: 50%; font: italic 700 .72rem/1 Georgia, serif;
  display: inline-flex; align-items: center; justify-content: center; background: var(--brand-soft); color: var(--brand); border: 1px solid var(--brand); cursor: help; }
.info-pop { display: none; position: absolute; left: 0; top: calc(100% + .35rem); z-index: 70; width: min(34rem, calc(100vw - 32px));
  padding: .6rem .85rem; background: var(--surface); color: var(--text); border: 1px solid var(--border); border-radius: 10px;
  box-shadow: 0 10px 28px rgba(0,0,0,.18); font-size: .88rem; font-weight: 400; line-height: 1.45; font-family: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; text-transform: none; letter-spacing: 0; }
.info-pop ul, .info-pop ol { margin: .15rem 0; padding-left: 1.2rem; }
.info-pop li { margin: .2rem 0; }
.info-dot-wrap:hover .info-pop, .info-dot-wrap.open .info-pop, .info-dot:focus + .info-pop { display: block; }
@media (max-width: 820px) { .info-pop { position: fixed; left: 16px; right: 16px; top: 4.5rem; width: auto; } }
.icon-btn.spin { animation: cl-spin 1s linear infinite; }
@keyframes cl-spin { to { transform: rotate(360deg); } }
/* Limpiezas ordenada: cabecera, pestañas con «Más», recuadros de tipo y una sola barra */
.cl-head-act { gap: .4rem; align-items: center; }
.icon-btn { min-width: 2.25rem; padding: .35rem .55rem; line-height: 1.2; }
.cl-tabs.tabs { overflow: visible; flex-wrap: wrap; align-items: flex-end; }
.cl-more { position: relative; }
.cl-more-btn { border: none; border-bottom: 2px solid transparent; border-radius: 0; background: none; padding: .6rem .8rem; color: var(--muted); white-space: nowrap; }
.cl-more-btn.active { color: var(--brand); border-bottom-color: var(--brand); font-weight: 600; }
.cl-more-menu { position: absolute; right: 0; top: 100%; z-index: 60; display: flex; flex-direction: column; min-width: 16rem; max-width: calc(100vw - 32px);
  padding: .3rem; background: var(--surface); border: 1px solid var(--border); border-radius: 10px; box-shadow: 0 10px 28px rgba(0,0,0,.14); }
.cl-more-menu[hidden] { display: none; }
.tabs .cl-more-menu button { text-align: left; border: 0; border-radius: 6px; padding: .55rem .75rem; color: var(--text); white-space: nowrap; }
.tabs .cl-more-menu button:hover, .tabs .cl-more-menu button.active { background: var(--brand-soft); color: var(--brand); }
.cl-types { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: .6rem; margin: .25rem 0 .75rem; }
.home-tile.cl-type { min-height: 0; }
.home-tile.cl-type.t-all { border-left-color: var(--brand); }
.home-tile.cl-type.t-periodica { border-left-color: var(--brand); }
.home-tile.cl-type.t-checkout { border-left-color: var(--warn); }
.home-tile.cl-type.t-ropa { border-left-color: var(--gold); }
.home-tile.cl-type.t-habitacion { border-left-color: var(--ok); }
.home-tile.cl-type.active { background: var(--brand-soft); border-color: var(--brand); box-shadow: inset 0 0 0 1px var(--brand); }
.home-tile.cl-type.active .ht-top { color: var(--brand); }
.home-tile.cl-type .ht-sub .count { margin: 0 .15rem 0 0; }
.cl-bar { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem .75rem; padding: .45rem .6rem; margin: 0 0 .75rem;
  background: var(--surface); border: 1px solid var(--border); border-radius: 12px; }
.cl-nav { display: flex; align-items: center; gap: .35rem; }
.cl-range { min-width: 10.5rem; text-align: center; white-space: nowrap; }
.cl-bar select { width: auto; margin: 0; }
.cl-bar .cl-filter { gap: .5rem; flex-wrap: wrap; align-items: center; margin: 0; }
.cl-bar .cl-filter label { margin: 0; }
.cl-bar-end { order: -1; margin: 0; } /* «Lista | Calendario» a la izquierda */
.seg { display: inline-flex; border: 1px solid var(--border); border-radius: 999px; overflow: hidden; }
.seg button { border: 0; border-radius: 0; background: none; padding: .32rem .85rem; color: var(--muted); white-space: nowrap; }
.seg button.active { background: var(--brand); color: var(--brand-ink, #fff); font-weight: 600; }
@media (max-width: 820px) {
  .cl-types { grid-template-columns: 1fr 1fr; gap: .5rem; }
  .home-tile.cl-type.t-all { grid-column: span 2; }
  .cl-bar-end { margin-left: 0; }
  .cl-nav { width: 100%; justify-content: space-between; }
  .cl-tabs.tabs > button, .cl-more-btn { padding: .5rem .45rem; font-size: .85rem; }
}
/* Limpiezas: filtros rápidos en circulitos (ya no se usan; se dejan por si algún enlace antiguo) */
.cl-chips { display: flex; flex-wrap: wrap; gap: .4rem; margin: .4rem 0 .6rem; }
.cl-chip { border-radius: 999px; padding: .3rem .75rem; font-size: .85rem; border: 1px solid var(--border); background: var(--card, transparent); color: inherit; white-space: nowrap; }
.cl-chip.active { background: var(--brand); border-color: var(--brand); color: #fff; }
.cl-chip-n { display: inline-block; min-width: 1.4em; padding: 0 .35em; margin-left: .2rem; border-radius: 999px; background: var(--brand-soft); color: var(--brand); font-size: .75rem; font-weight: 600; text-align: center; }
.cl-chip.active .cl-chip-n { background: #fff; }
.xt tr.sp-new td { background: var(--brand-soft); }
.xt tr.sp-todo td { background: var(--warn-soft); }
button.linkish { all: unset; cursor: pointer; color: var(--brand); text-decoration: underline dotted; }
button.linkish:hover { text-decoration: underline; }
.sp-amount { width: 6.5rem; text-align: right; }
.sp-items { columns: 2 220px; margin: .5rem 0; padding-left: 1.2rem; }
.sp-items li { break-inside: avoid; padding: .1rem 0; }
button.linkish.sp-line { display: block; max-width: 30ch; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sp-dia { width: 8.5rem; }
.ok-text { color: var(--ok, #2e9e6a); font-weight: 600; }

/* Ropa blanca: revisión de checkout e inventario (pensado para el móvil) */
.lc-table input[type=number] { width: 4.2rem; text-align: center; margin: 0; padding: .3rem; font-size: 1rem; }
.lc-table td, .lc-table th { padding: .3rem .4rem; }
.lc-table tr.lc-miss td { background: var(--danger-soft); }
.lc-table [data-miss] { color: var(--danger); font-weight: 600; white-space: nowrap; }
.danger-text { color: var(--danger); }
.chip-radio { display: inline-flex; align-items: center; gap: .3rem; padding: .35rem .7rem; border: 1px solid var(--border); border-radius: 999px; cursor: pointer; }
.chip-radio:has(input:checked) { border-color: var(--brand); background: var(--brand-soft); font-weight: 600; }
.ph-strip { display: flex; flex-wrap: wrap; gap: .5rem; margin: .5rem 0; }
.ph-strip figure { margin: 0; width: 96px; }
.ph-strip img { width: 96px; height: 96px; object-fit: cover; border-radius: 8px; border: 1px solid var(--border); display: block; }
.ph-strip figcaption { font-size: .72rem; display: flex; align-items: center; justify-content: space-between; }
label.btn { display: inline-flex; align-items: center; cursor: pointer; }
.chip-radio input { width: auto; margin: 0; }
@media (max-width: 600px) {
  .lc-table input[type=number] { width: 2.9rem; font-size: .95rem; padding: .25rem .1rem; }
  .lc-table th { font-size: .62rem; letter-spacing: 0; white-space: normal; }
  .lc-table td, .lc-table th { padding: .25rem .2rem; }
  .lc-table td:first-child { font-size: .88rem; }
  .lc-table .lc-misscol { display: none; }
}
/* Tabla sencilla (Inicio de limpieza): sin filtros ni Excel, solo las filas. */
.xt-simple .xt-bar, .xt-simple tr.xt-filters { display: none; }
.xt-simple select { min-width: 7rem; }
/* Revisión del checkout: dañado (sin faltar) en naranja. Instructivo de pasos. */
.lc-table tr.lc-bad td { background: var(--warn-soft); }
.guide { padding: .6rem .9rem; margin: .5rem 0; }
.guide summary { cursor: pointer; }
.guide-body { font-size: .95rem; line-height: 1.45; }
.guide-body .guide-h { margin: .8rem 0 .3rem; }
.guide-body h3.guide-h { font-size: 1.1rem; }
.guide-body h4.guide-h { font-size: 1rem; color: var(--brand); }
.guide-body ul { margin: .2rem 0 .5rem; padding-left: 1.2rem; }
.guide-body li { margin: .15rem 0; }
.guide-body p { margin: .3rem 0; }
.guide-body hr { border: 0; border-top: 1px solid var(--border); margin: .6rem 0; }
.lc-table input.ro { background: transparent; border-color: transparent; font-weight: 600; }
/* Inicio de administración: tarjetas de pendientes (número grande, mini resumen, un clic y entras). */
.home-tiles { display: grid; grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); gap: .75rem; }
.home-tile { display: flex; flex-direction: column; align-items: flex-start; gap: .2rem; text-align: left; padding: .85rem 1rem;
  background: var(--surface); border: 1px solid var(--border); border-left: 4px solid var(--border); border-radius: 12px; cursor: pointer;
  color: var(--text); font: inherit; min-height: 7rem; box-shadow: none; }
.home-tile:hover { border-color: var(--brand); transform: translateY(-1px); }
.home-tile .ht-top { display: flex; gap: .4rem; align-items: center; font-size: .78rem; text-transform: uppercase; letter-spacing: .04em; color: var(--muted); font-weight: 600; }
.home-tile .ht-value { font-size: 2rem; font-weight: 700; line-height: 1.1; }
.home-tile .ht-sub { font-size: .82rem; color: var(--muted); }
.home-tile.danger { border-left-color: var(--danger); } .home-tile.danger .ht-value { color: var(--danger); }
.home-tile.warn { border-left-color: var(--gold); } .home-tile.warn .ht-value { color: var(--warn); }
.home-tile.ok { border-left-color: var(--ok); } .home-tile.ok .ht-value { color: var(--ok); }
/* Inicio de limpieza: «Asignaciones», tres recuadros con icono de línea y número en el azul del CRM. */
.asig-title { margin: .5rem 0 .5rem; font-size: 1.05rem; text-transform: uppercase; letter-spacing: .06em; color: var(--muted); }
.asig-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: .6rem; margin: 0 0 .9rem; }
.asig-card { display: flex; align-items: center; gap: .75rem; padding: .8rem .9rem; text-align: left; font: inherit; color: var(--text);
  background: var(--surface); border: 1px solid var(--border); border-radius: 14px; cursor: pointer; box-shadow: none; }
.asig-card:hover { border-color: var(--brand); }
.asig-card.active { border-color: var(--brand); background: var(--brand-soft); box-shadow: inset 0 0 0 1px var(--brand); }
.asig-ico { flex: 0 0 auto; width: 2.6rem; height: 2.6rem; border-radius: 50%; display: grid; place-items: center; background: var(--brand-soft); color: var(--brand); }
.asig-card.active .asig-ico { background: var(--brand); color: var(--brand-ink); }
.asig-ico svg { width: 1.35rem; height: 1.35rem; }
.asig-txt { flex: 1; display: flex; flex-direction: column; line-height: 1.25; }
.asig-txt span { font-size: .85rem; color: var(--muted); }
.asig-n { flex: 0 0 auto; min-width: 2rem; height: 2rem; padding: 0 .55rem; border-radius: 999px; display: grid; place-items: center;
  background: var(--brand); color: var(--brand-ink); font-weight: 700; font-size: .95rem; }
.asig-n.zero { background: var(--brand-soft); color: var(--muted); }
/* Asignaciones pendientes: globito rojo, que se vea bien (no monocromo). */
.asig-n.hot { background: var(--danger); color: #fff; box-shadow: 0 0 0 2px var(--surface); }
/* Inicio: líneas de check-ins de hoy / mañana dentro de la tarjeta */
.ci-line { display: block; font-size: .82rem; line-height: 1.35; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.asig-alert { margin-bottom: 1rem; border: 1px solid var(--brand); border-left: 4px solid var(--brand); background: var(--surface); }
/* «Productos de limpieza» en el Inicio de limpieza. */
.sup-list { display: flex; flex-direction: column; gap: .5rem; }
.sup-row { display: flex; align-items: center; gap: .75rem; padding: .75rem .9rem; background: var(--surface); border: 1px solid var(--border); border-radius: 14px; }
.sup-txt { flex: 1; min-width: 0; }
.sup-incoming { color: var(--brand); margin: .1rem 0; }
/* Lista de la semana: total de lo filtrado. Portal de limpieza: lo de la semana y los botones de abrir. */
.wl-total { margin: .5rem 0; padding: .55rem .8rem; background: var(--brand-soft); border-radius: 10px; color: var(--brand); }
.week-pay { display: flex; align-items: center; gap: .8rem; margin: 0 0 1rem; border-left: 4px solid var(--brand); }
.week-pay-n { font-size: 1.6rem; font-weight: 700; color: var(--brand); line-height: 1.15; }
.lock-list { display: flex; flex-direction: column; gap: .5rem; margin-bottom: 1rem; }
.lock-row { display: flex; align-items: center; gap: .6rem; flex-wrap: wrap; padding: .75rem .9rem; background: var(--surface); border: 1px solid var(--brand); border-radius: 14px; }
.lock-btns { margin-left: auto; display: flex; gap: .5rem; flex-wrap: wrap; }
.lock-btn { font-size: 1rem; padding: .65rem 1.1rem; }
/* Dirección del piso con «Cómo llegar» (Google Maps). */
.addr-line { color: var(--muted); line-height: 1.35; margin: .15rem 0 .45rem; white-space: normal; }
.maps-link { font-weight: 600; white-space: nowrap; text-decoration: none; }
.go-timer { font-variant-numeric: tabular-nums; font-weight: 400; opacity: .9; margin-left: .3rem; }
/* «Acceso de hoy»: un recuadro por piso con dos cuadrados grandes (Portal y Piso). */
.door-list { display: grid; gap: .75rem; margin-bottom: 1rem; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); }
.door-card { background: var(--surface); border: 1px solid var(--brand); border-radius: 16px; padding: .8rem; }
.door-head { display: flex; align-items: baseline; justify-content: space-between; gap: .5rem; margin: 0 .2rem .6rem; font-size: 1.1rem; }
.door-btns { display: grid; grid-template-columns: 1fr 1fr; gap: .6rem; }
.door-btn { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: .3rem; aspect-ratio: 1 / 1; min-height: 120px;
  border-radius: 14px; border: 0; background: var(--brand); color: var(--brand-ink, #fff); font: inherit; font-size: 1.15rem; cursor: pointer; padding: .6rem; box-shadow: none; }
.door-btn:active { transform: scale(.97); }
.door-btn:disabled { opacity: .6; }
.door-ico svg { width: 40px; height: 40px; display: block; }
.door-sub { font-size: .78rem; opacity: .85; font-weight: 400; }
.code-box { display: flex; flex-direction: column; align-items: center; gap: .2rem; padding: .7rem; border-radius: 12px; background: var(--surface-2); }
.code-digits { font-size: 2.2rem; letter-spacing: .35em; font-variant-numeric: tabular-nums; padding-left: .35em; }
.chip-check { display: inline-flex; align-items: center; gap: .35rem; padding: .3rem .6rem; border: 1px solid var(--border); border-radius: 999px; background: var(--surface); margin: 0; }
/* Fila de total al pie de una tabla (p. ej. el precio de lo filtrado en la lista de limpiezas). */
table.xt tfoot tr.xt-total td { position: sticky; bottom: 0; background: var(--brand-soft); color: var(--brand); font-weight: 600; border-top: 2px solid var(--brand); padding: .6rem .5rem; }
table.xt tfoot tr.xt-total td:first-child { text-align: right; }
.other-product { display: flex; gap: .5rem; align-items: flex-end; margin: .6rem 0; padding: .6rem .7rem; background: var(--brand-soft); border-radius: 10px; }
.other-product input { margin: .25rem 0 0; }
.rs-list { display: flex; flex-direction: column; gap: .5rem; }
/* Iconos de línea en lugar de emojis (botones, pestañas, títulos, avisos). */
.ei { display: inline-flex; width: 1.1em; height: 1.1em; vertical-align: -0.18em; margin-right: .15em; color: var(--brand); flex: none; }
.ei svg { width: 100%; height: 100%; }
button.primary .ei, .asig-card.active .ei, .badge .ei { color: currentColor; }
.badge.ok .ei, .ok-text .ei { color: var(--ok); } .badge.danger .ei, .danger-text .ei, .change-banner .ei { color: var(--danger); } .badge.warn .ei { color: var(--warn); }
/* Inicio de administración por temas, y la ocupación con su anillo. */
.home-group { margin: 0 0 1.25rem; }
.home-group-title { margin: 0 0 .5rem; font-size: .95rem; text-transform: uppercase; letter-spacing: .07em; color: var(--muted); border-bottom: 1px solid var(--border); padding-bottom: .3rem; }
.home-group-title a { color: inherit; text-decoration: none; } .home-group-title a:hover { color: var(--brand); }
.home-tile .ht-ico .ei { width: 1.15rem; height: 1.15rem; }
.occ-body { display: flex; align-items: center; gap: .8rem; }
.occ-ring { width: 64px; height: 64px; flex: none; }
.occ-ring circle { fill: none; stroke-width: 8; }
.occ-bg { stroke: var(--brand-soft); } .occ-fg { stroke: var(--brand); stroke-linecap: round; }
.occ-body > span:last-child { display: flex; flex-direction: column; }
/* Inicio compacto: en el ordenador, los temas en dos columnas; en el móvil, recuadros pequeños de dos en dos. */
.home-groups { display: grid; grid-template-columns: 1fr; gap: 0 1.25rem; align-items: start; }
@media (min-width: 1000px) { .home-groups { grid-template-columns: 1fr 1fr; } }
.home-group .home-tiles { grid-template-columns: repeat(auto-fill, minmax(165px, 1fr)); gap: .6rem; }
.home-tile { min-height: 0; padding: .7rem .8rem; }
.home-tile .ht-value { font-size: 1.7rem; }
.home-tile .ht-sub { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
@media (max-width: 700px) {
  .home-group .home-tiles { grid-template-columns: 1fr 1fr; gap: .5rem; }
  .home-group { margin-bottom: .9rem; }
  .home-tile { padding: .6rem .65rem; border-radius: 10px; gap: .1rem; }
  .home-tile .ht-top { font-size: .66rem; letter-spacing: .02em; gap: .3rem; }
  .home-tile .ht-value { font-size: 1.45rem; }
  .home-tile .ht-sub { font-size: .74rem; }
  .home-tile.occ { grid-column: span 2; }
  .occ-ring { width: 52px; height: 52px; }
}
.home-tile.occ { grid-column: span 2; }
/* Portal del equipo de limpieza: todo en azul (sin el fondo crema). */
body.portal-limpieza { --bg: #e3eaf2; --border: #cdd8e4; background: var(--bg); }
body.portal-limpieza .change-banner-soft { background: var(--surface); border-color: var(--brand); }
body.portal-limpieza .badge { background: var(--brand-soft); color: var(--brand); }
.asig-head { display: flex; align-items: center; justify-content: space-between; gap: .5rem; }
.asig-head .asig-title { margin-bottom: .5rem; }
/* Lo que cobras: franja pequeña con hoy, semana y mes. */
.pay-strip { display: grid; grid-template-columns: repeat(3, 1fr); gap: .4rem; }
.pay-cell { display: flex; flex-direction: column; padding: .5rem .65rem; background: var(--surface); border: 1px solid var(--border); border-radius: 10px; line-height: 1.2; }
.pay-l { font-size: .72rem; text-transform: uppercase; letter-spacing: .04em; color: var(--muted); }
.pay-n { font-size: 1.1rem; font-weight: 700; color: var(--brand); }
.pay-s { font-size: .72rem; color: var(--muted); }
/* Productos: una línea por piso. */
.sup-list { gap: .35rem; }
.sup-row { padding: .45rem .7rem; border-radius: 10px; gap: .5rem; }
.sup-row .sup-txt { font-size: .9rem; }
.sup-incoming { font-size: .85rem; }
@media (max-width: 700px) {
  .asig-cards { grid-template-columns: repeat(auto-fit, minmax(5.2rem, 1fr)); gap: .4rem; }
  .asig-card { flex-direction: column; align-items: center; text-align: center; gap: .3rem; padding: .55rem .35rem; position: relative; border-radius: 12px; }
  .asig-txt { align-items: center; } .asig-txt strong { font-size: .78rem; line-height: 1.15; } .asig-txt span { display: none; }
  .asig-ico { width: 2.1rem; height: 2.1rem; } .asig-ico svg { width: 1.1rem; height: 1.1rem; }
  .asig-n { position: absolute; top: .3rem; right: .3rem; min-width: 1.45rem; height: 1.45rem; font-size: .78rem; padding: 0 .35rem; }
  .pay-n { font-size: 1rem; }
}
/* Portal: Lista o Calendario, justo encima de las limpiezas. */
.view-toggle { display: inline-flex; gap: 0; margin: .2rem 0 .5rem; border: 1px solid var(--brand); border-radius: 999px; overflow: hidden; }
.view-toggle button { border: 0; border-radius: 0; background: var(--surface); color: var(--brand); padding: .4rem .9rem; font-size: .88rem; box-shadow: none; }
.view-toggle button.active { background: var(--brand); color: var(--brand-ink); }
.view-toggle button.active .ei { color: currentColor; }
/* «Iniciar checkout»: un paso cada vez, con reloj, en el móvil. */
.cf { font-size: 1rem; }
.cf-big { width: 100%; font-size: 1.15rem; padding: .9rem; margin-top: .5rem; }
.cf-top { display: flex; justify-content: space-between; align-items: center; font-size: .85rem; color: var(--muted); }
.cf-clock { font-variant-numeric: tabular-nums; font-weight: 700; color: var(--brand); font-size: 1.05rem; }
.cf-bar { height: 6px; background: var(--brand-soft); border-radius: 99px; margin: .35rem 0 .6rem; overflow: hidden; }
.cf-bar span { display: block; height: 100%; background: var(--brand); }
.cf-title { margin: .2rem 0 .4rem; font-size: 1.15rem; }
.cf-body { margin: .3rem 0 .6rem; }
.cf-q { margin: .6rem 0; padding: .7rem .8rem; background: var(--brand-soft); border-radius: 12px; }
.cf-yn { display: grid; grid-template-columns: 1fr 1fr; gap: .5rem; margin-top: .5rem; }
.cf-yn button { padding: .75rem; font-size: 1rem; background: var(--surface); border: 1px solid var(--border); }
.cf-yn button.active { background: var(--brand); color: var(--brand-ink); border-color: var(--brand); }
.cf-chips { display: grid; grid-template-columns: repeat(auto-fill, minmax(130px, 1fr)); gap: .4rem; margin: .4rem 0; }
.cf-chip { position: relative; display: flex; flex-direction: column; align-items: flex-start; gap: .1rem; padding: .6rem .7rem; text-align: left; background: var(--surface); border: 1px solid var(--border); border-radius: 10px; font-size: .9rem; }
.cf-chip.on { border-color: var(--danger); background: var(--danger-soft); } .cf-chip strong { font-size: .85rem; color: var(--muted); } .cf-chip.on strong { color: var(--danger); }
.cf-minus { position: absolute; top: .25rem; right: .35rem; width: 1.6rem; height: 1.6rem; border-radius: 50%; display: grid; place-items: center; background: var(--surface); border: 1px solid var(--danger); color: var(--danger); font-weight: 700; }
.cf-photos { display: flex; gap: .4rem; flex-wrap: wrap; align-items: center; margin-top: .4rem; }
.cf-photos img { width: 64px; height: 64px; object-fit: cover; border-radius: 8px; }
.cf-why { color: var(--warn); margin: .3rem 0 0; }
.cf-nav { display: grid; grid-template-columns: 1fr 2fr; gap: .5rem; margin-top: .8rem; position: sticky; bottom: 0; background: var(--surface); padding: .4rem 0; }
.cf-nav button { padding: .8rem; font-size: 1rem; }
.ga-modes { display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: .4rem .75rem; margin-top: .5rem; }
.ga-mode { display: flex; align-items: center; justify-content: space-between; gap: .5rem; margin: 0; font-weight: 600; }
.ga-mode select { width: auto; margin: 0; }
/* Checkout guiado: listas en dos columnas, fotos por paso. */
.cf-body ul, .cf-list2 { columns: 2; column-gap: 1.2rem; padding-left: 1.1rem; margin: .2rem 0 .5rem; }
.cf-body li, .cf-list2 li { break-inside: avoid; margin: .1rem 0; }
.cf-photo { margin: .35rem 0; } .cf-photo-l { font-weight: 600; font-size: .92rem; }
.cf-req { font-size: .72rem; font-weight: 600; color: var(--warn); text-transform: uppercase; letter-spacing: .03em; }
.ck-photos { margin: .5rem 0; }
.cf-body ul.one-col { columns: 1; }
.kpi.kpi-alert { border-left: 4px solid var(--danger); } .kpi.kpi-alert .value { color: var(--danger); }
.dep-photos { display: flex; gap: .35rem; flex-wrap: wrap; margin-top: .3rem; }
.dep-photos img { width: 64px; height: 64px; object-fit: cover; border-radius: 6px; border: 1px solid var(--border); }
/* «Algo que reportar». */
.rp-types { display: grid; grid-template-columns: 1fr 1fr; gap: .4rem; margin-bottom: .5rem; }
.rp-type { padding: .65rem .6rem; text-align: left; background: var(--surface); border: 1px solid var(--border); border-radius: 10px; font-size: .92rem; box-shadow: none; }
.rp-type.on { background: var(--brand); color: var(--brand-ink); border-color: var(--brand); }
.rp-big img { width: 120px; height: 120px; }
/* Revisión de inventario: pasos en viñetas y lo que lleva cada bolsa en dos columnas. */
.inv-steps { list-style: none; padding: 0; margin: 0 0 .6rem; } .inv-steps li { position: relative; padding-left: 1.5rem; margin: .25rem 0; }
.inv-steps li::before { content: '✓'; position: absolute; left: 0; color: var(--brand); font-weight: 700; }
.inv-2col { display: grid; grid-template-columns: 1fr 1fr; gap: .8rem; } .inv-2col ul { margin: .3rem 0 0; padding-left: 1.1rem; } .inv-2col li { margin: .1rem 0; font-size: .92rem; }
/* Portal: cobros y productos, cada uno en una sola línea. */
.pay-line, .sup-line { display: flex; align-items: center; gap: .4rem; flex-wrap: wrap; margin: .6rem 0; }
.pay-head { font-size: .78rem; font-weight: 700; text-transform: uppercase; letter-spacing: .05em; color: var(--muted); margin-right: .1rem; }
.pay-line .pay-cell { display: inline-flex; flex-direction: column; padding: .3rem .55rem; border-radius: 10px; line-height: 1.1; }
.pay-line .pay-l { font-size: .66rem; } .pay-line .pay-n { font-size: .95rem; }
.sup-chip { display: inline-flex; align-items: center; gap: .35rem; padding: .25rem .3rem .25rem .6rem; background: var(--surface); border: 1px solid var(--border); border-radius: 999px; font-weight: 600; font-size: .88rem; }
.sup-chip button { padding: .15rem .55rem; border-radius: 999px; min-height: 0; }
.sup-chip .sup-incoming { font-weight: 500; font-size: .8rem; }
/* Portal de limpieza en el móvil: Limpiezas · Ajustes · Salir arriba, sin el menú ☰. */
.topbar.top-nav { justify-content: flex-start; gap: .25rem; padding: .45rem 12px; }
.top-nav a { display: inline-flex; align-items: center; gap: .35rem; padding: .45rem .75rem; border-radius: 999px; color: #f4f1ea; text-decoration: none; font-weight: 600; font-size: .92rem; }
.top-nav a .ico { width: 17px; height: 17px; color: var(--side-icon); }
.top-nav a.active { background: rgba(255,255,255,.14); }
.top-nav #logout-top { margin-left: auto; color: #f4f1ea; font-size: .88rem; padding: .4rem .7rem; }
/* Portal de limpieza: barra de arriba con el logo y «Kiwi House», y las pestañas debajo. */
.topbar.top-nav { flex-direction: column; align-items: stretch; gap: .35rem; padding: .6rem 14px .5rem; }
.top-brand { display: flex; align-items: center; gap: .55rem; font-family: var(--serif); font-weight: 600; font-size: 1.15rem; letter-spacing: .04em; color: #f4f1ea; }
.top-brand .brand-logo { width: 34px; height: 34px; border-radius: 50%; }
.top-brand #logout-top { margin-left: auto; font-family: inherit; }
.top-tabs { display: flex; gap: .3rem; }
.pay-head-row { margin: 1.1rem 0 .5rem; }
.pay-line, .sup-line { margin: 0 0 .4rem; }
/* Portal de limpieza en el móvil: cada limpieza en una tarjetita de dos filas, sin desplazar a la derecha. */
@media (max-width: 820px) {
  body.portal-limpieza #ch-table .xt-wrap { overflow: visible; }
  body.portal-limpieza #ch-table table.xt, body.portal-limpieza #ch-table table.xt tbody { display: block; width: 100%; min-width: 0; }
  body.portal-limpieza #ch-table table.xt thead { display: none; }
  body.portal-limpieza #ch-table table.xt tbody tr { display: flex; flex-wrap: wrap; align-items: center; gap: .45rem .6rem; padding: .7rem .8rem; border-top: 1px solid var(--border); }
  body.portal-limpieza #ch-table table.xt tbody tr:first-child { border-top: 0; }
  body.portal-limpieza #ch-table table.xt td { display: block; padding: 0; border: 0; white-space: normal; max-width: none; }
  body.portal-limpieza #ch-table table.xt td:empty { display: none; }
  /* Fila 1: cuándo · piso (· habitación) · precio. Fila 2: estado y botones. */
  body.portal-limpieza #ch-table table.xt tbody tr::before { content: ''; order: 4; flex-basis: 100%; height: 0; }
  body.portal-limpieza #ch-table table.xt td { order: 5; }
  body.portal-limpieza #ch-table table.xt td:nth-child(-n+2) { order: 1; margin-right: .2rem; }
  body.portal-limpieza #ch-table table.xt td:nth-child(3):not(:has(select, button)) { order: 1; font-weight: 600; } /* habitación (checkouts) */
  body.portal-limpieza #ch-table table.xt td.num { order: 3; margin-left: auto; }
  body.portal-limpieza #ch-table table.xt td select { min-width: 0; width: auto; padding: .3rem .5rem; font-size: .88rem; }
  body.portal-limpieza #ch-table table.xt tbody tr { gap: .45rem .35rem; padding: .7rem .6rem; }
  body.portal-limpieza #ch-table table.xt td select { padding: .3rem .3rem; font-size: .82rem; }
  body.portal-limpieza #ch-table table.xt td button.sm { padding: .3rem .55rem; font-size: .82rem; }
  body.portal-limpieza #ch-table table.xt td button.sm .ei { display: none; }
  body.portal-limpieza #ch-table table.xt td:has(> .muted:only-child) { display: none; }
}
.pw-list { background: var(--surface); border: 1px solid var(--border); border-radius: 12px; overflow: hidden; max-width: 520px; }
.pw-row { display: flex; align-items: center; gap: .6rem; padding: .45rem .7rem; border-top: 1px solid var(--border); font-size: .92rem; }
.pw-row:first-child { border-top: 0; }
.pw-wk { flex: 1; min-width: 0; }
.pw-amt { font-weight: 700; font-variant-numeric: tabular-nums; }
.pw-st { font-size: .8rem; font-weight: 600; padding: .15rem .5rem; border-radius: 999px; white-space: nowrap; }
.pw-st.ok { background: #e3f1e6; color: #1e6b34; }
.pw-st.due { background: #fbeedd; color: #8a5a12; }
.pw-st.now { background: var(--bg); color: var(--muted); }
@media (prefers-color-scheme: dark) { body.portal-limpieza .pw-st.ok { background: #16351f; color: #8fd4a2; } body.portal-limpieza .pw-st.due { background: #3a2a12; color: #f0c27a; } }
/* Modo oscuro del móvil: el portal también en oscuro (si no, el texto claro no se lee sobre el fondo claro). */
@media (prefers-color-scheme: dark) { body.portal-limpieza { --bg: #0c1925; --border: #223a50; } }
/* …con los recuadros (asignaciones, lista, calendario, accesos, cobros, pagos, productos) bastante más claros que el fondo,
   para que se distingan bien. */
@media (prefers-color-scheme: dark) {
  body.portal-limpieza { --surface: #1d3550; --surface-2: #244160; --border: #34557a; --card-bg: linear-gradient(180deg, #20395a 0%, #1b324e 100%); }
  body.portal-limpieza .asig-card, body.portal-limpieza .table-wrap, body.portal-limpieza .xt-wrap, body.portal-limpieza .pw-list,
  body.portal-limpieza .pay-line .pay-cell, body.portal-limpieza .sup-chip, body.portal-limpieza .lock-row, body.portal-limpieza .door-card { background: var(--surface); }
  body.portal-limpieza table.xt th { background: var(--surface-2); }
  body.portal-limpieza .asig-card.active { background: var(--surface-2); }
}
/* Portal de limpieza: barra nueva solo en el móvil; en el ordenador, el ☰ y el menú de la izquierda de siempre. */
.topbar.top-nav { display: none; }
@media (max-width: 820px) { body.portal-limpieza .topbar.topbar-std { display: none; } body.portal-limpieza .topbar.top-nav { display: flex; } }

/* Smartlocks: una tarjeta por piso (móvil primero; en PC, rejilla) */
.lk-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: .75rem; margin: .5rem 0 1rem; }
.lk-card { background: var(--card-bg); border: 1px solid var(--border); border-radius: 14px; padding: .75rem; box-shadow: var(--shadow); }
.lk-prop { font-size: 1.15rem; margin: 0 0 .5rem; letter-spacing: .02em; }
.lk-lock { border-top: 1px solid var(--border); padding: .6rem 0 .2rem; }
.lk-lock:first-of-type { border-top: 0; padding-top: 0; }
.lk-top { display: flex; align-items: center; gap: .6rem; }
.lk-ico { font-size: 1.6rem; line-height: 1; }
.lk-name { display: flex; flex-direction: column; flex: 1; min-width: 0; }
.lk-name .small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.lk-dot { width: 14px; height: 14px; border-radius: 50%; flex: none; background: #9ca3af; }
.lk-dot.good { background: #22c55e; box-shadow: 0 0 0 3px rgba(34,197,94,.2); }
.lk-dot.bad { background: #ef4444; box-shadow: 0 0 0 3px rgba(239,68,68,.2); }
.lk-meta { display: flex; flex-wrap: wrap; gap: .35rem; margin: .4rem 0 .2rem; align-items: center; }
.lk-batt { font-size: .85rem; font-weight: 600; padding: .1rem .5rem; border-radius: 999px; background: var(--ok-soft); color: var(--ok); }
.lk-batt.mid { background: var(--warn-soft); color: var(--warn); }
.lk-batt.bad { background: var(--danger-soft); color: var(--danger); }
.lk-last { margin: .15rem 0 .45rem; }
.lk-btns { display: flex; gap: .5rem; }
.lk-btns .lk-open { flex: 1; font-size: 1.05rem; padding: .7rem; border-radius: 10px; }
.lk-btns .lk-close { padding: .7rem .9rem; border-radius: 10px; }
details.lk-more { margin: .6rem 0; border: 1px solid var(--border); border-radius: 12px; padding: .5rem .75rem; }
details.lk-more > summary { cursor: pointer; font-weight: 600; padding: .3rem 0; }
@media (max-width: 600px) {
  .lk-grid { grid-template-columns: 1fr; }
  details.lk-more { padding: .4rem .5rem; }
  details.lk-more .table-wrap { overflow-x: auto; }
}

/* Limpiezas: barra de acciones de las seleccionadas */
.bulk-bar { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; position: sticky; top: .5rem; z-index: 5; margin: .5rem 0; border: 2px solid var(--brand); }

/* Bookings: etiquetas NEW bien visibles */
.bk-new { display: inline-block; padding: .05rem .45rem; border-radius: 999px; background: var(--danger); color: #fff; font-size: .72rem; font-weight: 700; letter-spacing: .02em; }
.bk-new.ok { background: var(--ok); } .bk-new.warn { background: var(--warn); }
/* Calendario de habitaciones (vista gráfica): la columna de la habitación y los meses quedan fijos al desplazarse */
.rc-wrap { overflow: auto; max-height: 75vh; border: 1px solid var(--border); border-radius: 10px; background: var(--surface); -webkit-overflow-scrolling: touch; }
.rc-grid { position: relative; }
.rc-head, .rc-row, .rc-flat { display: flex; }
.rc-head { position: sticky; top: 0; z-index: 4; background: var(--surface); border-bottom: 1px solid var(--border); }
.rc-name { position: sticky; left: 0; z-index: 3; width: var(--rc-label); min-width: var(--rc-label); padding: .25rem .5rem; background: var(--surface);
  border-right: 1px solid var(--border); overflow: hidden; white-space: nowrap; text-overflow: ellipsis; font-size: .85rem; line-height: 1.15; }
.rc-row .rc-name { display: flex; flex-direction: column; justify-content: center; }
.rc-row .rc-name .rc-l { display: block; min-width: 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
.rc-corner { z-index: 5; font-weight: 600; }
.rc-flat .rc-name { font-weight: 700; color: var(--brand); background: var(--surface-2); }
.rc-flat .rc-track { background: var(--surface-2); height: 1.6rem; }
.rc-track { position: relative; height: 2.6rem; border-bottom: 1px solid var(--border); flex: none; }
.rc-months { height: 1.8rem; border-bottom: none; }
.rc-month { position: absolute; top: 0; bottom: 0; padding: .35rem .4rem; font-size: .8rem; font-weight: 600; text-transform: capitalize; border-left: 1px solid var(--border); white-space: nowrap; overflow: hidden; }
.rc-line { position: absolute; top: 0; bottom: 0; width: 1px; background: var(--border); }
.rc-line.half { opacity: .45; }
.rc-today { position: absolute; top: 0; bottom: 0; width: 2px; background: var(--danger); z-index: 2; }
.rc-bar { position: absolute; top: .35rem; height: 1.9rem; border-radius: 6px; color: #fff; font-size: .78rem; font-weight: 600; display: flex; align-items: center;
  overflow: hidden; white-space: nowrap; cursor: pointer; box-shadow: inset 0 0 0 1px rgba(0,0,0,.08); z-index: 1; }
.rc-bar span { padding: 0 .4rem; position: sticky; left: calc(var(--rc-label) + 2px); overflow: hidden; text-overflow: ellipsis; }
.rc-free { background: repeating-linear-gradient(135deg, var(--ok-soft) 0 8px, transparent 8px 14px); color: var(--ok); box-shadow: inset 0 0 0 1.5px var(--ok); }
.rc-req { top: auto; bottom: .15rem; height: 1rem; font-size: .7rem; background: var(--warn-soft); color: var(--warn); box-shadow: inset 0 0 0 1.5px var(--warn); border-radius: 4px; z-index: 2; opacity: .95; }
.rc-legend { display: flex; flex-wrap: wrap; gap: .3rem .9rem; margin-bottom: .5rem; }
.rc-key { display: inline-flex; align-items: center; gap: .3rem; }
.rc-key i { width: .9rem; height: .9rem; border-radius: 3px; display: inline-block; }
.rc-key i.rc-free-key { background: repeating-linear-gradient(135deg, var(--ok-soft) 0 4px, transparent 4px 7px); box-shadow: inset 0 0 0 1.5px var(--ok); }
.rc-key i.rc-req-key { background: var(--warn-soft); box-shadow: inset 0 0 0 1.5px var(--warn); }
.rc-key i.rc-today-key { width: 3px; background: var(--danger); }

/* Bookings: una fila = una línea (como en Excel); el detalle del calendario, entero al pasar el ratón */
.bk-one-line td { white-space: nowrap; }
.bk-fit { display: inline-block; max-width: 24rem; overflow: hidden; text-overflow: ellipsis; vertical-align: middle; }

/* ---------- Ventas: secciones, por zona y mercado ---------- */
.sales-sections { grid-template-columns: repeat(3, 1fr); margin-bottom: 12px; }
.grade-A { background: #dcfce7; color: #166534; font-weight: 700; }
.grade-B { background: #fef9c3; color: #854d0e; font-weight: 700; }
.grade-C { background: #f1f5f9; color: #475569; }
.zone-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 12px; }
.zone-card h2, .mk-city h2 { margin: 0; font-size: 1.15rem; }
.zone-card.empty-zone { opacity: .7; }
.zone-stats { display: flex; flex-wrap: wrap; gap: 4px; margin: 6px 0; }
.zone-stages { display: flex; height: 18px; border-radius: 9px; overflow: hidden; margin: 6px 0 8px; font-size: .7rem; }
.zone-stages .zs { display: flex; align-items: center; justify-content: center; color: #fff; min-width: 18px; background: #94a3b8; }
.zs-nuevo { background: #94a3b8 !important; } .zs-contactado { background: #60a5fa !important; } .zs-info { background: #3b82f6 !important; }
.zs-reunion { background: #6366f1 !important; } .zs-estudio { background: #8b5cf6 !important; } .zs-propuesta { background: #d97706 !important; }
.zs-negociacion { background: #ea580c !important; } .zs-cerrado { background: #16a34a !important; } .zs-perdido { background: #dc2626 !important; }
.zone-leads { list-style: none; margin: 0; padding: 0; }
.zone-leads li { padding: 8px 6px; border-top: 1px solid var(--line, #e5e7eb); cursor: pointer; border-radius: 6px; }
.zone-leads li:hover { background: rgba(31, 69, 101, .06); }
.zone-leads li.lost { opacity: .5; }
.zl-top { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.zl-info { margin-top: 2px; }
.mk-tabs { flex-wrap: wrap; }
.mk-prio { font-weight: 600; color: var(--brand, #1f4565); margin: 4px 0 8px; }
.mk-city h4 { margin: 10px 0 4px; font-size: .9rem; }
.mk-list { margin: 0; padding-left: 1.1rem; line-height: 1.5; }
.mk-list li { margin-bottom: 4px; }
.mk-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 12px; }
.mk-cards h3 { margin: 0 0 6px; font-size: 1rem; }
.mk-n { display: inline-flex; width: 1.6rem; height: 1.6rem; border-radius: 50%; background: var(--brand, #1f4565); color: #fff; align-items: center; justify-content: center; font-size: .85rem; }
@media (max-width: 640px) {
  .sales-sections { grid-template-columns: 1fr 1fr 1fr; }
  .sales-sections .ops-card span { font-size: .8rem; }
  .zone-grid, .mk-cards { grid-template-columns: 1fr; }
}

/* ---------- Ventas › Prospectos ---------- */
.sales-sections { grid-template-columns: repeat(4, 1fr); }
.p-zones { grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); margin-bottom: 12px; }
.p-queue-head { display: flex; justify-content: space-between; align-items: center; gap: 8px; flex-wrap: wrap; }
.p-queue { display: grid; grid-template-columns: repeat(auto-fill, minmax(340px, 1fr)); gap: 12px; margin-top: 12px; }
.p-q textarea { width: 100%; margin: 8px 0; font-size: .9rem; }
@media (max-width: 640px) {
  .sales-sections { grid-template-columns: 1fr 1fr; }
  .p-queue { grid-template-columns: 1fr; }
}

/* ---------- Mensajería ---------- */
.msg-cards { grid-template-columns: repeat(4, minmax(0, 1fr)); }
@media (max-width: 760px) { .msg-cards { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.msg-modal .msg-text { font-family: ui-monospace, Consolas, monospace; font-size: .85rem; line-height: 1.45; width: 100%; }
.msg-modal label { display: block; margin: .5rem 0; }
.msg-timing { display: flex; gap: 1rem; flex-wrap: wrap; }
.msg-vars { display: flex; gap: .3rem; flex-wrap: wrap; align-items: center; }
.msg-vars .msg-var { font-family: ui-monospace, Consolas, monospace; padding: .1rem .4rem; }
.msg-extras textarea { width: 100%; }
.msg-frame { width: 100%; height: 520px; border: 1px solid var(--line, #ddd); border-radius: 8px; background: #fff; }
.msg-pre { white-space: pre-wrap; font-family: inherit; font-size: .9rem; margin: .4rem 0 0; }
.msg-wa { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: .75rem; }

/* ---------- ⚙️ Automatizaciones ---------- */

.auto-gear { opacity: .8; font-size: .8rem; }
#auto-slot { margin-left: auto; }
.auto-gear:hover { opacity: 1; }
@media (max-width: 760px) { .auto-gear span { display: none; } }
.auto-list { display: grid; gap: .75rem; }
.auto-card { border: 1px solid var(--line, #2a3a4d); border-radius: 12px; padding: .8rem 1rem; }
.auto-card.off { opacity: .7; }
.auto-head { display: flex; gap: .7rem; align-items: center; }
.auto-head > div { flex: 1; }
.auto-ico { font-size: 1.5rem; width: 2.2rem; text-align: center; }
.auto-when { display: inline-block; margin-top: .5rem; padding: .2rem .6rem; border-radius: 999px; background: var(--brand-soft, rgba(80,140,220,.15)); font-size: .85rem; font-weight: 600; }
.auto-fields { display: flex; flex-wrap: wrap; gap: .6rem 1.2rem; align-items: center; margin: .5rem 0; padding: .6rem; border-radius: 10px; background: rgba(127,127,127,.07); }
.auto-block { flex-basis: 100%; }
.auto-label { font-size: .8rem; font-weight: 600; margin-bottom: .3rem; }
.auto-inline { display: inline-flex; gap: .4rem; align-items: center; margin: 0; }
.auto-inline select, .auto-inline input { width: auto; }
.auto-switch { display: inline-flex; gap: .5rem; align-items: center; margin: 0; cursor: pointer; }
.auto-switch input { width: auto; }
.auto-chips { display: flex; flex-wrap: wrap; gap: .35rem; }
.chip { border-radius: 999px; padding: .2rem .7rem; font-size: .8rem; border: 1px solid var(--line, #2a3a4d); background: transparent; opacity: .6; }
.chip.on { opacity: 1; background: var(--brand-soft, rgba(80,140,220,.2)); border-color: var(--brand, #4a8fd6); font-weight: 600; }
.chip.add { opacity: 1; border-style: dashed; }
.auto-sources { display: grid; gap: .35rem; margin-bottom: .4rem; }
.auto-src { display: flex; gap: .35rem; align-items: center; }
.auto-src input { min-width: 0; }
.auto-src input[data-s=url] { flex: 2; }
.auto-src input[data-s=name] { flex: 1.2; }
@media (max-width: 760px) { .auto-src { flex-wrap: wrap; } .auto-src input { flex-basis: 100%; max-width: none !important; } }
.auto-actions { justify-content: flex-end; gap: .4rem; flex-wrap: wrap; margin-top: .4rem; }
.danger-text { color: var(--danger, #e5484d); }
/* Social › Kiwi Club */
.club-cards { grid-template-columns: repeat(4, minmax(0, 1fr)); margin-bottom: 1rem; }
@media (max-width: 760px) { .club-cards { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.ops-card.static { cursor: default; }
a.ops-card { text-decoration: none; color: inherit; }
.club-city { margin: 1rem 0 .4rem; }
.club-events { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: .5rem; }
.club-ev { display: flex; gap: .6rem; padding: .5rem .6rem; border-radius: 10px; background: rgba(127,127,127,.07); }
.club-ev-when { min-width: 4.8rem; font-weight: 700; font-size: .8rem; color: var(--brand, #4a8fd6); }
.club-ev .badge { margin-left: .3rem; font-size: .7rem; }
.club-settings summary { cursor: pointer; }

/* Inicio › Pendientes ahora */
.home-pending { margin-bottom: 1.2rem; }
.pend-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: .45rem; }
.pend { display: flex; align-items: center; gap: .55rem; text-align: left; padding: .55rem .75rem; border-radius: 10px; border: 1px solid transparent; }
.pend.danger { background: rgba(229,72,77,.14); border-color: rgba(229,72,77,.45); }
.pend.warn { background: rgba(224,145,40,.13); border-color: rgba(224,145,40,.4); }
.pend-ico { font-size: 1.1rem; }
.pend-title { flex: 1; font-weight: 600; font-size: .88rem; line-height: 1.2; }
.pend-n { font-weight: 800; font-size: 1.05rem; min-width: 1.6rem; text-align: right; }
.pend.danger .pend-n { color: var(--danger, #e5484d); }
.pend.warn .pend-n { color: #e09128; }
#cl-access.has { background: rgba(224,145,40,.16); border-color: rgba(224,145,40,.55); } /* revision-accesos */
.club-cards .ops-card { flex-direction: column; align-items: flex-start; gap: .2rem; }

/* Smartlocks: recuadros arriba con globito de fallos · Check-in/out: aviso de self check-in */
.lk-tabs { grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); }
.lk-tabs .ops-card.has-bad:not(.active) { border-color: var(--danger); }
.bubble.warn { background: #e09128; }
.lk-pane > h3:first-child { margin-top: .4rem; }
.guest-alert { margin: .6rem 0; }
.guest-alert ul { margin: .4rem 0 0; padding-left: 1.1rem; }
.guest-alert li { margin: .2rem 0; }
.guest-alert.danger { border-color: var(--danger); background: var(--danger-soft); }
.guest-alert.warn { border-color: rgba(224,145,40,.5); background: rgba(224,145,40,.12); }
@media (max-width: 760px) { .lk-tabs { grid-template-columns: 1fr 1fr; } .lk-tabs .ops-card:last-child:nth-child(odd) { grid-column: span 2; } }

/* Social › Partners › Candidatos */
.cell-clip { display: inline-block; max-width: 34ch; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; vertical-align: bottom; }

/* Desplegable con casillas (varias opciones a la vez) */
.mp { display: inline-block; position: relative; max-width: 100%; }
.mp-btn { width: 100%; min-width: 90px; text-align: left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-weight: normal; }
table.xt .xt-filters .mp { display: block; }
table.xt .xt-filters .mp-btn { padding: .25rem .4rem; font-size: .8rem; margin: 0; }
.mp.on .mp-btn { border-color: var(--brand); background: var(--brand-soft); }
.mp-pop { position: fixed; z-index: 200; background: var(--surface); border: 1px solid var(--border); border-radius: 10px; box-shadow: 0 8px 28px rgba(0,0,0,.25);
  min-width: 13rem; max-width: min(22rem, calc(100vw - 16px)); max-height: min(60vh, 26rem); overflow-y: auto; padding: 0 0 .3rem; text-transform: none; letter-spacing: 0; font-weight: normal; text-align: left; }
.mp-opt { display: flex; justify-content: flex-start; align-items: center; gap: .5rem; padding: .45rem .8rem; cursor: pointer; font-size: .9rem; margin: 0; color: var(--text); }
.mp-opt:hover { background: var(--surface-2, rgba(0,0,0,.04)); }
.mp-opt input, table.xt .xt-filters .mp-opt input { width: 18px; min-width: 0; height: 18px; padding: 0; margin: 0; flex: 0 0 auto; }
.mp-opt span { flex: 1; text-align: left; }
.mp-group { padding: .45rem .8rem .15rem; font-size: .72rem; text-transform: uppercase; letter-spacing: .05em; color: var(--muted); }
.mp-gopt { display: flex; align-items: center; gap: .45rem; cursor: pointer; font-weight: 700; color: var(--text); }
.mp-gopt input { width: auto; margin: 0; }
/* En el móvil el desplegable sale abajo como una hoja, a todo el ancho, por encima de la tabla. */
.mp-pop.mp-sheet { left: 8px; right: 8px; top: auto; bottom: 8px; width: auto; max-width: none; max-height: 60vh; overflow: auto; z-index: 1000; box-shadow: 0 -6px 30px rgba(0,0,0,.45); }
.mp-foot { position: sticky; top: 0; display: flex; gap: .4rem; justify-content: space-between; padding: .4rem .6rem; background: var(--surface); border-bottom: 1px solid var(--border); }

/* Limpiezas: seleccionar varias y eliminar (Reportes, Ropa blanca) */
.bp-bar { gap: .5rem; flex-wrap: wrap; align-items: center; margin: .3rem 0; }
.bp-act { gap: .4rem; align-items: center; }

/* Check-in/out: instrucciones de self check-in enviadas (email / WhatsApp) */
.nm { font-weight: 700; white-space: nowrap; }
.nm + .nm { margin-left: .35rem; }

/* Subsecciones como páginas: recuadros arriba y solo la elegida debajo */
.sec-tabs { margin-bottom: .75rem; }
.sec-tabs .ops-card { justify-content: center; text-align: center; min-height: 3.2rem; }
/* Subsecciones dentro de una sección: botones más bajos y sin repetir el título. */
.sec-pane .sec-pane > .sec-title { display: none; }
.sec-pane .sec-tabs .ops-card { min-height: 2.4rem; }
/* Limpiezas: hora real distinta de la prevista. */
.real-off { color: var(--warn); font-weight: 600; }
.wk-real { left: 2px; width: calc(100% - 4px); border: 2px dashed var(--warn); border-radius: 6px; background: color-mix(in srgb, var(--warn) 10%, transparent);
  font-size: .68rem; overflow: hidden; cursor: pointer; z-index: 0; }
.wk-real span { display: block; padding: 1px 4px; color: var(--warn); font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.wk-real .wk-real-ok { display: inline-block; margin: 0 4px; padding: 0 .35rem; border-radius: 4px; background: var(--warn); color: #2e2208; font-weight: 700; }
.wk-real:hover { background: color-mix(in srgb, var(--warn) 22%, transparent); }
/* Aviso de cambios de día u hora y franja «Hoy en los pisos»: en el móvil, sin scroll a la derecha. */
.tv-line { margin: .35rem 0; line-height: 1.5; }
.tv-line button { margin-left: .3rem; }
@media (max-width: 700px) {
  table.today-team, table.today-team tbody { display: block; }
  table.today-team tr { display: flex; flex-wrap: wrap; align-items: center; gap: 0 .45rem; padding: .35rem 0; border-bottom: 1px solid var(--border); }
  table.today-team td { display: block; border: 0; padding: 0; white-space: normal; }
  table.today-team td:nth-child(5) { flex-basis: 100%; }
}
.wk-real-key { display: inline-block; width: 1.1rem; height: .7rem; border: 2px dashed var(--warn); border-radius: 3px; vertical-align: middle; }
.sec-pane > .sec-title { margin-top: .25rem; }

/* Ventas: etapa «Pendiente» (por contactar) en la barra por zonas */
.zs-pendiente { background: #cbd5e1 !important; }

.warn-text { color: #d97706; font-weight: 600; }

/* Ventas: las dos líneas (Management / Intermediación) arriba, más grandes */
.sales-lines { margin-bottom: .5rem; }
.sales-lines .ops-card { flex-direction: column; align-items: flex-start; min-height: 3.6rem; }
.sales-lines .ops-card strong { font-size: 1.05rem; }

/* Sin scroll a la derecha (pedido por el usuario): columnas más estrechas, filtros que se encogen y textos largos cortados con «…»
   (el texto entero sale al pasar el ratón). Si una tabla aún no cabe, la barra lateral queda solo como último recurso. */
table.xt td { max-width: 24ch; padding: .3rem .4rem; }
table.xt thead th { padding-left: .4rem; padding-right: .4rem; }
table.xt .xt-filters input, table.xt .xt-filters select { min-width: 0; }
table.xt td.xt-wide { min-width: 12rem; }
.bk-fit .small { display: inline-block; max-width: 16rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; vertical-align: bottom; }
table.xt td .row.nowrap { flex-wrap: nowrap; }

/* Sin scroll a la derecha (2): lo que no cabe en su celda se corta con «…» en vez de pisar la columna de al lado;
   las celdas con botones o desplegables crecen lo justo; los filtros «Todos ▾» ya no fuerzan columnas anchas. */
table.xt td:has(button, select, input, .btn) { max-width: none; }
table.xt td:not(:has(button, select, input, .btn)) { overflow: hidden; text-overflow: ellipsis; }
table.xt td select { width: auto; max-width: 10rem; }
table.xt td.small { max-width: 18ch; }
table.xt .xt-filters .mp-btn { min-width: 0; }

/* usuarios-columnas: botón redondo pequeño para editar y acciones dentro del modal */
.edit-dot { width: 2rem; height: 2rem; padding: 0; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; font-size: .85rem; line-height: 1; }
.edit-more { display: flex; flex-wrap: wrap; gap: .4rem; margin: .8rem 0 .2rem; padding-top: .8rem; border-top: 1px solid rgba(255,255,255,.08); }

/* usuarios-compacto */
table.users-tbl td { vertical-align: middle; }
table.users-tbl a[data-open] { color: inherit; text-decoration: none; border-bottom: 1px dashed rgba(255,255,255,.3); }
table.users-tbl a[data-open]:hover { border-bottom-color: currentColor; }
table.users-tbl td .muted { overflow-wrap: anywhere; }
table.users-tbl td, table.users-tbl th { white-space: normal; }
table.users-tbl td:last-child { white-space: nowrap; }

/* portal-solape: en el móvil la lista de limpiezas crece con su contenido (con altura máxima se salía encima de lo de abajo) */
@media (max-width: 820px) {
  body.portal-limpieza #ch-table .xt-wrap { max-height: none; overflow: visible; }
  body.portal-limpieza #ch-table table.xt td .addr-line { margin: .1rem 0 0; }
}

/* xt-seleccion: casilla por fila y barra de acciones para varias a la vez */
table.xt th.xt-sel, table.xt td.xt-sel { width: 2.2rem; min-width: 2.2rem; text-align: center; padding-left: .4rem; padding-right: .2rem; cursor: pointer; }
table.xt .xt-sel input { width: 18px; height: 18px; min-width: 0; margin: 0; padding: 0; cursor: pointer; accent-color: var(--brand); }
table.xt tr.xt-picked > td { background: var(--brand-soft); }
.xt-selbar { display: inline-flex; align-items: center; gap: .4rem; flex-wrap: wrap; padding: .25rem .5rem; border-radius: 10px; background: var(--brand-soft); }
.xt-selbar .xt-n { font-size: .85rem; margin-right: .2rem; }

/* adenda-minimal: estado en un desplegable y campanita pequeña, en una sola línea */
.ad-cell { display: flex; align-items: center; gap: .35rem; flex-wrap: nowrap; }
.ad-cell .ad-sel { width: auto; min-width: 0; margin: 0; padding: .25rem .5rem; font-size: .85rem; border-radius: 999px;
  color: var(--danger, #e5484d); border-color: rgba(229,72,77,.45); background: rgba(229,72,77,.10); font-weight: 600; }
.ad-cell .ad-bell { padding: .2rem .45rem; font-size: .85rem; line-height: 1; white-space: nowrap; }
.ad-cell .ad-when { font-size: .75rem; color: var(--muted); }

/* calendario-limpieza */
.st-line { white-space: nowrap; margin: .1rem 0; }
.ch-list { margin-top: .25rem; padding: .2rem .5rem; font-size: .8rem; }

/* huespedes-seccion: botones de arriba de Huéspedes (uno por tema, con su número) */
.guest-bar { display: flex; flex-wrap: wrap; gap: .4rem; margin: .2rem 0 1rem; }
.guest-bar .gb-btn { display: inline-flex; align-items: center; gap: .4rem; padding: .45rem .8rem; border-radius: 999px; font-size: .9rem; }
.guest-bar .gb-btn.active { background: var(--brand-soft); border-color: var(--brand); color: var(--brand); font-weight: 600; }
.guest-bar .bubble { position: static; }
.gb-crumb { margin: 0 0 .1rem; }
.gb-crumb a { text-decoration: none; }
.ad-sel.ok { color: inherit; border-color: var(--border); background: transparent; font-weight: 400; }
@media (max-width: 700px) { .guest-bar { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; margin-left: -2px; } .guest-bar .gb-btn { flex: none; } }

/* bookings-pendientes: segunda fila con lo pendiente de huéspedes */
.bk-pend { display: flex; align-items: center; gap: .6rem; flex-wrap: wrap; margin: -.2rem 0 .9rem; }
.bk-pend .ops-card { text-decoration: none; flex: 0 0 auto; min-width: 0; padding: .55rem .9rem; }

/* huespedes-recuadros: recuadros arriba (el elegido, marcado) y el tema debajo sin su título propio */
.g-tiles { margin: .3rem 0 1.2rem; }
.g-tiles .home-tile.active { border-color: var(--brand); box-shadow: 0 0 0 2px var(--brand-soft), var(--shadow); }
.g-tiles .home-tile.active .ht-title { color: var(--brand); }
.g-sub h1 { display: none; }
.g-sub > .row.spread:first-child { justify-content: flex-end; }
@media (max-width: 700px) { .g-tiles { grid-template-columns: 1fr 1fr; gap: .5rem; } .g-tiles .home-tile { padding: .65rem .75rem; } .g-tiles .home-tile .ht-value { font-size: 1.6rem; } }

/* bot-conversacion: la conversación con el bot como un chat */
.bot-conv { display: flex; flex-direction: column; gap: .45rem; max-height: 60vh; overflow-y: auto; padding: .2rem; }
.bc-msg { max-width: 85%; padding: .45rem .7rem; border-radius: 12px; font-size: .9rem; line-height: 1.4; }
.bc-in { align-self: flex-start; background: var(--surface-2, rgba(255,255,255,.06)); }
.bc-bot { align-self: flex-end; background: var(--brand-soft); }

/* Reporte propietarios: el propietario elegido tiene que verse de un vistazo (borde dorado, letra grande). */
.owner-pick { display: flex; align-items: center; gap: .5rem; margin: 0; font-size: .8rem; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: var(--gold); }
.owner-pick select { width: auto; max-width: 70vw; font-size: 1.05rem; font-weight: 700; text-transform: none; letter-spacing: 0; color: var(--text);
  border: 2px solid var(--gold); background-color: var(--brand-soft); box-shadow: 0 0 0 3px color-mix(in srgb, var(--gold) 22%, transparent); }

/* bot-historial: tus mensajes desde la app, en otro color */
.bc-tu { align-self: flex-end; background: rgba(120,180,120,.18); }

/* portal-movil: portal del propietario en el móvil — habitaciones en tarjetas, sin scroll lateral */
.portal-tbl td { white-space: normal; overflow-wrap: anywhere; }
.portal-tbl td.num { white-space: nowrap; }
.portal-cards { display: none; }
@media (max-width: 700px) {
  #portal-rooms { display: none; }
  .portal-cards { display: grid; gap: .5rem; }
  .portal-card { padding: .6rem .75rem; margin: 0; }
  .portal-card .row { gap: .5rem; flex-wrap: nowrap; }
}

/* inicio-compacto-web: en el ordenador, los temas van uno al lado del otro según lo que ocupan (sin huecos grandes) y cada recuadro es
   más bajo: título y explicación a la izquierda, el número grande a la derecha. En el móvil no cambia nada. */
@media (min-width: 1000px) {
  .home-groups { display: flex; flex-wrap: wrap; gap: .4rem 1.75rem; align-items: flex-start; }
  .home-groups .home-group { flex: 1 1 auto; min-width: 0; margin: 0 0 .6rem; }
  .home-groups .home-group-title { font-size: .78rem; margin-bottom: .4rem; padding-bottom: .2rem; }
  .home-groups .home-group .home-tiles { display: flex; flex-wrap: wrap; gap: .45rem; }
  .home-groups .home-tile { flex: 1 1 170px; max-width: 250px; display: grid; grid-template-columns: minmax(0, 1fr) auto;
    grid-template-areas: "top val" "sub val"; align-items: center; column-gap: .6rem; row-gap: .1rem; padding: .5rem .7rem; border-radius: 10px; }
  .home-groups .home-tile .ht-top { grid-area: top; font-size: .68rem; letter-spacing: .03em; line-height: 1.25; }
  .home-groups .home-tile .ht-value { grid-area: val; font-size: 1.55rem; line-height: 1; }
  .home-groups .home-tile .ht-value:empty { display: none; }
  .home-groups .home-tile .ht-sub { grid-area: sub; font-size: .74rem; line-height: 1.3; -webkit-line-clamp: 2; }
  .home-groups .home-tile.occ { display: flex; flex-direction: column; flex-basis: 230px; max-width: 280px; }
  .home-groups .home-tile.occ .ht-value { font-size: 1.4rem; }
  .home-groups .occ-ring { width: 46px; height: 46px; }
}

/* ci-movil */ /* Check-in/out en el móvil: nada se sale por la derecha */
#guest-alert, #late-arrivals { overflow-wrap: anywhere; }
@media (max-width: 820px) {
  .ops-cards.ci-ops { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .ops-filters.ci-ops > * { min-width: 0; max-width: 100%; }
  .ops-filters.ci-ops .grow, .ops-filters.ci-ops select { flex: 1 1 100%; }
  .ops-filters.ci-ops .ops-dates { flex-wrap: nowrap; width: 100%; }
  .ops-filters.ci-ops .ops-dates input { flex: 1 1 0; min-width: 0; width: auto; }
}

/* huespedes-movil: los recuadros de arriba (filtros) separados del contenido de debajo; en Empadronamiento, los 3 botones en una línea */
.g-sub { border-top: 2px solid var(--border); padding-top: 1rem; margin-top: .2rem; }
@media (max-width: 700px) {
  .g-sub > .row.spread:first-child { flex-wrap: wrap; }
  .g-sub > .row.spread:first-child > .row { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .35rem; width: 100%; }
  .g-sub > .row.spread:first-child > .row > button { margin: 0; padding: .45rem .3rem; font-size: .8rem; line-height: 1.2; white-space: normal; min-width: 0; }
}

/* huespedes-grupos: los recuadros de Huéspedes por temas, cada uno con su título */
.g-groups { display: flex; flex-wrap: wrap; gap: .6rem 1.4rem; margin: .3rem 0 1.2rem; }
.g-group { flex: 2 1 300px; min-width: 0; }
.g-group:first-child { flex-grow: 3; }
.g-gtitle { font-size: .95rem; font-weight: 700; margin: .1rem 0 .45rem; padding-bottom: .3rem; border-bottom: 1px solid var(--border); }
.g-groups .g-tiles { margin: 0; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: .5rem; }

/* xt-movil-apretado: en el móvil las tablas guardan todas sus columnas (lo decidió el usuario), más juntas y con letra algo más pequeña;
   si no caben, la tabla se desplaza a la derecha dentro de su recuadro (no la página). */
@media (max-width: 700px) {
  .xt-wrap { -webkit-overflow-scrolling: touch; overscroll-behavior-x: contain; }
  .xt-bar { gap: .3rem; flex-wrap: wrap; }
  table.xt { font-size: .78rem; }
  table.xt td { padding: .25rem .3rem; max-width: 16ch; }
  table.xt thead th { padding: .3rem .3rem; font-size: .7rem; letter-spacing: 0; }
  table.xt thead tr.xt-filters th { padding: .15rem .2rem; top: 1.6rem; }
  table.xt .xt-filters input, table.xt .xt-filters select, table.xt .xt-filters .mp-btn { font-size: .72rem; padding: .15rem .25rem; min-width: 3.5rem; }
  table.xt td.xt-wide { min-width: 9rem; max-width: 14rem; }
  table.xt td.small { max-width: 13ch; }
  table.xt td select, table.xt td button.sm { font-size: .74rem; padding: .15rem .3rem; }
  table.xt th.xt-sel, table.xt td.xt-sel { width: 1.8rem; min-width: 1.8rem; padding: 0 .2rem; }
  table.xt .xt-sel input { width: 16px; height: 16px; }
}
/* fin-movil-badges: en Facturación, las etiquetas sueltas dentro de una tarjeta (p. ej. «Falta pasar a la cuenta de su piso») saltan de línea en el móvil en vez de salirse por el lado. */
#fin-page .card > .badge { white-space: normal; max-width: 100%; overflow-wrap: anywhere; }

/* padron-tipo-movil: el desplegable del tipo de documento encoge en vez de salirse de la ficha */
.unit > .row:has(> select[data-pdtype]) { min-width: 0; flex: 1 1 auto; flex-wrap: nowrap; }
select[data-pdtype] { max-width: 100%; min-width: 0; flex: 1 1 0; }

/* Ventas › Intermediación: ficha partida en dos (vende ➜ busca) y listas de posibles vendedores / compradores */
.modal.modal-wide { max-width: 1040px; }
.deal-split { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); gap: .75rem; align-items: stretch; margin: .5rem 0; }
.deal-split.two { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
.deal-side { border: 1px solid var(--border); border-radius: 12px; padding: .75rem .9rem; background: var(--surface); min-width: 0; }
.deal-asset { margin-top: .5rem; display: grid; gap: .2rem; font-size: .92rem; }
.deal-arrow { align-self: center; font-size: 2rem; color: var(--gold); }
.cand { display: flex; gap: .5rem; align-items: flex-start; padding: .4rem 0; border-top: 1px solid var(--border); margin: 0; font-weight: normal; cursor: pointer; }
.cand input { width: auto; margin-top: .2rem; }
.cand-body { flex: 1; min-width: 0; }
.cand-info { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cand-ch { white-space: nowrap; }
@media (max-width: 820px) {
  .deal-split, .deal-split.two { grid-template-columns: minmax(0, 1fr); }
  .deal-arrow { transform: rotate(90deg); justify-self: center; line-height: 1; }
}

/* Intermediación: tarjetas grandes vende ➜ compra */
.deal-card { border: 1px solid var(--border); border-radius: 16px; padding: 1rem 1.1rem; background: var(--surface); margin: 0 0 1rem; }
.deal-card h2 { font-size: 1.15rem; }
.deal-side.sell { border-top: 4px solid var(--gold); }
.deal-side.buy { border-top: 4px solid var(--brand); }
.deal-lbl { font-size: .72rem; letter-spacing: .06em; text-transform: uppercase; color: var(--muted); font-weight: 600; display: block; }
.deal-facts { display: flex; gap: 1.25rem; flex-wrap: wrap; margin-top: .5rem; }
.deal-facts strong { font-size: 1.2rem; }
.deal-info { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .75rem; margin-top: .25rem; }
.deal-box { border: 1px solid var(--border); border-radius: 12px; padding: .6rem .8rem; background: var(--surface-2); min-width: 0; font-size: .92rem; }
.deal-big { font-size: 1.25rem; font-weight: 700; margin-top: .2rem; }
.deal-snip { display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
@media (max-width: 820px) { .deal-info { grid-template-columns: minmax(0, 1fr); } }

/* Intermediación: fases (prospectos / seguimiento / cerradas) y paso a paso de cada operación */
.deal-phases { grid-template-columns: repeat(3, minmax(0, 1fr)); margin-bottom: 1rem; }
.deal-phases strong { margin-left: .3rem; }
.deal-phase { font-size: .85rem; padding: .3rem .7rem; }
.deal-steps { display: flex; flex-wrap: wrap; align-items: center; gap: .25rem; margin: .6rem 0 .2rem; }
.deal-step { font-size: .8rem; padding: .25rem .6rem; border-radius: 999px; border: 1px solid var(--border); background: transparent; color: var(--muted); cursor: pointer; }
.deal-step.done { color: var(--text); border-color: var(--gold); }
.deal-step.on { background: var(--gold); border-color: var(--gold); color: #142231; font-weight: 700; }
.deal-step.lost { margin-left: auto; }
.deal-step.lost.on { background: var(--danger); border-color: var(--danger); color: #fff; }
.deal-step-sep { color: var(--muted); font-size: .8rem; }
@media (max-width: 820px) { .deal-phases { grid-template-columns: minmax(0, 1fr); } .deal-step.lost { margin-left: 0; } }

/* Intermediación: tarjetas compactas (la mitad de alto); el detalle completo sigue en «🔎 Posibles compradores» */
.deal-card { padding: .55rem .8rem; margin: 0 0 .6rem; }
.deal-card h2 { font-size: 1rem; }
.deal-card .deal-phase { font-size: .75rem; padding: .15rem .5rem; }
.deal-card .deal-steps { margin: .3rem 0 0; }
.deal-card .deal-step { font-size: .7rem; padding: .1rem .45rem; }
.deal-card .deal-split { gap: .5rem; margin: .35rem 0; }
.deal-card .deal-side { padding: .4rem .65rem; border-top-width: 3px; }
.deal-card .deal-side > .deal-lbl { display: inline; margin-right: .35rem; }
.deal-card .deal-side h3 { display: inline; font-size: .95rem; }
.deal-card .deal-side h3 + .small { display: inline; margin-left: .3rem; color: var(--muted); }
.deal-card .deal-side .badge { display: none; }
.deal-card .deal-facts { gap: .9rem; margin-top: .15rem; }
.deal-card .deal-facts > div > .deal-lbl { display: inline; margin-right: .25rem; }
.deal-card .deal-facts strong { font-size: .95rem; }
.deal-card .deal-asset { margin-top: .15rem; font-size: .8rem; gap: 0; }
.deal-card .deal-asset > div { display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical; overflow: hidden; }
.deal-card .deal-arrow { font-size: 1.3rem; }
.deal-card .deal-info { gap: .5rem; margin-top: 0; }
.deal-card .deal-box { padding: .35rem .6rem; font-size: .8rem; }
.deal-card .deal-box > div:not(.deal-lbl) { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.deal-card .deal-box .deal-snip { -webkit-line-clamp: 1; }
.deal-card .deal-big { font-size: .95rem; }
.deal-card .deal-lbl { font-size: .64rem; }
.deal-card > .row:last-child { margin-top: .35rem !important; }
.deal-card > .row:last-child button { font-size: .75rem; padding: .2rem .6rem; }

/* Intermediación: tarjeta minimalista (VENDE dorado ➜ COMPRA azul, viñetas cortas) */
.dc { border: 1px solid var(--border); border-radius: 14px; padding: .6rem .9rem .5rem; margin: 0 0 .6rem; background: var(--surface); }
.dc-head { display: flex; align-items: center; gap: .45rem; flex-wrap: wrap; }
.dc-head h2 { font-size: 1rem; margin: 0; flex: 1 1 auto; }
.dc-head .deal-phase { font-size: .72rem; padding: .12rem .5rem; }
.dc-act { display: flex; gap: .15rem; }
.dc .deal-steps { margin: .35rem 0 0; }
.dc .deal-step { font-size: .68rem; padding: .08rem .45rem; }
.dc-grid { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); gap: .8rem; margin: .5rem 0 .1rem; align-items: start; }
.dc-arrow { align-self: center; color: var(--gold); font-size: 1.25rem; }
.dc-tag { display: inline-block; font-size: .64rem; font-weight: 800; letter-spacing: .1em; padding: .14rem .55rem; border-radius: 999px; margin-right: .45rem; vertical-align: 1px; }
.dc-tag.sell { background: #e9b949; color: #3a2a00; }
.dc-tag.buy { background: #6cb4ee; color: #06263f; }
.dc ul { margin: .25rem 0 0; padding-left: 1.05rem; font-size: .84rem; }
.dc li { margin: .06rem 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dc .dc-foot { list-style: none; padding: .35rem 0 0; margin: .45rem 0 0; border-top: 1px solid var(--border); display: grid; gap: .12rem; }
.dc .dc-foot .badge { font-size: .7rem; padding: .05rem .4rem; }
.last-link { font-size: .78rem; white-space: nowrap; text-decoration: none; margin-left: .2rem; }
@media (max-width: 820px) { .dc-grid { grid-template-columns: minmax(0, 1fr); gap: .4rem; } .dc-arrow { transform: rotate(90deg); justify-self: center; line-height: 1; } .dc li { white-space: normal; } }

/* Embudo: leads a los que escribimos lo último y no contestan (naranja; rojo desde 7 días = change-alert). */
tr.lead-waiting td, .xt tr.lead-waiting td { background: var(--warn-soft); }
tr.lead-waiting td:first-child { box-shadow: inset 4px 0 0 var(--warn); }
.lead-card.waiting { border-left: 4px solid var(--warn); background: var(--warn-soft); }
.lead-card.waiting-late { border-left: 4px solid var(--danger); background: var(--danger-soft); }
