/*
 * Cinegética de Alcántara · estilos de aplicación
 * Hoja consolidada: estructura, componentes y adaptaciones responsive.
 */
:root {
    --sidebar:#10231b;
    --sidebar2:#183829;
    --accent:#3c7f4c;
    --accent-dark:#2e633b;
    --bg:#f5f7f4;
    --panel:#fff;
    --text:#1f2a24;
    --muted:#6c757d;
    --border:#e4e9e2;
    --shadow:0 10px 28px rgba(16,35,27,.08);
}

* { box-sizing:border-box; }
body { background:var(--bg); color:var(--text); font-family:Inter,system-ui,-apple-system,"Segoe UI",Arial,sans-serif; }
.app-shell { display:flex; min-height:100vh; }
.app-sidebar { position:fixed; inset:0 auto 0 0; z-index:1050; width:280px; padding:22px 16px; overflow-y:auto; color:#fff; background:linear-gradient(180deg,var(--sidebar),var(--sidebar2)); }
.app-main { flex:1; min-width:0; margin-left:280px; }
.app-topbar { position:sticky; top:0; z-index:100; display:flex; align-items:center; gap:14px; height:76px; padding:0 24px; background:#fff; border-bottom:1px solid var(--border); box-shadow:0 6px 18px rgba(0,0,0,.03); }

/* Marca y navegación */
.brand { display:flex; align-items:center; gap:12px; font-weight:800; line-height:1.05; }
.brand small { color:#c6d8cd; font-weight:500; }
.brand-caption { min-width:0; }
.brand-caption strong,.brand-caption small { display:block; }
.brand-logo { width:54px; height:54px; object-fit:contain; flex:0 0 auto; border-radius:50%; background:#fff; box-shadow:0 8px 22px rgba(0,0,0,.18); }
.app-sidebar .nav { gap:4px; margin-top:28px; }
.app-sidebar .nav-link { display:flex; align-items:center; gap:10px; padding:11px 12px; color:#dbe8df; border-radius:12px; font-weight:600; }
.app-sidebar .nav-link:hover,.app-sidebar .nav-link.active { color:#fff; background:rgba(255,255,255,.12); }

/* Paneles, métricas y tablas */
.panel { padding:18px; background:var(--panel); border:1px solid var(--border); border-radius:18px; box-shadow:var(--shadow); }
.metric-card { display:flex; align-items:center; gap:16px; height:100%; padding:18px; background:#fff; border:1px solid var(--border); border-radius:18px; box-shadow:var(--shadow); }
.metric-card i { padding:12px; color:var(--accent); background:#eff7f1; border-radius:14px; font-size:28px; }
.metric-card span { display:block; color:var(--muted); font-size:.9rem; }
.metric-card strong { font-size:1.35rem; }
.metric-card.compact { display:block; text-align:center; }
.quick-actions,.list-toolbar { display:flex; align-items:center; flex-wrap:wrap; gap:10px; }
.list-toolbar { gap:12px; margin-bottom:16px; }
.table { --bs-table-hover-bg:#f8fbf7; }
.table thead th { color:#5d6b62; border-bottom:1px solid var(--border); font-size:.82rem; text-transform:uppercase; letter-spacing:.04em; }
.table .btn-sm { border-radius:10px; }
.table td .bi { margin-right:4px; color:var(--accent); }
.table-actions-nowrap { width:1%; white-space:nowrap; }
.table-actions-nowrap .btn { display:inline-flex; align-items:center; justify-content:center; }
.json-preview { display:block; max-width:780px; max-height:7rem; overflow:auto; white-space:pre-wrap; color:#33443a; }

/* Panel principal: temporada actual */
.season-hero { display:flex; align-items:center; justify-content:space-between; gap:28px; padding:26px 30px; overflow:hidden; color:#fff; background:linear-gradient(120deg,#173d2a,#2f7446 68%,#448959); border-radius:22px; box-shadow:0 16px 38px rgba(16,57,35,.18); }
.season-hero-main h2 { margin:.2rem 0 .45rem; font-size:clamp(1.55rem,2.5vw,2.25rem); font-weight:850; }
.season-kicker,.section-kicker { color:#bfe0c8; font-size:.76rem; font-weight:850; text-transform:uppercase; letter-spacing:.09em; }
.section-kicker { margin-bottom:.25rem; color:var(--accent); }
.season-period { display:flex; align-items:center; flex-wrap:wrap; gap:7px; color:#e2efe6; font-size:.92rem; }
.season-balance { min-width:270px; padding:18px 22px; text-align:right; background:rgba(255,255,255,.11); border:1px solid rgba(255,255,255,.18); border-radius:17px; }
.season-balance span,.season-balance small { display:block; color:#e3f0e7; }
.season-balance strong { display:block; margin:.15rem 0; font-size:clamp(1.65rem,2.8vw,2.35rem); line-height:1.1; }
.season-balance.is-negative strong { color:#ffd2d2; }
.season-balance.is-positive strong { color:#d3f7d9; }
.season-metric-card { display:flex; align-items:center; gap:14px; height:100%; min-height:116px; padding:18px; background:#fff; border:1px solid #dce7dd; border-left:4px solid var(--accent); border-radius:18px; box-shadow:var(--shadow); }
.season-metric-card.needs-attention { border-left-color:#d8a234; background:linear-gradient(135deg,#fff,#fffaf0); }
.season-metric-icon { display:grid; place-items:center; width:48px; height:48px; flex:0 0 48px; color:var(--accent); background:#edf6ef; border-radius:14px; font-size:1.45rem; }
.needs-attention .season-metric-icon { color:#936714; background:#fff1ce; }
.season-metric-card span,.season-metric-card small { display:block; }
.season-metric-card span { color:#5e6d63; font-size:.82rem; font-weight:750; text-transform:uppercase; letter-spacing:.035em; }
.season-metric-card strong { display:block; margin:.1rem 0; font-size:1.65rem; line-height:1; }
.season-metric-card small { color:var(--muted); font-size:.78rem; }
.panel-heading-row { display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:12px; }
.finance-summary-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:12px; margin-top:18px; }
.finance-summary { padding:16px; background:#f7faf7; border:1px solid #e2e9e2; border-radius:15px; }
.finance-summary.income { border-top:4px solid #3f8b56; }
.finance-summary.expense { border-top:4px solid #c37659; }
.finance-summary.result { border-top:4px solid #668072; }
.finance-summary.result.is-positive { border-top-color:#2e8b57; }
.finance-summary.result.is-negative { border-top-color:#c45252; }
.finance-label { display:flex; align-items:center; gap:7px; color:#5d6b62; font-size:.82rem; font-weight:800; text-transform:uppercase; }
.finance-summary > strong { display:block; margin:.45rem 0 .7rem; font-size:1.38rem; }
.finance-summary.result.is-negative > strong { color:#b13e3e; }
.finance-summary.result.is-positive > strong { color:#277344; }
.finance-summary dl { margin:0; }
.finance-summary dl div { display:flex; justify-content:space-between; gap:10px; padding:.32rem 0; border-top:1px dashed #dce4dc; font-size:.8rem; }
.finance-summary dt { color:#68766d; font-weight:600; }
.finance-summary dd { margin:0; font-weight:800; white-space:nowrap; }
.pending-row { display:flex; align-items:center; justify-content:space-between; gap:14px; margin-top:10px; padding:15px; color:var(--text); background:#f8faf8; border:1px solid #e2e9e2; border-radius:14px; text-decoration:none; transition:transform .15s ease,box-shadow .15s ease; }
.pending-row:hover { color:var(--text); transform:translateY(-1px); box-shadow:0 8px 18px rgba(16,35,27,.07); }
.pending-row span { color:#5c6b61; font-size:.86rem; font-weight:750; }
.pending-row strong { font-size:1.1rem; white-space:nowrap; }
.pending-income { border-left:4px solid #d2a237; }
.pending-expense { border-left:4px solid #c76956; }
.event-card { display:flex; align-items:center; gap:16px; }
.event-icon { display:grid; place-items:center; width:54px; height:54px; flex:0 0 54px; color:var(--accent); background:#edf6ef; border-radius:16px; font-size:1.55rem; }
.event-content { min-width:0; }
.event-content > span,.event-content small { display:block; color:var(--muted); }
.event-content > span { margin-bottom:.22rem; font-size:.78rem; font-weight:800; text-transform:uppercase; letter-spacing:.04em; }
.event-content > a { display:block; overflow:hidden; color:var(--text); font-size:1.12rem; font-weight:850; text-decoration:none; text-overflow:ellipsis; white-space:nowrap; }
.event-content > a:hover { color:var(--accent); }
.event-content small { margin-top:.25rem; }
.event-empty { display:block; color:#637067; font-size:1rem; }
.historical-panel { background:#fbfcfb; box-shadow:0 6px 18px rgba(16,35,27,.045); }
.historical-grid { display:grid; grid-template-columns:repeat(6,minmax(0,1fr)); gap:10px; }
.historical-metric { display:flex; align-items:center; gap:10px; min-width:0; padding:11px; background:#fff; border:1px solid #e5eae5; border-radius:13px; }
.historical-metric > i { color:#799083; font-size:1.15rem; }
.historical-metric span,.historical-metric strong { display:block; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.historical-metric span { color:#77827b; font-size:.7rem; text-transform:uppercase; }
.historical-metric strong { font-size:.96rem; }

/* Formularios */
.form-panel .form-label { font-weight:700; }
.form-label.required::after { content:" *"; color:#b42318; }
.form-control,.form-select { padding:.65rem .8rem; border-color:#dbe3d8; border-radius:12px; }
.form-control:focus,.form-select:focus { border-color:var(--accent); box-shadow:0 0 0 .2rem rgba(60,127,76,.15); }
.btn { border-radius:12px; font-weight:700; }
.btn-primary { background:var(--accent); border-color:var(--accent); }
.btn-primary:hover { background:var(--accent-dark); border-color:var(--accent-dark); }
.alert { border-radius:14px; }
.help-panel { background:#f8fbf7; }
.sticky-actions { position:sticky; bottom:0; display:flex; justify-content:flex-end; gap:10px; margin:20px -18px -18px; padding:14px; background:rgba(255,255,255,.94); border-top:1px solid var(--border); border-radius:0 0 18px 18px; backdrop-filter:blur(8px); }
.select2-container { min-width:0; }
.select2-container--default .select2-selection--single { height:44px; border-color:#dbe3d8; border-radius:12px; }
.select2-container--default .select2-selection--single .select2-selection__rendered { line-height:42px; }
.select2-container--default .select2-selection--single .select2-selection__arrow { height:42px; }
.select2-container .select2-selection--single .select2-selection__clear { margin-right:8px; }
.input-group-select2 { align-items:stretch; flex-wrap:nowrap; }
.input-group-select2 .select2-container { flex:1 1 auto; min-width:0; }
.input-group-select2 .select2-selection--single { border-top-right-radius:0; border-bottom-right-radius:0; }
.input-group-select2 .btn { border-top-left-radius:0; border-bottom-left-radius:0; }

/* Fichas funcionales */
.gestion-card { overflow:hidden; border:1px solid var(--border); border-radius:16px; box-shadow:0 8px 20px rgba(16,35,27,.045); }
.gestion-card .card-header { color:#26372d; background:#f8fbf7; border-bottom:1px solid var(--border); font-weight:800; }
.persona-rol-preview { display:flex; align-items:center; flex-wrap:wrap; gap:6px; min-height:32px; }
.persona-rol-box { padding:14px; background:#f8fbf7; border:1px dashed #cfdccf; border-radius:14px; }
.js-nif-help.text-danger,.js-nif-help.text-success { font-weight:700; }
.tabla-reserva-puestos .form-text { font-size:.78rem; }
.js-reserva-context-help { border-left:4px solid var(--accent); }
#personaDuplicadosBox .list-group-item { margin-bottom:6px; border:1px solid #e2e8e2; border-radius:12px; }
.filters-card { padding:16px; background:linear-gradient(135deg,#f2f7f2,#f8fbf7); border:1px solid #cfdccf; border-left:5px solid var(--accent); border-radius:16px; box-shadow:0 5px 16px rgba(16,35,27,.045); }
.filters-title { display:flex; align-items:center; gap:7px; margin-bottom:10px; color:var(--accent-dark); font-size:.9rem; font-weight:800; text-transform:uppercase; letter-spacing:.035em; }
.filters-card .form-label { color:#526259; font-size:.82rem; font-weight:800; }
.filters-card .filter-actions { padding-top:4px; }
.filters-card .filter-actions .btn { min-width:145px; }
.gestion-tabs { flex-wrap:wrap; gap:4px; border-bottom:1px solid var(--border); }
.gestion-tabs .nav-link { color:#405047; border-radius:12px 12px 0 0; font-weight:800; }
.gestion-tabs .nav-link.active { color:var(--accent-dark); background:#f8fbf7; border-color:var(--border) var(--border) #f8fbf7; }
.pdf-help { padding:12px 14px; background:#f5f7f5; border:1px solid #dfe8df; border-radius:12px; }

/* Sugerencias geográficas sobre inputs de texto reales */
.location-suggest-wrap { position:relative; }
.location-suggest-box { position:absolute; z-index:2050; top:calc(100% + 4px); right:0; left:0; max-height:260px; padding:6px; overflow-y:auto; background:#fff; border:1px solid #d7dfd5; border-radius:12px; box-shadow:0 14px 32px rgba(16,35,27,.16); }
.location-suggest-item { padding:8px 10px; border-radius:9px; cursor:pointer; font-size:.92rem; }
.location-suggest-item small { display:block; margin-top:2px; color:var(--muted); }
.location-suggest-item:hover,.location-suggest-item.active { background:#eef6ef; }

/* Ordenación interactiva */
th.sortable-th { cursor:pointer; user-select:none; white-space:nowrap; }
th.sortable-th:hover { background:rgba(60,127,76,.08); }
th.sortable-th .sort-indicator { display:inline-block; min-width:1.2em; margin-left:.25rem; color:var(--accent); font-size:.78rem; }
th.sortable-th.sort-multi .sort-indicator { font-weight:800; }

/* Gestión económica y facturación */
.js-cobro-directo-box .alert,.js-pago-directo-box .alert { border-left:4px solid #d9a441; }
.factura-totales-box { position:sticky; bottom:0; z-index:20; padding-top:12px; background:rgba(255,255,255,.96); border-top:1px solid #d8e2d8; }
.js-factura-lineas tfoot td { border-bottom:0; }

/* Acceso */
.login-body,.login-page { min-height:100vh; display:flex; align-items:center; justify-content:center; padding:24px; background:linear-gradient(135deg,#102018,#294631); }
.login-card { width:min(440px,100%); padding:32px; background:#fff; border:1px solid var(--border); border-radius:22px; box-shadow:0 24px 80px rgba(16,35,27,.15); }
.login-brand { display:flex; align-items:center; gap:14px; margin-bottom:24px; }
.login-brand small { display:block; color:#64748b; }
.login-logo { display:block; width:150px; max-width:80%; margin:0 auto 18px; border-radius:50%; box-shadow:0 14px 32px rgba(0,0,0,.22); }

@media (max-width:991.98px) {
    .app-sidebar { transform:translateX(-105%); transition:transform .22s ease; }
    .app-sidebar.open { transform:translateX(0); }
    .app-main { margin-left:0; }
    .app-topbar { padding:0 14px; }
    .list-toolbar { align-items:stretch; }
    .list-toolbar form { min-width:100%; }
    .sticky-actions { justify-content:stretch; }
    .sticky-actions .btn { flex:1; }
    .panel { padding:14px; border-radius:16px; }
    .table-responsive { font-size:.92rem; }
    .season-hero { align-items:stretch; flex-direction:column; }
    .season-balance { min-width:0; text-align:left; }
    .historical-grid { grid-template-columns:repeat(3,minmax(0,1fr)); }
}

@media (max-width:767.98px) {
    .tabla-reserva-puestos { min-width:760px; }
    .input-group-select2 .btn { padding-right:.65rem; padding-left:.65rem; }
    .filters-card { padding:12px; }
    .gestion-tabs { flex-wrap:nowrap; padding-bottom:2px; overflow-x:auto; }
    .gestion-tabs .nav-link { white-space:nowrap; }
    .finance-summary-grid { grid-template-columns:1fr; }
}

@media (max-width:575.98px) {
    .metric-card { padding:14px; }
    .metric-card i { padding:10px; font-size:22px; }
    .app-topbar h1 { font-size:1.05rem; }
    .container-fluid { padding-right:10px; padding-left:10px; }
    .quick-actions .btn { width:100%; }
    .gestion-card .card-body { padding:14px; }
    .season-hero { padding:20px; border-radius:18px; }
    .historical-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
    .historical-metric { align-items:flex-start; }
    .historical-metric span,.historical-metric strong { white-space:normal; }
}
