:root{--bg:#FBF8F3;--bg-elev:#FFFFFF;--bg-sunken:#F2EDE2;--ink:#0F1A2E;--ink-2:#2C3B59;--ink-mute:#5A6680;--ink-faint:#9098A8;--line:#E8E2D5;--line-strong:#D6CFC0;--accent:#B85A3E;--accent-soft:#F5E6DD;--accent-deep:#8C3F26;--success:#2E7D5B;--success-soft:#DFEEE5;--danger:#B23A30;--danger-soft:#F5DDDB;--warn:#C48A1E;--font-display:'Fraunces',Georgia,serif;--font-body:'Manrope',system-ui,sans-serif;--font-mono:'JetBrains Mono',Menlo,monospace;--radius-sm:6px;--radius:10px;--radius-lg:14px;--tint-primario:#DCEEE3;--tint-secundario:#FBEFC9;--tint-no:#F6DBD9;--edge-primario:#2E7D5B;--edge-secundario:#C48A1E;--edge-no:#B23A30;}
/* Modo noche: redefine las variables de tema (el resto del CSS las usa). */
html[data-theme="dark"]{
  --bg:#13161D;--bg-elev:#1B202A;--bg-sunken:#0F121A;
  --ink:#E8EAF0;--ink-2:#C3C9D6;--ink-mute:#9AA3B5;--ink-faint:#6E7689;
  --line:#2A3039;--line-strong:#3B434F;
  --accent:#C86E50;--accent-soft:#352620;--accent-deep:#E2956F;
  --success:#4FB286;--success-soft:#16291F;
  --danger:#E0726A;--danger-soft:#34201E;--warn:#D8A640;
  --tint-primario:rgba(79,178,134,0.16);--tint-secundario:rgba(216,166,64,0.16);--tint-no:rgba(224,114,106,0.18);
  --edge-primario:#4FB286;--edge-secundario:#D8A640;--edge-no:#E0726A;
}
html[data-theme="dark"] body{background:var(--bg);}
:root{--row-alt:#F7F3EB;--ring:rgba(15,26,46,0.10);}
html[data-theme="dark"]{--row-alt:#212732;--ring:rgba(232,234,240,0.22);}
*{box-sizing:border-box;}
html,body{height:100%;margin:0;}
body{font-family:var(--font-body);background:var(--bg);color:var(--ink);font-size:15px;line-height:1.5;-webkit-font-smoothing:antialiased;}
button{font-family:inherit;}
.app{display:grid;grid-template-columns:248px 1fr;min-height:100vh;}
.sidebar{background:var(--bg-elev);border-right:1px solid var(--line);display:flex;flex-direction:column;position:sticky;top:0;height:100vh;overflow-y:auto;}
.brand{padding:20px 22px;border-bottom:1px solid var(--line);display:flex;flex-direction:column;justify-content:flex-start;box-sizing:border-box;}
.brand-logo{display:block;width:100%;max-width:190px;height:auto;margin:0 0 9px;}
.app-version{font-family:var(--font-mono);font-size:11px;color:var(--ink-faint);margin:3px 0 0;letter-spacing:0.02em;}
/* F&B outlets como tarjetas + plantilla por outlet */
.fb-card{border:1px solid var(--line-strong);border-left:3px solid var(--accent);border-radius:var(--radius-lg);padding:16px 18px 14px;margin-bottom:18px;background:var(--bg-elev);box-shadow:0 1px 3px rgba(15,26,46,0.06);transition:box-shadow .15s ease;}
.fb-card:hover{box-shadow:0 3px 10px rgba(15,26,46,0.09);}
.fb-card-head{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:14px;padding-bottom:11px;border-bottom:1px solid var(--line-strong);}
.fb-card-head .fb-name{font-weight:600;font-size:16px;max-width:260px;}
/* Inputs transparentes con borde (igual que las tablas zebra) — homogéneo con el resto */
.fb-card input,.fb-card select,.fb-card .input-affix{background:transparent;border-color:var(--line);transition:border-color .12s ease, background .12s ease, box-shadow .12s ease;}
.fb-card input:hover,.fb-card select:hover,.fb-card .input-affix:hover{border-color:var(--line-strong);}
.fb-card input:focus,.fb-card select:focus,.fb-card .input-affix:focus-within{border-color:var(--accent);background:var(--bg-elev);box-shadow:0 0 0 2px var(--accent-soft);}
.fb-metrics{display:flex;flex-wrap:wrap;gap:8px 18px;margin:0 0 14px;padding:11px 14px;background:var(--bg-sunken);border:1px solid var(--line);border-radius:var(--radius);font-size:13px;color:var(--ink-mute);}
.fb-metrics b{color:var(--ink);font-feature-settings:'tnum';font-weight:600;}
.fb-sub{font-size:11px;font-weight:700;color:var(--accent-deep);letter-spacing:0.07em;text-transform:uppercase;margin:14px 0 8px;}
/* Chips de régimen (multi-selección de pensiones que incluyen el outlet) */
.reg-chips{display:flex;flex-wrap:wrap;gap:6px;}
.reg-chip{display:inline-flex;align-items:center;padding:5px 12px;border:1px solid var(--line);border-radius:999px;font-size:12.5px;font-weight:700;color:var(--ink-mute);cursor:pointer;user-select:none;transition:all .12s ease;}
.reg-chip:hover{border-color:var(--line-strong);}
.reg-chip.on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent-deep);}
.reg-chip input{display:none;}
/* MICE: mini-calendario de eventos por mes — los 12 meses en UNA línea */
/* Modo mensual: "encierra" el evento (borde arriba en su fila principal y abajo en el calendario)
   para distinguir claramente dónde acaba uno y empieza el siguiente. */
.tbl tr.mice-main-cal td{border-top:2px solid var(--line-strong);}
.tbl tr.mice-cal td{border-bottom:2px solid var(--line-strong);background:var(--bg-sunken);}
.mice-months{display:flex;flex-wrap:nowrap;gap:4px;padding:4px 0;}
.mice-months label{flex:1 1 0;display:flex;flex-direction:column;align-items:center;gap:2px;font-size:9.5px;font-weight:700;color:var(--ink-mute);text-transform:uppercase;letter-spacing:.02em;}
.mice-months input{width:100%;min-width:34px;text-align:center;padding:3px 2px;}
.icon-btn{padding:3px 8px;font-size:13px;line-height:1;}
/* Secciones por departamento (Personal) */
.dept-sect{border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px;margin-bottom:12px;}
.dept-sect-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:8px;gap:10px;}
.dept-sect-head h3{font-family:var(--font-display);font-size:15px;font-weight:500;margin:0;}
.dept-sect-head .sub{font-size:13px;color:var(--ink-mute);font-feature-settings:'tnum';}
.brand-name{font-family:var(--font-display);font-size:18px;font-weight:500;letter-spacing:-0.01em;margin:0;line-height:1.15;}
.brand-tag{font-size:12px;color:var(--ink-mute);margin:6px 0 0;font-weight:400;font-style:italic;}
.brand-tag .heart{color:var(--accent);}
.steps{padding:10px;flex:1;}
.step-group{padding:13px 12px 5px;font-size:10px;font-weight:700;letter-spacing:0.14em;color:var(--ink-faint);text-transform:uppercase;}
.step{display:grid;grid-template-columns:22px 1fr 5px;gap:9px;align-items:center;padding:8px 10px;border-radius:var(--radius);cursor:pointer;color:var(--ink-2);font-size:12.5px;font-weight:500;border:none;background:transparent;width:100%;text-align:left;font-family:inherit;transition:all 0.15s ease;}
.step:hover{background:var(--bg-sunken);color:var(--ink);}
.step.active{background:var(--ink);color:var(--bg);}
.step-num{width:20px;height:20px;border-radius:50%;border:1px solid var(--line-strong);display:flex;align-items:center;justify-content:center;font-size:11px;color:var(--ink-mute);font-feature-settings:'tnum';font-weight:600;transition:all 0.15s ease;}
.step.active .step-num{background:var(--bg);color:var(--ink);border-color:var(--bg);}
.step.done .step-num{background:var(--accent-soft);color:var(--accent-deep);border-color:var(--accent-soft);}
.step-mark{width:5px;height:5px;border-radius:50%;background:transparent;}
.step.active .step-mark{background:var(--accent);}
.sidebar-foot{padding:12px 22px 18px;border-top:1px solid var(--line);font-size:12px;color:var(--ink-mute);}
.proj-box{padding-bottom:12px;margin-bottom:4px;border-bottom:1px dashed var(--line-strong);}
.proj-label{display:block;font-size:11px;font-weight:700;color:var(--ink-faint);letter-spacing:0.08em;text-transform:uppercase;margin-bottom:5px;}
.proj-select{width:100%;font-size:13px;padding:6px 9px;}
.proj-actions .btn{flex:1;padding:6px 4px;font-size:12px;justify-content:center;}
.save-state{display:flex;align-items:center;gap:6px;}
.save-dot{width:6px;height:6px;border-radius:50%;background:var(--success);animation:breathe 2.5s ease-in-out infinite;}
@keyframes breathe{0%,100%{opacity:1;}50%{opacity:0.4;}}
.main{display:flex;flex-direction:column;min-width:0;}
.topbar{background:var(--bg-elev);border-bottom:1px solid var(--line);padding:20px 30px 16px;position:sticky;top:0;z-index:10;}
.topbar-head{display:flex;justify-content:space-between;align-items:flex-end;margin-bottom:16px;gap:20px;}
.crumb{font-size:11px;color:var(--ink-faint);letter-spacing:0.1em;text-transform:uppercase;margin:0 0 4px;font-weight:600;}
.topbar-head h1{font-family:var(--font-display);font-size:25px;font-weight:400;letter-spacing:-0.02em;margin:0;line-height:1.1;}
.kpi-strip{display:grid;grid-template-columns:repeat(9,1fr);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:var(--bg-elev);}
.kpi{padding:11px 13px;border-right:1px solid var(--line);position:relative;overflow:hidden;}
.kpi:last-child{border-right:none;}
.kpi .l{font-size:10px;color:var(--ink-faint);letter-spacing:0.1em;text-transform:uppercase;margin:0 0 4px;font-weight:600;}
.kpi .v{font-family:var(--font-display);font-size:19px;font-weight:500;margin:0;color:var(--ink);letter-spacing:-0.015em;line-height:1.1;font-feature-settings:'tnum';}
.kpi .s{font-size:11px;color:var(--ink-mute);margin:3px 0 0;}
.kpi.flash::after{content:'';position:absolute;top:0;left:0;right:0;height:2px;background:var(--accent);animation:flashbar 0.7s ease-out forwards;}
@keyframes flashbar{0%{transform:scaleX(0);transform-origin:left;}50%{transform:scaleX(1);opacity:1;}100%{transform:scaleX(1);opacity:0;}}
.content{padding:28px;max-width:1360px;flex:1;width:100%;}
.step-content{display:none;}
.step-content.active{display:block;animation:fadeIn 0.28s ease-out;}
@keyframes fadeIn{from{opacity:0;transform:translateY(6px);}to{opacity:1;transform:translateY(0);}}
.panel{background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--radius-lg);padding:22px;margin-bottom:18px;}
.panel-head{margin-bottom:16px;display:flex;justify-content:space-between;align-items:flex-start;gap:16px;}
.panel-head h2{font-family:var(--font-display);font-size:17px;font-weight:500;margin:0 0 4px;letter-spacing:-0.01em;}
.panel-head p{font-size:14px;color:var(--ink-mute);margin:0;}
.pill{font-family:var(--font-display);font-size:17px;font-weight:500;color:var(--ink);font-feature-settings:'tnum';}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:18px;}
.grid-2.lopsided{grid-template-columns:1.2fr 1fr;}
.grid-2.rt{grid-template-columns:1fr 1.4fr;}
.grid-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px;}
.grid-4{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;}
.field{margin-bottom:12px;}
.field label{display:block;font-size:12px;color:var(--ink-mute);margin-bottom:4px;font-weight:600;}
.field .hint{font-size:12px;color:var(--ink-faint);margin-top:4px;}
.field.inline{display:grid;grid-template-columns:1fr auto;align-items:center;gap:10px;margin-bottom:8px;}
.field.inline label{margin-bottom:0;}
.field.inline input,.field.inline select,.field.inline .input-affix{width:140px;}
input[type=text],input[type=number],select{width:100%;padding:8px 11px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--bg-elev);color:var(--ink);font-family:inherit;font-size:14px;font-feature-settings:'tnum';transition:all 0.15s ease;}
input[type=number]{text-align:right;}
input:hover,select:hover{border-color:var(--line-strong);}
input:focus,select:focus{outline:none;border-color:var(--ink);box-shadow:0 0 0 3px var(--ring);}
/* El BORDE (la caja) va en el contenedor .input-affix y el input es transparente por dentro,
   así prefijo + número + sufijo quedan TODOS dentro de la misma caja, alineados y sin solape. */
