:root{--igr-primary:#0F4C81;--igr-secondary:#2A9D8F;--topbar-h:56px}
body{background:#f4f6f9}
.topbar{height:var(--topbar-h);background:var(--igr-primary);justify-content:space-between;position:sticky;top:0;z-index:1030}
.shell{display:flex;min-height:calc(100vh - var(--topbar-h))}
.sidebar{width:230px;flex:0 0 230px;background:#fff;border-right:1px solid #dee2e6}
@media (min-width:992px){.sidebar{position:sticky;top:var(--topbar-h);height:calc(100vh - var(--topbar-h));overflow-y:auto}}
.sidebar .nav-link{color:#343a40;border-radius:.375rem;padding:.5rem .75rem}
.sidebar .nav-link:hover{background:#eef2f7}
.sidebar .nav-link.active{background:var(--igr-primary);color:#fff}
.content{flex:1;min-width:0}
.bi{width:1em;height:1em;fill:currentColor;vertical-align:-.125em}
.stat-icon{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:.5rem;background:color-mix(in srgb,var(--igr-primary) 12%,white);color:var(--igr-primary);font-size:1.3rem}
.form-narrow{max-width:460px}
.btn-primary{--bs-btn-bg:var(--igr-primary);--bs-btn-border-color:var(--igr-primary);--bs-btn-hover-bg:color-mix(in srgb,var(--igr-primary) 85%,black);--bs-btn-hover-border-color:color-mix(in srgb,var(--igr-primary) 85%,black);--bs-btn-active-bg:color-mix(in srgb,var(--igr-primary) 75%,black)}
.guest-body{display:flex;align-items:center;min-height:100vh;background:linear-gradient(160deg,#0F4C81 0%,#2A9D8F 100%)}
.guest-wrap{width:100%;max-width:420px;margin:2rem auto;padding:0 1rem}
.guest-brand{text-align:center;color:#fff;margin-bottom:1.25rem}
.guest-logo{display:inline-flex;width:56px;height:56px;border-radius:50%;background:rgba(255,255,255,.18);align-items:center;justify-content:center;font-size:1.6rem;margin-bottom:.5rem}
.guest-brand p{color:rgba(255,255,255,.8)!important}
.guest-wrap>p{color:rgba(255,255,255,.85)!important}
.recovery-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.5rem;max-width:380px}
:focus-visible{outline:3px solid #ffbf47;outline-offset:2px}

/* Mapa turístico (Etapa 6) */
.map-canvas { height: 62vh; min-height: 360px; background: #e9eef3; }
.legend-dot { display: inline-block; width: .85rem; height: .85rem; border-radius: 50%; margin-right: .4rem; border: 2px solid #fff; box-shadow: 0 0 0 1px #adb5bd; vertical-align: -1px; }
.legend-validated { background: #198754; }
.legend-pending { background: #fd7e14; }
.legend-draft { background: #6c757d; }
.legend-outdated { background: #dc3545; }
.legend-demand { background: #6f42c1; }

/* Gráficos (Etapa 7). Tokens validados com validate_palette.js (claro: superfície #fcfcfb; escuro: #1a1a19).
   O app ainda não tem tema escuro; os tokens escuros valem sob [data-bs-theme="dark"] quando existir. */
:root{--chart-1:#2a78d6;--chart-2:#eb6834;--chart-3:#1baf7a;--chart-4:#eda100;--chart-5:#e87ba4;--chart-6:#6250d6;
  --chart-grid:#e3e6ea;--chart-axis:#6b7280;--chart-ink:#212529}
[data-bs-theme="dark"]{--chart-1:#3987e5;--chart-2:#d95926;--chart-3:#199e70;--chart-4:#c98500;--chart-5:#d55181;--chart-6:#9085e9;
  --chart-grid:#33332f;--chart-axis:#a3a39d;--chart-ink:#ecece8}
.chart-box{position:relative;height:240px}
.chart-card summary{cursor:pointer;color:var(--bs-secondary-color)}
@media print{
  .topbar,.sidebar,.no-print,.btn,form[role="search"]{display:none!important}
  body{background:#fff}.content{padding:0!important}.card{break-inside:avoid;box-shadow:none}
  .chart-card details{display:block}.chart-card details>*{display:block}
}
