:root{
  --bg:#f4f7f9;
  --surface:#ffffff;
  --surface-2:#f8fbfc;
  --line:#d8e2e7;
  --line-strong:#b9c9cf;
  --text:#0f1720;
  --muted:#5d6b75;
  --primary:#0f766e;
  --primary-strong:#0b5f59;
  --primary-soft:#e6f5f3;
  --primary-muted:#9accc6;
  --primary-grad-end:#134e4a;
  --focus-ring-color:rgba(15,118,110,.18);
  --danger:#b42318;
  --danger-soft:#fff2f0;
  --success:#087443;
  --success-soft:#ebfaf2;
  --warning:#b45309;
  --shadow:0 16px 34px rgba(15, 23, 32, .08);
  --radius:18px;
  --radius-sm:12px;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;
  background:linear-gradient(180deg,#eef4f5 0%, var(--bg) 180px);
  color:var(--text);
}
a{color:var(--primary);text-decoration:none}
a:hover{text-decoration:underline}
.app-shell{max-width:1280px;margin:0 auto;padding:28px 24px 48px}
.topbar{display:flex;justify-content:space-between;align-items:center;gap:16px;margin-bottom:22px}
.brand{display:flex;align-items:center;gap:14px}
.brand-badge{width:44px;height:44px;border-radius:14px;background:linear-gradient(135deg,var(--primary),var(--primary-grad-end));color:#fff;display:grid;place-items:center;font-weight:800;box-shadow:var(--shadow)}
.brand-title{font-size:1.2rem;font-weight:800;letter-spacing:.01em}
.brand-subtitle{color:var(--muted);font-size:.92rem;margin-top:2px}
.page-title{font-size:1.9rem;line-height:1.1;margin:6px 0 8px;font-weight:800}
.page-subtitle{margin:0;color:var(--muted);max-width:820px}
.actions,.row{display:flex;gap:12px;flex-wrap:wrap;align-items:center}
.grid-2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}
.grid-3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}
.sidebar-layout{display:grid;grid-template-columns:280px minmax(0,1fr);gap:20px}
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:20px;margin-top:18px}
.card.tight{padding:16px}
.card-header{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:14px}
.card-title{margin:0;font-size:1.08rem;font-weight:800}
.card-note,.small,.hint{color:var(--muted);font-size:.92rem}
.hero{padding:28px;background:linear-gradient(135deg,var(--primary) 0%,var(--primary-grad-end) 100%);color:#fff;border:none}
.hero .page-title,.hero .page-subtitle,.hero .card-note{color:#fff}
.btn,.menu button{
  appearance:none;border:1px solid var(--line-strong);background:#fff;color:var(--text);
  border-radius:14px;padding:11px 16px;min-height:44px;font-weight:700;font-size:.95rem;cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center;gap:8px;text-decoration:none;transition:.18s ease;
}
.btn:hover,.menu button:hover{transform:translateY(-1px);border-color:#9db4bb;box-shadow:0 10px 20px rgba(15,23,32,.06);text-decoration:none}
.btn.primary{background:var(--primary);color:#fff;border-color:var(--primary)}
.btn.primary:hover{background:var(--primary-strong);border-color:var(--primary-strong)}
.btn.secondary{background:var(--surface-2)}
.btn.danger{background:#fff;color:var(--danger);border-color:#efc4bf}
.btn.small{min-height:36px;padding:8px 12px;border-radius:12px;font-size:.88rem}
label{display:block;font-size:.92rem;font-weight:700;color:#1f2933;margin-bottom:8px}
.field{display:flex;flex-direction:column;gap:8px;min-width:180px}
input,select,textarea{
  width:100%;border:1px solid var(--line-strong);background:#fff;border-radius:14px;min-height:46px;
  padding:11px 14px;font-size:.96rem;color:var(--text);outline:none;transition:border-color .18s ease, box-shadow .18s ease;
}
input:focus,select:focus,textarea:focus{border-color:var(--primary);box-shadow:0 0 0 4px var(--focus-ring-color)}
.msg{margin-top:14px;padding:14px 16px;border-radius:14px;border:1px solid transparent;font-weight:600}
.msg.ok{background:var(--success-soft);border-color:#bfe7d0;color:var(--success)}
.msg.err{background:var(--danger-soft);border-color:#f2c7c3;color:var(--danger)}
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px}
.stat{background:var(--surface-2);border:1px solid var(--line);border-radius:16px;padding:16px}
.stat-label{font-size:.82rem;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}
.stat-value{margin-top:6px;font-size:1.5rem;font-weight:800}
.positive{color:var(--success)!important}.negative{color:var(--danger)!important}
table{width:100%;border-collapse:separate;border-spacing:0}
th,td{padding:12px 14px;text-align:left;border-bottom:1px solid #e8eef1;vertical-align:top}
th{font-size:.82rem;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;font-weight:800;background:#f8fbfc}
tr:hover td{background:#fbfdfe}
.table-wrap{overflow:auto;border:1px solid var(--line);border-radius:16px}
pre{margin:0;background:#0f1720;color:#dbe4ea;border-radius:16px;padding:16px;overflow:auto;white-space:pre-wrap;word-break:break-word}
.debug-card{display:none}
.summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:14px}
.summary .box{border:1px solid var(--line);border-radius:16px;padding:16px;background:var(--surface-2)}
.summary .label{font-size:.82rem;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}
.summary .value{font-size:1.45rem;font-weight:800;margin-top:8px}
.menu{display:flex;flex-direction:column;gap:10px}
.menu button{justify-content:flex-start;background:var(--surface-2)}
.menu button.active{background:var(--primary-soft);border-color:var(--primary-muted);color:var(--primary-strong)}
.section{display:none}.section.active{display:block}
.placeholder{padding:16px;border:1px dashed var(--line-strong);border-radius:16px;background:var(--surface-2);color:var(--muted)}
.calendar{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:12px}
.weekday,.day{border:1px solid var(--line);border-radius:16px;padding:12px;min-height:138px;background:#fff}
.weekday{min-height:auto;text-align:center;font-weight:800;background:#f7fafb;color:#32505c}
.day.empty{background:#f7fafb;border-style:dashed;color:var(--muted)}
.day-number{font-size:1.05rem;font-weight:800;margin-bottom:10px}
.day-title{font-size:.9rem;font-weight:800;margin-bottom:6px}
.day-meta{font-size:.84rem;color:#24414c;margin-top:4px}
.badge{display:inline-flex;align-items:center;padding:5px 10px;border-radius:999px;font-size:.78rem;font-weight:800;border:1px solid rgba(15,23,32,.12);background:rgba(255,255,255,.74);margin-top:10px}
.legend-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}
.legend-item{display:flex;align-items:center;gap:12px;padding:14px;border:1px solid var(--line);border-radius:16px;background:var(--surface-2)}
.legend-color,.color-sample{width:22px;height:22px;border-radius:8px;border:1px solid rgba(15,23,32,.12);flex:0 0 auto}
.legend-model{font-weight:800}.legend-desc{font-size:.86rem;color:var(--muted);margin-top:2px}
.kv-table td:first-child{width:260px;font-weight:800;color:#38515b;background:#fafcfd}
.auth-shell{max-width:560px;margin:0 auto;padding:46px 24px}
.auth-card{padding:28px}
.auth-links{display:flex;gap:16px;flex-wrap:wrap;margin-top:18px}
.center{text-align:center}
.muted{color:var(--muted)}
.hidden{display:none!important}
@media (max-width: 980px){.grid-2,.grid-3,.sidebar-layout{grid-template-columns:1fr}.topbar{flex-direction:column;align-items:flex-start}.app-shell{padding:22px 16px 36px}.calendar{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width: 620px){.calendar{grid-template-columns:1fr}.weekday{display:none}.page-title{font-size:1.55rem}.card{padding:16px}}

/* ── Paginación ──────────────────────────────────────────────────────────── */
.pagination{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:12px;flex-wrap:wrap;padding:2px 0}
.pag-info{font-size:.88rem;color:var(--muted);font-weight:600}
.pag-controls{display:flex;gap:8px;align-items:center}

/* ── Skeleton loader ─────────────────────────────────────────────────────── */
@keyframes shimmer{0%{background-position:-200% 0}100%{background-position:200% 0}}
.skeleton-row td{padding:12px 14px;border-bottom:1px solid #e8eef1}
.skeleton{display:block;height:13px;border-radius:6px;background:linear-gradient(90deg,#f0f3f4 25%,#e4eaec 50%,#f0f3f4 75%);background-size:200% 100%;animation:shimmer 1.4s linear infinite}

/* ── Estilos de impresión ────────────────────────────────────────────────── */
@media print{
  .topbar,.actions,.btn,.menu,.hero,.pagination{display:none!important}
  body{background:#fff!important}
  .card{box-shadow:none!important;border:1px solid #ccc!important;margin-top:8px}
  .app-shell{padding:0;max-width:100%}
  .section{display:block!important}
  .sidebar-layout{grid-template-columns:1fr!important}
  .grid-2,.grid-3{grid-template-columns:1fr!important}
  table{font-size:.85rem}
  a{color:#000!important;text-decoration:none!important}
  th{background:#f5f5f5!important}
}

/* ── Modo oscuro ─────────────────────────────────────────────────────────── */
@media(prefers-color-scheme:dark){
  :root{
    --bg:#0d1117;
    --surface:#161b22;
    --surface-2:#1c2128;
    --line:#30363d;
    --line-strong:#484f58;
    --text:#e6edf3;
    --muted:#7d8590;
    --primary:#14b8a6;
    --primary-strong:#0d9488;
    --primary-soft:#0d2e2c;
    --primary-muted:#0d9488;
    --primary-grad-end:#0d2e2c;
    --focus-ring-color:rgba(20,184,166,.18);
    --danger:#f85149;
    --danger-soft:#2d1212;
    --success:#3fb950;
    --success-soft:#0d2e1c;
    --warning:#d29922;
    --shadow:0 16px 34px rgba(0,0,0,.35);
  }
  body{background:var(--bg)}
  input,select,textarea{background:var(--surface-2);color:var(--text);border-color:var(--line)}
  .btn,.menu button{background:var(--surface-2);color:var(--text);border-color:var(--line)}
  .btn.primary{background:var(--primary);color:#fff;border-color:var(--primary)}
  .btn.primary:hover{background:var(--primary-strong)}
  .btn.danger{background:transparent;color:var(--danger);border-color:#4a1a18}
  .btn.secondary{background:var(--surface-2)}
  th{background:var(--surface-2)}
  tr:hover td{background:var(--surface-2)}
  pre{background:#010409;color:#c9d1d9}
  .hero{background:linear-gradient(135deg,var(--primary) 0%,var(--primary-grad-end) 100%)}
  .stat,.summary .box{background:var(--surface-2)}
  .skeleton{background:linear-gradient(90deg,#21262d 25%,#2d333b 50%,#21262d 75%);background-size:200% 100%}
}