.input-affix{position:relative;display:flex;align-items:center;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--bg-elev);padding:0 11px;transition:all 0.15s ease;}
.input-affix:hover{border-color:var(--line-strong);}
.input-affix:focus-within{border-color:var(--ink);box-shadow:0 0 0 3px var(--ring);}
.input-affix .prefix,.input-affix .suffix{position:static;transform:none;color:var(--ink-faint);font-size:13px;pointer-events:none;font-weight:500;white-space:nowrap;}
.input-affix .prefix{flex:0 0 auto;padding-right:6px;}
/* Hueco FIJO para la unidad (%): el número termina siempre en la misma vertical. */
.input-affix .suffix{flex:0 0 18px;text-align:right;}
.input-affix input{flex:1 1 auto;width:auto;min-width:0;border:none;background:transparent;padding-left:0;padding-right:0;box-shadow:none;text-align:right;}
.input-affix input:hover,.input-affix input:focus{border:none;box-shadow:none;}
/* Reserva el mismo hueco a la derecha en inputs sin sufijo (€ con prefijo, y números planos
   de panel) para que TODOS los números queden alineados a la misma derecha. */
.input-affix.has-pre:not(.has-suf) input{padding-right:18px;}
/* Solo los inputs PLANOS (hijo directo de .field, sin affix) reservan el hueco; los de
   affix se gestionan por sus propias reglas (no usar descendiente o pisaría al affix). */
.field > input[type=number]{padding-right:29px;}
/* Excepción: los stress bear/bull tienen sufijos anchos (%occ, pp int…) en fila → ancho natural. */
#sp-sens .input-affix .suffix{flex:0 0 auto;padding-left:6px;text-align:left;}
.tbl{width:100%;border-collapse:collapse;font-size:12.5px;}
.tbl th{text-align:left;font-size:11px;font-weight:700;color:var(--ink-faint);letter-spacing:0.08em;text-transform:uppercase;padding:0 8px 7px;border-bottom:1px solid var(--line);}
.tbl th.num{text-align:right;}
.tbl td{padding:5px 8px;border-bottom:1px solid var(--line);}
.tbl td.num{text-align:right;font-feature-settings:'tnum';}
.tbl tr:last-child td{border-bottom:none;}
.tbl input{padding:4px 7px;font-size:12.5px;text-align:right;}
.tbl input.text{text-align:left;}
/* Inputs numéricos en tablas densas: los spinners del navegador roban ~14px y cortan los decimales
   ("4,8" → "4,"); fuera flechas (se edita tecleando) + ancho mínimo legible + padding fino.
   min-width vence a los width inline estrechos (44-52px) sin tocar cada pantalla. */
table input[type=number]::-webkit-outer-spin-button, table input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0;}
table input[type=number]{-moz-appearance:textfield;}
.tbl input[type=number]{min-width:56px;padding:4px 5px;}
.tbl select{padding:4px 7px;font-size:12.5px;}
.tbl tr.subtotal td{font-weight:600;background:var(--bg-sunken);border-top:1px solid var(--line-strong);}
.tbl tr.subtotal td.num{color:var(--ink);}
/* Líneas alternas (zebra) en las tablas de edición. Los inputs NO son cajas blancas:
   se funden con la fila y la caja aparece solo al pasar el ratón o al editar. */
.tbl tbody tr:nth-child(even){background:var(--row-alt);}
.tbl input,.tbl select,.tbl .input-affix{background:transparent;border-color:var(--line);transition:border-color .12s ease, background .12s ease, box-shadow .12s ease;}
.tbl input:hover,.tbl select:hover,.tbl .input-affix:hover{border-color:var(--line-strong);}
.tbl input:focus,.tbl select:focus,.tbl .input-affix:focus-within{border-color:var(--accent);background:var(--bg-elev);box-shadow:0 0 0 2px var(--accent-soft);}
.tbl-foot{display:flex;justify-content:space-between;align-items:center;padding:10px 8px 0;font-size:13px;color:var(--ink-mute);border-top:1px dashed var(--line-strong);margin-top:4px;}
.tbl-foot .ok{color:var(--success);font-weight:600;}
.tbl-foot .warn{color:var(--danger);font-weight:600;}
.btn{display:inline-flex;align-items:center;gap:5px;padding:8px 13px;border-radius:var(--radius-sm);border:1px solid var(--line-strong);background:var(--bg-elev);color:var(--ink);font-size:14px;font-weight:500;cursor:pointer;transition:all 0.15s ease;}
.btn:hover{border-color:var(--ink);}
.btn-primary{background:var(--ink);color:var(--bg);border-color:var(--ink);}
.btn-primary:hover{background:var(--ink-2);}
.btn-accent{background:var(--accent);color:white;border-color:var(--accent);}
.btn-accent:hover{background:var(--accent-deep);border-color:var(--accent-deep);}
.btn-ghost{background:transparent;border-color:transparent;color:var(--ink-mute);}
.btn-ghost:hover{color:var(--ink);background:var(--bg-sunken);}
.btn-sm{padding:5px 10px;font-size:13px;}
.btn:disabled{opacity:0.4;cursor:not-allowed;}
.chips{display:flex;flex-wrap:wrap;gap:6px;}
.chip{padding:5px 11px;border-radius:999px;border:1px solid var(--line-strong);background:var(--bg-elev);color:var(--ink-2);font-size:13px;cursor:pointer;font-family:inherit;transition:all 0.15s ease;}
.chip:hover{border-color:var(--ink);color:var(--ink);}
.chip.active{background:var(--ink);color:var(--bg);border-color:var(--ink);}
.step-nav{display:flex;justify-content:space-between;align-items:center;padding:14px 28px;border-top:1px solid var(--line);background:var(--bg-elev);position:sticky;bottom:0;}
.step-progress{display:flex;align-items:center;gap:6px;flex-wrap:wrap;justify-content:center;max-width:60%;}
.step-dot{width:6px;height:6px;border-radius:50%;background:var(--line-strong);transition:all 0.2s ease;cursor:pointer;}
.step-dot:hover{background:var(--ink-faint);}
.step-dot.active{background:var(--ink);transform:scale(1.4);}
.step-dot.done{background:var(--accent);}
.occ-chart{background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--radius);padding:20px;}
.occ-area{position:relative;height:240px;padding-top:24px;}
.occ-bars{position:absolute;inset:24px 0 0 0;display:grid;grid-template-columns:72px repeat(12,1fr);column-gap:5px;align-items:end;}
.occ-bar{background:var(--accent-soft);border-radius:3px 3px 0 0;position:relative;transition:background 0.12s ease;min-height:3px;z-index:1;}
.occ-val{position:absolute;top:-21px;left:50%;transform:translateX(-50%);font-size:11px;color:var(--ink-mute);font-feature-settings:'tnum';font-weight:600;}
/* El lienzo de la línea se posiciona por JS (alignOccHist) entre el centro de la 1ª y la última
   barra, para que la curva coincida exactamente en X con las barras. */
.occ-hist-wrap{position:absolute;inset:24px 0 0 77px;z-index:3;pointer-events:none;}
/* Ajuste de ocupación por mes: rejilla con columna de etiquetas de fila + 12 meses. */
.occ-foot{display:grid;grid-template-columns:72px repeat(12,1fr);gap:1px 5px;margin-top:6px;border-top:1px solid var(--line);padding-top:8px;align-items:stretch;}
.occ-rowlbl{font-size:10px;font-weight:700;color:var(--ink-mute);text-transform:uppercase;letter-spacing:.03em;text-align:right;padding-right:9px;white-space:nowrap;display:flex;align-items:center;justify-content:flex-end;}
.occ-mname{font-size:11px;color:var(--ink-mute);font-weight:600;text-align:center;padding:3px 2px;border-radius:5px 5px 0 0;}
.occ-cell{padding:2px;display:flex;align-items:center;}
.occ-cell-last{border-radius:0 0 5px 5px;padding-bottom:4px;}
.occ-cell input,.occ-cell select{width:100%;padding:3px 2px;font-size:10.5px;text-align:center;}
.occ-input{width:100%;padding:3px 4px !important;font-size:12px !important;text-align:center !important;font-feature-settings:'tnum';}
.stat-card{background:var(--bg-sunken);border-radius:var(--radius);padding:12px 14px;}
.stat-card .l{font-size:11px;color:var(--ink-mute);letter-spacing:0.06em;text-transform:uppercase;margin:0 0 4px;font-weight:600;}
.stat-card .v{font-family:var(--font-display);font-size:21px;font-weight:500;margin:0;font-feature-settings:'tnum';letter-spacing:-0.01em;}
.stat-card .s{font-size:12px;color:var(--ink-faint);margin-top:2px;}
.stat-card.dark{background:var(--ink);color:var(--bg);}
.stat-card.dark .l{color:var(--ink-faint);}
.stat-card.dark .v{color:var(--bg);}
.stat-card.dark .s{color:var(--ink-faint);}
.stat-card.accent{background:var(--accent-soft);}
.stat-card.accent .v{color:var(--accent-deep);}
.stat-card.success{background:var(--success-soft);}
.stat-card.success .v{color:var(--success);}
.stat-card.danger{background:var(--danger-soft);}
.stat-card.danger .v{color:var(--danger);}
.chart-wrap{position:relative;height:240px;width:100%;min-width:0;}
.chart-wrap.sm{height:190px;}
.chart-wrap.lg{height:320px;}
/* Evita que el <canvas> de Chart.js ensanche la columna del grid y desborde el panel:
   los items de grid tienen min-width:auto por defecto y crecen con su contenido. */
.grid-2>*,.grid-3>*,.grid-4>*{min-width:0;}
.chart-wrap>canvas{max-width:100%;}
/* Gráfico a pantalla completa (toggleChartFull) */
.chart-wrap.chart-full{position:fixed!important;inset:0!important;width:auto!important;height:auto!important;z-index:10000;background:var(--bg-elev);padding:54px 30px 28px;border-radius:0;box-shadow:0 0 0 100vmax rgba(0,0,0,.18);}
.chart-full-exit{display:none;}
.chart-wrap.chart-full .chart-full-exit{display:inline-flex;position:fixed;top:14px;right:14px;z-index:10001;}
/* Controles del gráfico maximizado (solo en pantalla completa): hoteles, grosor, ejes, reset. */
.chart-full-ctrls{display:none;}
.chart-wrap.chart-full .chart-full-ctrls{display:block;position:fixed;top:14px;left:14px;z-index:10001;width:250px;max-height:calc(100vh - 28px);overflow:auto;background:var(--bg-elev);border:1px solid var(--line);border-radius:12px;box-shadow:0 8px 30px rgba(15,26,46,.18);padding:11px 13px;font-size:12px;}
.cfc-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px;}
.cfc-collapse{width:22px;height:22px;border:1px solid var(--line);background:var(--bg);border-radius:6px;cursor:pointer;font-weight:700;line-height:1;color:var(--ink-mute);}
.cfc-h{font-weight:700;font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:var(--ink-faint);margin:11px 0 5px;display:flex;align-items:center;justify-content:space-between;}
.cfc-allbtns{display:flex;gap:4px;}
.btn-xs{padding:1px 7px!important;font-size:10px!important;height:auto!important;}
.cfc-chips{display:flex;flex-direction:column;gap:2px;}
.cfc-chip{display:flex;align-items:center;gap:7px;padding:3px 6px;border-radius:6px;cursor:pointer;user-select:none;font-size:11.5px;line-height:1.3;}
.cfc-chip:hover{background:var(--bg);}
.cfc-chip.off{opacity:.42;}
.cfc-dot{width:11px;height:11px;border-radius:50%;flex:0 0 auto;}
.cfc-chip.off .cfc-dot{background:transparent!important;box-shadow:inset 0 0 0 1.5px currentColor;}
.cfc-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--ink);}
.cfc-row{display:flex;align-items:center;gap:7px;margin:5px 0;}
.cfc-row input[type=range]{flex:1;min-width:0;accent-color:var(--accent);}
.cfc-lab{font-size:10px;color:var(--ink-faint);min-width:18px;}
.cfc-val{font-variant-numeric:tabular-nums;color:var(--ink-mute);min-width:38px;text-align:right;}
/* Nota explicativa por sección (neutra, profesional) — visible solo al pulsar el botón "?". */
.help{background:var(--bg-sunken);border-left:3px solid var(--line-strong);padding:11px 14px;border-radius:0 var(--radius-sm) var(--radius-sm) 0;font-size:13px;color:var(--ink-mute);margin-bottom:14px;line-height:1.55;}
.help strong{font-weight:600;color:var(--ink-2);}
.help[hidden]{display:none;}
.help-q{width:22px;min-width:22px;height:22px;padding:0;border-radius:50%;font-weight:700;font-size:12px;line-height:1;margin-left:9px;vertical-align:middle;}
.help-q.on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent-deep);}
.subtabs{display:flex;gap:0;border-bottom:1px solid var(--line);margin-bottom:18px;overflow-x:auto;}
.subtab{padding:9px 15px;border:none;background:transparent;color:var(--ink-mute);font-family:inherit;font-size:12.5px;font-weight:500;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;white-space:nowrap;}
.subtab:hover{color:var(--ink);}
.subtab.active{color:var(--ink);border-color:var(--accent);}
.subtab-panel{display:none;}
.subtab-panel.active{display:block;animation:fadeIn 0.2s ease-out;}
.pl{width:100%;border-collapse:collapse;font-size:12.5px;font-feature-settings:'tnum';}
.pl td{padding:7px 11px;border-bottom:1px solid var(--line);}
.pl td.num{text-align:right;font-feature-settings:'tnum';}
.pl tr.section td{font-family:var(--font-display);font-size:15px;padding:20px 11px 6px;color:var(--accent-deep);border:none;border-bottom:2px solid var(--accent-soft);}
.pl tr.plhead td{font-weight:700;font-size:10px;color:var(--ink-faint);letter-spacing:0.07em;text-transform:uppercase;border-bottom:1px solid var(--line-strong);padding:6px 11px;}
/* Subpestañas internas de Proyecciones (KPIs / USALI). */
.proj-tabs{display:flex;gap:6px;margin-bottom:14px;}
.proj-tab{padding:7px 16px;border:1px solid var(--line);background:var(--bg-sunken);color:var(--ink-mute);font-family:inherit;font-size:12.5px;font-weight:600;cursor:pointer;border-radius:var(--radius-sm);}
.proj-tab:hover{color:var(--ink);}
.proj-tab.active{background:var(--accent-soft);border-color:var(--accent);color:var(--accent-deep);}
/* Subpestañas del comparador de escenarios (mismo look que .proj-tab). */
.cmp-tab, .cf-tab{padding:7px 16px;border:1px solid var(--line);background:var(--bg-sunken);color:var(--ink-mute);font-family:inherit;font-size:12.5px;font-weight:600;cursor:pointer;border-radius:var(--radius-sm);}
.cmp-tab:hover, .cf-tab:hover{color:var(--ink);}
.cmp-tab.active, .cf-tab.active{background:var(--accent-soft);border-color:var(--accent);color:var(--accent-deep);}
/* Calendario del proyecto (línea de tiempo tipo Gantt). */
.cal{min-width:760px;padding:4px 0;}
.cal-row{display:flex;align-items:center;margin:5px 0;}
.cal-lbl{width:170px;flex:none;font-size:12px;color:var(--ink);padding-right:10px;}
.cal-track{position:relative;flex:1;height:24px;border-left:1px solid var(--line);}
.cal-years .cal-track{height:34px;border-left:none;}
.cal-bar{position:absolute;top:3px;height:18px;border-radius:5px;display:flex;align-items:center;padding:0 8px;color:#fff;font-size:10.5px;font-weight:600;overflow:hidden;white-space:nowrap;box-shadow:0 1px 2px rgba(15,26,46,.18);}
.cal-tick{position:absolute;top:0;transform:translateX(-50%);font-size:10.5px;font-weight:600;color:var(--ink-mute);text-align:center;line-height:1.25;}
.cal-mk{position:absolute;top:0;transform:translateX(-50%);font-size:10.5px;color:var(--ink);text-align:center;line-height:1.2;white-space:nowrap;}
.cal-dot{display:block;width:8px;height:8px;border-radius:50%;background:var(--accent);margin:0 auto 2px;}
/* Barra de alertas/validación global (en el topbar, bajo la franja de KPIs). */
.bp-alerts{display:flex;flex-wrap:wrap;align-items:center;gap:7px 16px;padding:8px 18px;font-size:12.5px;color:var(--ink);border-top:1px solid var(--line);}
.bp-alerts.is-error{background:rgba(192,57,43,.10);}
.bp-alerts.is-warn{background:rgba(201,145,46,.13);}
.bp-alerts-h{font-weight:700;white-space:nowrap;}
.bp-alerts.is-error .bp-alerts-h{color:var(--danger);}
.bp-alerts.is-warn .bp-alerts-h{color:var(--warn);}
.bp-alert{white-space:nowrap;}
.bp-alert::before{content:'●';margin-right:6px;font-size:9px;vertical-align:middle;}
.bp-alert-error::before{color:var(--danger);}
.bp-alert-warn::before{color:var(--warn);}
/* Alertas clicables: navegan al paso donde se corrige la incidencia. */
.bp-alert-link{cursor:pointer;text-decoration:underline dotted;text-underline-offset:3px;}
.bp-alert-link:hover{text-decoration-style:solid;}
/* Pasos con incidencias (validación honesta): punto rojo/ámbar en la sidebar y en los dots. */
.step.has-error .step-mark{background:var(--danger);width:7px;height:7px;}
.step.has-warn .step-mark{background:var(--warn);width:7px;height:7px;}
.step.has-error .step-num{border-color:var(--danger);color:var(--danger);}
.step-dot.has-error{background:var(--danger);}
.step-dot.has-warn{background:var(--warn);}
/* Destello del panel al llegar desde una alerta clicada. */
@keyframes stepFlash{0%{box-shadow:inset 0 0 0 2px var(--warn);}100%{box-shadow:inset 0 0 0 2px transparent;}}
.step-flash{animation:stepFlash 1.6s ease-out;}
/* Botones-icono del topbar: área de toque mínima (eran ~24px). */
.topbar-head .btn-sm{min-height:32px;min-width:32px;}
/* Primera columna anclada al deslizar a la derecha (etiquetas siempre visibles).
   border-collapse:separate es OBLIGATORIO: con 'collapse' el position:sticky en celdas
   de tabla NO funciona en Safari/WebKit (sí en Chrome). border-spacing:0 mantiene el look. */
table.sticky-col{border-collapse:separate;border-spacing:0;}
table.sticky-col td:first-child, table.sticky-col th:first-child{position:sticky;left:0;z-index:2;}
table.sticky-col thead th:first-child{z-index:3;background:var(--bg-elev);box-shadow:1px 0 0 var(--line-strong);}
table.sticky-col tbody tr:not(.section) td:first-child{background:var(--bg-elev);box-shadow:1px 0 0 var(--line-strong);white-space:nowrap;}
/* Rejilla de hipótesis año a año: filas y cajas más compactas (no tan altas). */
#proj-hyp-grid td, #proj-hyp-grid th{padding:4px 9px;}
#proj-hyp-grid .proj-hyp{padding:2px 6px;}
/* Etiquetas de los marcadores del mapa: texto con halo, sin caja (legible sobre el mapa). */
.leaflet-tooltip.map-lbl{background:transparent;border:none;box-shadow:none;padding:0;font-weight:700;font-size:var(--map-lbl-size,11px);color:#0F1A2E;text-shadow:0 0 3px #fff,0 0 3px #fff,0 1px 2px #fff,0 -1px 2px #fff;white-space:nowrap;line-height:1.18;}
.leaflet-tooltip.map-lbl.map-lbl-proj{color:#8C3F26;font-size:calc(var(--map-lbl-size,11px) + 1px);}
.leaflet-tooltip.map-lbl::before{display:none;}
/* Tirador para estrechar/ensanchar una etiqueta: pastilla siempre visible en el borde derecho. */
.map-lbl-grip{position:absolute;top:50%;right:-10px;transform:translateY(-50%);width:7px;height:64%;min-height:13px;cursor:ew-resize;background:#2C3B59;opacity:.55;border-radius:4px;box-shadow:0 0 0 2px #fff;}
.leaflet-tooltip.map-lbl:hover .map-lbl-grip{opacity:.95;}
.leaflet-tooltip.map-lbl.map-lbl-proj .map-lbl-grip{background:#8C3F26;}
#map.map-full{position:fixed!important;inset:0!important;width:auto!important;height:auto!important;z-index:10000;border-radius:0!important;}
/* Panel-leyenda del mapa (sobre el mapa, para capturas): lista de hoteles + color + controles. */
.map-legend{background:rgba(255,255,255,.95);padding:10px 12px;border-radius:9px;box-shadow:0 3px 14px rgba(15,26,46,.22);max-width:320px;max-height:78vh;overflow:auto;line-height:1.35;color:#2C3B59;}
.map-legend .lg-b{border:1px solid #d6cfc0;background:#fff;border-radius:4px;padding:1px 6px;font-size:11px;line-height:1.4;cursor:pointer;color:#2C3B59;}
.map-legend .lg-b:hover{background:#f2ede2;}
/* Selector de posiciones sugeridas (Personal): chips por departamento. */
.staff-pick{padding:8px 2px 2px;}
.staff-pick-inner{display:flex;flex-wrap:wrap;gap:6px;align-items:center;}
.staff-chip{border:1px solid var(--line-strong,#D6CFC0);background:var(--bg-elev,#fff);border-radius:999px;padding:3px 11px;font-size:12px;color:var(--ink-2,#2C3B59);cursor:pointer;line-height:1.5;}
.staff-chip:hover{background:var(--accent-soft,#F5E6DD);border-color:var(--accent,#B85A3E);color:var(--accent-deep,#8C3F26);}
.staff-chip-custom{border-style:dashed;color:var(--accent-deep,#8C3F26);}
/* Celda de Coste en Personal: número (cifras tabulares) + acciones ▲▼× fijadas a la derecha,
   para que la columna no se descuadre cuando el importe pasa de 100k. */
.staff-cost-wrap{display:flex;align-items:center;justify-content:flex-end;gap:5px;white-space:nowrap;}
.staff-cost-v{font-variant-numeric:tabular-nums;}
.staff-cost-a{display:inline-flex;gap:1px;flex:none;}
/* Indicador de color por hotel (círculo). Atenuado si el hotel no está localizado. */
.map-swatch{width:18px;height:18px;flex:0 0 auto;padding:0;border:2px solid var(--line-strong);border-radius:50%;cursor:pointer;-webkit-appearance:none;appearance:none;background:none;overflow:hidden;}
.map-swatch::-webkit-color-swatch-wrapper{padding:0;}
.map-swatch::-webkit-color-swatch{border:none;border-radius:50%;}
.map-swatch::-moz-color-swatch{border:none;border-radius:50%;}
.map-swatch-off{opacity:0.35;}
.tbl tr.op-group td{background:var(--accent-soft,#f0ece6);font-weight:700;font-size:12px;text-transform:uppercase;letter-spacing:0.03em;color:var(--accent-deep,#8a5a2b);padding:7px 9px;border-top:1px solid var(--line);}
/* Subtotal de detalle: línea de departamento que despliega sublíneas (negrita + separación). */
.pl tr.subt td{font-weight:600;border-top:1px solid var(--line-strong);}
/* TOTALES de sección: regla superior fuerte + relleno arena + negrita → resaltan sobre las filas. */
.pl tr.sub td{font-weight:700;background:var(--bg-sunken);border-top:2px solid var(--ink-2);border-bottom:1px solid var(--line-strong);padding-top:9px;padding-bottom:9px;}
.pl tr.subkey td{font-weight:700;background:var(--bg-sunken);border-bottom:1px solid var(--line-strong);}   /* "/ llave": mismo formato que el total */
.pl tr.indent td:first-child{padding-left:26px;color:var(--ink-mute);font-size:12px;}
.pl tr.pct td{color:var(--ink-faint);font-style:italic;font-size:11.5px;padding:1px 11px 3px;border:none;}
.pl tr.pct td:first-child{padding-left:26px;}
/* Resultados clave (GOP, Owner EBITDA, beneficio neto): bloque azul oscuro. */
.pl tr.tot td{font-weight:700;background:var(--ink);color:#fff;}
.pl tr.tot td.num{font-family:var(--font-display);font-size:15px;}
.pl tr.gop td{font-weight:700;background:var(--ink);color:#fff;border-top:2px solid var(--ink);padding-top:10px;padding-bottom:10px;}
.pl tr.gop td.num{font-family:var(--font-display);font-size:16px;}
.pl tr.gopkey td{background:var(--ink);color:#fff;font-size:12px;}
.pl tr.gopkey td:first-child{color:#cdd3e0;}
.divider{height:1px;background:var(--line);margin:18px 0;}
/* Control de tamaño de la interfaz (zoom) en la topbar — grupo segmentado. */
.fontscale{display:inline-flex;align-items:stretch;border:1px solid var(--line-strong);border-radius:var(--radius-sm);overflow:hidden;}
.fontscale .fs-btn{border:none;border-radius:0;padding:5px 9px;font-weight:700;background:transparent;color:var(--ink-mute);}
.fontscale .fs-btn:not(:last-child){border-right:1px solid var(--line);}
.fontscale .fs-btn:hover:not(:disabled){background:var(--bg-sunken);color:var(--ink);}
.fontscale .fs-label{min-width:48px;text-align:center;font-size:12px;font-feature-settings:'tnum';}
.fontscale .fs-btn:disabled{opacity:0.4;cursor:default;}
/* Importar compset desde Excel (bloque colapsable). */
details.cs-import{border-top:1px dashed var(--line-strong);padding-top:10px;}
details.cs-import summary{cursor:pointer;font-weight:700;color:var(--accent-deep);font-size:13px;padding:4px 0;list-style:none;}
details.cs-import summary::-webkit-details-marker{display:none;}
details.cs-import summary::before{content:'▸ ';color:var(--accent);}
details.cs-import[open] summary::before{content:'▾ ';}
details.cs-import textarea{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--bg-elev);color:var(--ink);resize:vertical;}
/* Régimen base en el título del gráfico de tarifas + indicativo en la sección Régimen. */
.title-board{font-family:var(--font-body);font-size:13px;font-weight:600;color:var(--accent-deep);}
.board-baseinfo{background:var(--bg-sunken);border-left:3px solid var(--line-strong);border-radius:0 var(--radius-sm) var(--radius-sm) 0;padding:9px 13px;margin:0 0 14px;font-size:13px;color:var(--ink-mute);line-height:1.5;}
/* Tabla unificada habitaciones + ocupación: banda de definición de composiciones. */
.roomocc tr.rocc-def td{background:var(--accent-soft);}
.roomocc tr.rocc-def td.rocc-deflbl{text-align:right;font-weight:700;color:var(--accent-deep);font-size:12px;}
.roomocc tr.rocc-def + tr:not(.rocc-def) td{border-top:2px solid var(--accent);}
.divider-soft{height:1px;background:var(--line);margin:12px 0;}
.legend{display:flex;flex-wrap:wrap;gap:12px;font-size:12px;color:var(--ink-mute);margin-top:10px;}
.legend span{display:flex;align-items:center;gap:5px;}
.legend i{width:10px;height:10px;border-radius:2px;display:inline-block;}
.legend i.line{width:14px;height:2px;border-radius:0;}
.scenario-card{background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--radius-lg);padding:22px;position:relative;}
.scenario-card.featured{border:1px solid var(--ink);box-shadow:0 0 0 3px var(--accent-soft);}
.scn-title{font-family:var(--font-display);font-size:19px;font-weight:500;margin:0 0 4px;}
.scn-sub{font-size:13px;color:var(--ink-mute);margin:0 0 14px;}
.scn-big{font-family:var(--font-display);font-size:36px;font-weight:500;margin:0;letter-spacing:-0.02em;line-height:1;font-feature-settings:'tnum';}
.scn-big.pos{color:var(--success);}
.scn-big.neg{color:var(--danger);}
.scn-big-lbl{font-size:11px;letter-spacing:0.1em;text-transform:uppercase;color:var(--ink-faint);margin:2px 0 14px;font-weight:600;}
.scn-badge{position:absolute;top:16px;right:16px;padding:3px 10px;border-radius:999px;background:var(--ink);color:var(--bg);font-size:11px;letter-spacing:0.06em;text-transform:uppercase;font-weight:600;}
.engine-step{background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--radius);padding:14px 18px;margin-bottom:10px;display:grid;grid-template-columns:30px 1fr auto;gap:14px;align-items:center;transition:all 0.15s ease;}
.engine-step:hover{border-color:var(--line-strong);}
.engine-num{font-family:var(--font-display);font-size:18px;color:var(--accent);font-weight:500;text-align:center;font-feature-settings:'tnum';}
.engine-label{font-size:14px;color:var(--ink);font-weight:500;margin:0 0 3px;}
.engine-formula{font-family:var(--font-mono);font-size:12px;color:var(--ink-mute);margin:0;line-height:1.5;}
.engine-value{font-family:var(--font-display);font-size:18px;font-weight:500;text-align:right;color:var(--ink);font-feature-settings:'tnum';}
.engine-group-title{font-family:var(--font-display);font-size:17px;font-weight:500;margin:20px 0 12px;padding-bottom:6px;border-bottom:1px solid var(--line);}
.engine-group-title:first-child{margin-top:0;}
.row{display:flex;align-items:center;gap:12px;}
.row.gap-sm{gap:6px;}
.row.space{justify-content:space-between;}
.mt-2{margin-top:8px;}.mt-3{margin-top:12px;}.mt-4{margin-top:16px;}.mt-5{margin-top:20px;}
.mb-2{margin-bottom:8px;}.mb-3{margin-bottom:12px;}.mb-4{margin-bottom:16px;}.mb-5{margin-bottom:20px;}
.text-mute{color:var(--ink-mute);}
.text-sm{font-size:13px;}
.badge{display:inline-flex;align-items:center;padding:2px 7px;border-radius:4px;font-size:11px;font-weight:600;letter-spacing:0.04em;text-transform:uppercase;}
.badge.primario{background:var(--accent-soft);color:var(--accent-deep);}
.badge.secundario{background:var(--bg-sunken);color:var(--ink-2);}
.badge.no{background:var(--bg-sunken);color:var(--ink-faint);}
@media(max-width:1100px){.app{grid-template-columns:208px 1fr;}.kpi-strip{grid-template-columns:repeat(4,1fr);}.kpi:nth-child(n+5){border-top:1px solid var(--line);}.kpi:nth-child(4n){border-right:none;}.grid-3,.grid-4{grid-template-columns:1fr 1fr;}}
@media(max-width:780px){.app{grid-template-columns:1fr;}.sidebar{display:none;}.content{padding:16px;}.grid-2,.grid-2.lopsided,.grid-2.rt{grid-template-columns:1fr;}.grid-3,.grid-4{grid-template-columns:1fr;}.kpi-strip{grid-template-columns:repeat(2,1fr);}}

/* === Informe PDF (vista de impresión) === */
#report{display:none;}
.rep{font-family:var(--font-body);color:var(--ink);font-size:11px;line-height:1.5;}
.rep h1{font-family:var(--font-display);font-size:30px;font-weight:500;margin:0 0 4px;letter-spacing:-0.01em;}
.rep h2{font-family:var(--font-display);font-size:17px;font-weight:500;margin:0 0 3px;border-bottom:2px solid var(--accent);padding-bottom:4px;}
.rep-sub{font-size:11px;color:var(--ink-mute);margin:0 0 8px;}
.rep-sec{margin:0 0 16px;page-break-inside:avoid;}
.rep table{width:100%;border-collapse:collapse;font-size:10.5px;margin-top:4px;}
.rep th{text-align:left;font-size:8.5px;text-transform:uppercase;letter-spacing:0.06em;color:var(--ink-faint);font-weight:700;padding:3px 6px;border-bottom:1.5px solid var(--line-strong);}
.rep th.n,.rep td.n{text-align:right;font-feature-settings:'tnum';}
.rep td{padding:3px 6px;border-bottom:1px solid var(--line);}
.rep tr.sub td{font-weight:700;background:var(--bg-sunken);}
.rep tr.tot td{font-weight:700;border-top:1.5px solid var(--line-strong);}
.rep tr.gop td{font-weight:700;background:var(--accent-soft);color:var(--accent-deep);}
.rep-kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;}
.rep-kpi{border:1px solid var(--line);border-radius:6px;padding:7px 9px;}
.rep-kpi .l{font-size:8px;text-transform:uppercase;letter-spacing:0.05em;color:var(--ink-faint);margin:0;}
.rep-kpi .v{font-family:var(--font-display);font-size:16px;font-weight:500;margin:1px 0;}
.rep-kpi .s{font-size:8.5px;color:var(--ink-mute);margin:0;}
.rep-kpis-op{margin-bottom:10px;}
.rep-kpis-op .rep-kpi{padding:5px 7px;}
.rep-kpis-op .v{font-size:13px;}
.rep-chart{display:block;width:100%;height:auto;margin:2px 0 6px;}
.rep-leg{display:flex;flex-wrap:wrap;gap:4px 14px;font-size:9px;color:var(--ink-mute);margin:-2px 0 6px;}
.rep-leg-i{display:inline-flex;align-items:center;gap:4px;}
.rep-leg-i i{width:9px;height:9px;border-radius:2px;display:inline-block;}
.rep-cols{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:start;}
.rep-half{margin-top:10px;}
.rep-foot{font-size:8px;color:var(--ink-faint);margin-top:18px;border-top:1px solid var(--line);padding-top:6px;}
.rep-cover{min-height:250mm;display:flex;flex-direction:column;justify-content:center;page-break-after:always;position:relative;}
.rep-logo{width:185px;height:auto;position:absolute;top:0;left:0;}
.rep-kicker{font-size:11px;text-transform:uppercase;letter-spacing:0.12em;color:var(--accent-deep);font-weight:700;margin:0 0 6px;}
.rep-meta{font-size:14px;color:var(--ink-mute);margin:2px 0 24px;}
.rep-cover-facts{display:grid;grid-template-columns:repeat(2,max-content);gap:16px 48px;}
.rep-cover-facts div{font-size:11px;color:var(--ink-mute);}
.rep-cover-facts span{display:block;font-family:var(--font-display);font-size:26px;color:var(--ink);font-weight:500;}
.rep-cover-foot{position:absolute;bottom:0;left:0;font-size:10px;color:var(--ink-faint);}
/* Pantalla de Metodología */
.meth{max-width:820px;}
.meth-sec{padding:14px 0;border-top:1px solid var(--line);}
.meth-sec:first-child{border-top:0;}
.meth-sec h3{font-family:var(--font-display);font-size:17px;color:var(--ink);font-weight:600;margin:0 0 6px;}
.meth-sub{font-size:12.5px;color:var(--accent-deep);font-weight:600;margin:0 0 8px;}
.meth p{font-size:13.5px;line-height:1.6;color:var(--ink-mute);margin:0 0 9px;}
.meth ul,.meth ol{margin:0 0 9px;padding-left:20px;}
.meth li{font-size:13.5px;line-height:1.55;color:var(--ink-mute);margin:0 0 5px;}
.meth strong{color:var(--ink);font-weight:600;}
.meth code{background:var(--accent-soft);color:var(--accent-deep);padding:1px 5px;border-radius:4px;font-size:12px;}
/* Glosario */
.gloss-cat{padding:12px 0;border-top:1px solid var(--line);}
.gloss-cat:first-child{border-top:0;}
.gloss-cat h3{font-family:var(--font-display);font-size:16px;color:var(--accent-deep);font-weight:600;margin:0 0 8px;}
.gloss-list{list-style:none;margin:0;padding:0;}
.gloss-item{font-size:13.5px;line-height:1.55;color:var(--ink-mute);margin:0 0 9px;padding-left:0;}
.gloss-term{font-weight:700;color:var(--ink);}
.gloss-en{font-style:italic;color:var(--ink-faint);font-size:12.5px;}
.gloss-def em{font-style:italic;color:var(--ink-2);}
.gloss-def strong{color:var(--ink);font-weight:600;}
#gloss-search:focus{outline:none;border-color:var(--accent);}
@media print{
  /* El informe PDF siempre en claro, aunque la app esté en modo noche (texto oscuro/papel blanco). */
  html[data-theme="dark"]{--bg:#FBF8F3;--bg-elev:#FFFFFF;--bg-sunken:#F2EDE2;--ink:#0F1A2E;--ink-2:#2C3B59;--ink-mute:#5A6680;--ink-faint:#9098A8;--line:#E8E2D5;--line-strong:#D6CFC0;--accent:#B85A3E;--accent-soft:#F5E6DD;--accent-deep:#8C3F26;--success:#2E7D5B;--danger:#B23A30;--warn:#C48A1E;}
  .app{display:none!important;}
  #report{display:block!important;}
  body{background:#fff;}
  @page{size:A4;margin:14mm 13mm;}
}

/* === Presentación al cliente === */
.pres .pres-card{margin-top:18px;}
.pres-hero{background:linear-gradient(135deg,#0F1A2E 0%,#2C3B59 60%,#3A4D6E 100%);color:#fff;border:none;}
.pres-hero-top{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;}
.pres-title{font-family:var(--font-display);font-size:34px;font-weight:500;letter-spacing:-0.02em;margin:6px 0 4px;color:#fff;line-height:1.05;}
.pres-sub{font-size:13px;color:rgba(255,255,255,.78);margin:0;}
.pres-hero .crumb{color:rgba(255,255,255,.6);text-transform:uppercase;letter-spacing:.6px;font-size:11px;}
.pres-hero .btn{color:#fff;border-color:rgba(255,255,255,.35);}
.pres-kpis{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;margin-top:20px;background:rgba(255,255,255,.14);border-radius:var(--radius);overflow:hidden;}
.pres-kpis-sm{grid-template-columns:repeat(3,1fr);}
.pres-kpi{background:rgba(255,255,255,.04);padding:14px 16px;}
.pres-kpis-sm .pres-kpi{background:var(--bg-elev);}
.pres-kpi-l{font-size:10.5px;text-transform:uppercase;letter-spacing:.5px;color:rgba(255,255,255,.7);margin:0 0 4px;}
.pres-kpi-v{font-family:var(--font-display);font-size:24px;font-weight:500;color:#fff;margin:0;line-height:1.05;}
.pres-kpi-s{font-size:11px;color:rgba(255,255,255,.6);margin:3px 0 0;}
.pres-kpis-sm .pres-kpi-l{color:var(--ink-faint);}
.pres-kpis-sm .pres-kpi-v{color:var(--ink);}
.pres-kpis-sm .pres-kpi-s{color:var(--ink-mute);}
@media(max-width:1100px){.pres-kpis{grid-template-columns:repeat(3,1fr);}}
@media(max-width:780px){.pres-kpis,.pres-kpis-sm{grid-template-columns:repeat(2,1fr);}}

.pres-card-head{margin-bottom:14px;}
.pres-card-eyebrow{font-size:10px;text-transform:uppercase;letter-spacing:.7px;color:var(--accent-deep);margin:0 0 2px;font-weight:700;}
.pres-card-title{font-family:var(--font-display);font-size:21px;font-weight:500;letter-spacing:-0.01em;margin:0;}
.pres-card-sub{font-size:12.5px;color:var(--ink-mute);margin:3px 0 0;}
.pres-card .pres-card-head{border-bottom:1px solid var(--line);padding-bottom:10px;}
.pres-footer{text-align:center;font-size:11px;color:var(--ink-faint);letter-spacing:.4px;margin:24px 0 4px;}

/* Impresión SOLO de la presentación (en vez del informe #report) */
@media print{
  body.print-pres .app{display:block!important;}
  body.print-pres #report{display:none!important;}
  body.print-pres .sidebar,body.print-pres .topbar,body.print-pres footer.step-nav,body.print-pres .no-print{display:none!important;}
  body.print-pres .main{display:block!important;}
  body.print-pres .step-content:not(#s-presentacion){display:none!important;}
  body.print-pres #s-presentacion{display:block!important;}
  body.print-pres .pres-card,body.print-pres .pres-hero{break-inside:avoid;}
  body.print-pres .pres-hero{-webkit-print-color-adjust:exact;print-color-adjust:exact;}
}

/* Explorador de hoteles (sección de datos de mercado) */
.exp-f{ display:inline-flex; flex-direction:column; gap:3px; }
.exp-f select, .exp-f input{ min-width:130px; }
.exp-row{ padding:8px 12px; border-bottom:1px solid var(--line); cursor:pointer; }
.exp-row:hover{ background:var(--bg-sunken); }
.exp-row.sel{ background:var(--accent-soft); }

/* Ocultar barra lateral (toggle topbar · contenido a todo el ancho) */
.app.sidebar-collapsed{ grid-template-columns:1fr; }
.app.sidebar-collapsed .sidebar{ display:none; }

/* Gráficos maximizables en Presentación: botón ⛶ (oculto al maximizar) y canvas simple↔compset */
.chart-wrap .chart-max{ position:absolute; top:6px; right:6px; z-index:2; opacity:.5; }
.chart-wrap .chart-max:hover{ opacity:1; }
.chart-wrap.chart-full .chart-max{ display:none; }
.chart-wrap .cs-full-only{ display:none !important; }
.chart-wrap.chart-full .cs-full-only{ display:block !important; }
.chart-wrap.chart-full .cs-normal-only{ display:none !important; }

/* === Gestor de proyectos (home.js) === */
#projects-home{position:fixed;inset:0;z-index:900;background:var(--bg);display:none;overflow-y:auto;}
.pf-wrap{max-width:1500px;width:100%;margin:0 auto;padding:30px 46px 60px;box-sizing:border-box;}
.pf-head{display:flex;justify-content:space-between;align-items:flex-start;gap:20px;margin-bottom:16px;}
.pf-brand{font-size:11.5px;letter-spacing:.14em;color:var(--ink-mute);margin:0 0 2px;}
.pf-head h1{font-family:var(--font-display);font-size:34px;font-weight:400;letter-spacing:-.02em;margin:0;line-height:1;}
.pf-user{display:flex;align-items:center;gap:9px;}
.pf-avatar{width:30px;height:30px;border-radius:50%;background:var(--ink);color:#fff;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;}
.pf-email{font-size:13px;color:var(--ink-mute);}
.pf-logout{border:1px solid var(--line-strong);background:var(--bg-elev);color:var(--ink-2);font-size:12.5px;padding:5px 12px;border-radius:var(--radius-sm);cursor:pointer;font-family:inherit;}
.pf-logout:hover{border-color:var(--accent);color:var(--accent);}
.pf-toolbar{display:flex;justify-content:space-between;align-items:center;gap:14px;margin-bottom:22px;flex-wrap:wrap;}
.pf-tools{display:flex;align-items:center;gap:9px;}
.pf-search{padding:9px 13px;border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--bg-elev);color:var(--ink);font-size:13.5px;min-width:240px;}
.pf-sort{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--ink-mute);}
.pf-sort select{padding:7px 9px;border:1px solid var(--line-strong);border-radius:var(--radius-sm);background:var(--bg-elev);color:var(--ink);font-size:13px;font-family:inherit;}
.pf-viewtoggle{display:flex;border:1px solid var(--line-strong);border-radius:var(--radius-sm);overflow:hidden;}
.pf-viewtoggle button{border:0;background:var(--bg-elev);color:var(--ink-mute);font-size:15px;padding:6px 11px;cursor:pointer;}
.pf-viewtoggle button.active{background:var(--ink);color:#fff;}
.pf-body{display:grid;grid-template-columns:248px minmax(0,1fr);gap:30px;align-items:start;}
.pf-side{display:flex;flex-direction:column;gap:3px;position:sticky;top:20px;}
.pf-folders-h{font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-faint);margin:14px 0 4px 10px;}
.pf-folder{display:flex;justify-content:space-between;align-items:center;gap:8px;width:100%;text-align:left;padding:8px 11px;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--ink-2);font-size:13.5px;cursor:pointer;font-family:inherit;}
.pf-folder:hover{background:var(--bg-sunken);}
.pf-folder.active{background:var(--accent-soft);color:var(--accent-deep);font-weight:600;}
.pf-count{font-size:11.5px;color:var(--ink-faint);background:var(--bg-sunken);border-radius:20px;padding:1px 8px;min-width:20px;text-align:center;}
.pf-folder.active .pf-count{background:var(--bg-elev);color:var(--accent-deep);}
.pf-newfolder{margin-top:8px;padding:8px 11px;border:1px dashed var(--line-strong);border-radius:var(--radius-sm);background:transparent;color:var(--ink-mute);font-size:13px;cursor:pointer;font-family:inherit;text-align:left;}
.pf-newfolder:hover{border-color:var(--accent);color:var(--accent);}
.pf-folder.pf-drop,.pf-newfolder.pf-drop{background:var(--accent-soft);outline:2px dashed var(--accent);outline-offset:-2px;color:var(--accent-deep);}
.pf-fname{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.pf-folder-right{display:flex;align-items:center;justify-content:flex-end;min-width:22px;}
.pf-folder-del{display:none;width:20px;height:20px;align-items:center;justify-content:center;border-radius:5px;color:var(--ink-faint);font-size:17px;line-height:1;cursor:pointer;}
.pf-folder-del:hover{background:var(--danger-soft);color:var(--danger);}
.pf-folder:hover .pf-folder-right .pf-count{display:none;}
.pf-folder:hover .pf-folder-del{display:inline-flex;}
/* Rejilla */
.pf-content.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));gap:18px;align-content:start;}
.pf-content.list{display:flex;flex-direction:column;gap:7px;}
.pf-card{position:relative;background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--radius-lg);padding:16px 17px 14px;cursor:pointer;transition:border-color .12s,box-shadow .12s,transform .12s;}
.pf-card[draggable]{cursor:grab;}
.pf-card:hover{border-color:var(--line-strong);box-shadow:0 6px 22px rgba(15,26,46,.09);transform:translateY(-1px);}
.pf-card.is-active{border-color:var(--accent);}
.pf-card.pf-dragging{opacity:.45;cursor:grabbing;}
.pf-card.pf-menu-open{z-index:50;}
.pf-card-top{display:flex;justify-content:space-between;align-items:flex-start;gap:8px;}
.pf-card-name{font-family:var(--font-display);font-size:17.5px;font-weight:500;line-height:1.15;letter-spacing:-.01em;}
.pf-badge{font-family:var(--font-body);font-size:10px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--accent-deep);background:var(--accent-soft);border-radius:5px;padding:1px 6px;vertical-align:middle;}
.pf-menu-btn{border:0;background:transparent;color:var(--ink-faint);font-size:20px;line-height:1;cursor:pointer;padding:0 4px;border-radius:5px;}
.pf-menu-btn:hover{background:var(--bg-sunken);color:var(--ink);}
.pf-card-meta{font-size:12.5px;color:var(--ink-mute);margin:4px 0 12px;}
.pf-kpis{display:flex;gap:14px;margin-bottom:13px;}
.pf-kpis span{display:flex;flex-direction:column;}
.pf-kpis b{font-size:16px;color:var(--ink);font-variant-numeric:tabular-nums;}
.pf-kpis i{font-size:10.5px;color:var(--ink-faint);font-style:normal;letter-spacing:.03em;}
.pf-card-foot{display:flex;justify-content:space-between;align-items:center;font-size:11.5px;color:var(--ink-mute);border-top:1px solid var(--line);padding-top:9px;}
.pf-nofolder{color:var(--ink-faint);}
.pf-saved{color:var(--ink-faint);}
/* Vista lista (compacta, completa) */
.pf-card.pf-list{display:grid;grid-template-columns:minmax(220px,1fr) minmax(230px,auto) 150px 128px 30px;align-items:center;gap:16px;padding:11px 16px;}
.pf-card.pf-list .pf-card-name{font-size:15.5px;}
.pf-card.pf-list .pf-card-meta{margin:2px 0 0;}
.pf-list-kpis{display:flex;gap:16px;font-size:12.5px;color:var(--ink-mute);}
.pf-list-kpis b{color:var(--ink);font-size:14px;font-variant-numeric:tabular-nums;margin-right:3px;}
.pf-list-folder{font-size:12px;color:var(--ink-mute);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.pf-list-date{font-size:11.5px;color:var(--ink-faint);text-align:right;}
.pf-card.pf-list .pf-menu-btn{justify-self:end;}
/* Menú de acciones */
.pf-menu{position:absolute;top:40px;right:14px;z-index:5;background:var(--bg-elev);border:1px solid var(--line-strong);border-radius:var(--radius);box-shadow:0 10px 30px rgba(15,26,46,.16);padding:5px;min-width:190px;}
.pf-menu button{display:block;width:100%;text-align:left;padding:8px 11px;border:0;background:transparent;color:var(--ink-2);font-size:13px;cursor:pointer;border-radius:6px;font-family:inherit;}
.pf-menu button:hover{background:var(--bg-sunken);}
.pf-menu button.pf-del{color:var(--danger);}
.pf-menu-h{font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-faint);padding:6px 11px 3px;}
.pf-menu button.pf-newmv{border-top:1px solid var(--line);color:var(--accent-deep);}
.pf-empty{padding:60px 20px;text-align:center;color:var(--ink-mute);font-size:15px;}
#btn-home{font-size:15px;}
@media(max-width:820px){.pf-body{grid-template-columns:1fr;}.pf-side{position:static;flex-direction:row;flex-wrap:wrap;}.pf-card.pf-list{grid-template-columns:1fr auto;}.pf-list-kpis,.pf-list-folder,.pf-list-date{display:none;}}
/* Papelera en el gestor */
.pf-content.pf-trashview{display:block;}
.pf-trash-item{margin-top:6px;border-top:1px solid var(--line);border-radius:0;padding-top:12px;}
.pf-trash-head{display:flex;justify-content:space-between;align-items:center;gap:14px;margin-bottom:14px;flex-wrap:wrap;}
.pf-trash-note{font-size:13px;color:var(--ink-mute);margin:0;}
.pf-empty-btn{color:var(--danger);border-color:var(--danger-soft);}
.pf-empty-btn:disabled{opacity:.45;cursor:default;color:var(--ink-faint);}
.pf-trow{display:flex;justify-content:space-between;align-items:center;gap:16px;width:100%;background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--radius);padding:12px 18px;margin-bottom:8px;}
.pf-trow .pf-card-meta{white-space:nowrap;margin:3px 0 0;}
.pf-trow-actions{display:flex;gap:8px;flex-shrink:0;}
.pf-forever{color:var(--danger);}
