/* Shared mobile navigation. Loaded by the canonical header on every route. */
#igMobileNav { display: none; }
.ig-menu-close { display: none; }
/* The brand strapline must remain readable on the dark desktop header too. */
.ig-topbar .brand-text > span { color: #effff1 !important; opacity: .95; }
.ig-topbar .brand-text strong { color: #fff !important; }
/* Beat the legacy map-shell selector that hides/dims this span later in the
   cascade; this is the same visible strapline, not a replacement copy. */
html body.has-map-shell .topbar.compact-topbar.ig-topbar--search .brand,
html body.has-map-shell .topbar.compact-topbar.ig-topbar--search .brand-text strong {
  color: #f5fff1 !important;
}
html body.has-map-shell .topbar.compact-topbar.ig-topbar--search .brand-text > span[data-i18n="tagline"] {
  display: block !important;
  color: #cfe7d7 !important;
  opacity: .98 !important;
}

/* Desktop map shell: the home page is the canonical visual contract for both
   the parcel map and the price map. */
@media (min-width: 1280px) {
  html body:is(.ig-home-map, .ig-pricemap) .topbar.compact-topbar.ig-topbar {
    gap: 12px !important;
    min-height: 72px !important;
    padding: 9px 32px !important;
  }
  html body:is(.ig-home-map, .ig-pricemap) .topbar.compact-topbar.ig-topbar .brand {
    flex: 0 0 188px !important;
    width: 188px !important;
    gap: 10px !important;
    color: #fff !important;
    opacity: 1 !important;
  }
  html body:is(.ig-home-map, .ig-pricemap) .topbar.compact-topbar.ig-topbar .brand .logo {
    width: 42px !important;
    height: 42px !important;
    min-width: 42px !important;
    opacity: 1 !important;
    background: rgba(255,255,255,.12) !important;
    border: 1px solid rgba(255,255,255,.2) !important;
  }
  html body:is(.ig-home-map, .ig-pricemap) .topbar.compact-topbar.ig-topbar .brand-text {
    opacity: 1 !important;
  }
  html body:is(.ig-home-map, .ig-pricemap) .topbar.compact-topbar.ig-topbar .brand-text strong {
    color: #fff !important;
    font-size: 16px !important;
    line-height: 1.05 !important;
  }
  html body:is(.ig-home-map, .ig-pricemap) .topbar.compact-topbar.ig-topbar .brand-text > span[data-i18n="tagline"] {
    color: #dff2e4 !important;
    font-size: 10.5px !important;
    line-height: 1.2 !important;
  }
  html body:is(.ig-home-map, .ig-pricemap) .topbar.compact-topbar.ig-topbar .top-search {
    flex: 1 1 520px !important;
    width: auto !important;
    min-width: 320px !important;
    max-width: 700px !important;
  }
  html body:is(.ig-home-map, .ig-pricemap) .topbar.compact-topbar.ig-topbar .ig-primary-nav {
    display: flex !important;
    flex: 0 1 auto !important;
    align-items: center !important;
    justify-content: center !important;
    gap: 3px !important;
    min-width: 0 !important;
  }
  html body:is(.ig-home-map, .ig-pricemap) .topbar.compact-topbar.ig-topbar .ig-primary-nav .nav-tile {
    display: inline-flex !important;
    align-items: center !important;
    min-height: 40px !important;
    padding: 0 8px !important;
    border: 1px solid transparent !important;
    border-radius: 10px !important;
    color: #effff1 !important;
    background: transparent !important;
    font-size: 11.5px !important;
    font-weight: 800 !important;
    line-height: 1.1 !important;
    white-space: nowrap !important;
  }
  html body:is(.ig-home-map, .ig-pricemap) .topbar.compact-topbar.ig-topbar .ig-primary-nav .nav-tile:hover,
  html body:is(.ig-home-map, .ig-pricemap) .topbar.compact-topbar.ig-topbar .ig-primary-nav .nav-tile:focus-visible,
  html body:is(.ig-home-map, .ig-pricemap) .topbar.compact-topbar.ig-topbar .ig-primary-nav .nav-tile.is-active {
    color: #fff !important;
    background: rgba(255,255,255,.13) !important;
    border-color: rgba(255,255,255,.18) !important;
  }
  html body:is(.ig-home-map, .ig-pricemap) .topbar.compact-topbar.ig-topbar .ig-primary-nav .nav-tile:focus-visible {
    outline: 3px solid #a7ff45 !important;
    outline-offset: 2px !important;
  }
  html body:is(.ig-home-map, .ig-pricemap) .topbar.compact-topbar.ig-topbar .ig-primary-nav .nav-tile-ico {
    display: none !important;
  }
  html body:is(.ig-home-map, .ig-pricemap) .topbar.compact-topbar.ig-topbar .ig-primary-nav .nav-tile-label {
    display: inline !important;
  }
  html body:is(.ig-home-map, .ig-pricemap) .topbar.compact-topbar.ig-topbar .topbar-right {
    position: static !important;
    flex: 0 0 auto !important;
    gap: 8px !important;
    margin-left: 0 !important;
  }
  html body:is(.ig-home-map, .ig-pricemap) .topbar.compact-topbar.ig-topbar .topbar-right .menu-toggle {
    display: inline-flex !important;
  }
  html body.ig-home-map .map-frame .report-bug-btn {
    inset: auto 76px 79px auto !important;
  }

  html body.ig-pricemap .topbar.compact-topbar.ig-topbar .ig-primary-nav {
    flex: 1 1 auto !important;
  }
}

@media (max-width: 767px) {
  :root {
    /* 1px border + 6px/56px/6px nav box; env() adds the physical safe area. */
    --ig-mobile-nav-item-height: 56px;
    --ig-mobile-nav-padding-y: 6px;
    --ig-mobile-nav-height: calc(1px + var(--ig-mobile-nav-item-height) + var(--ig-mobile-nav-padding-y) + var(--ig-mobile-nav-padding-y) + env(safe-area-inset-bottom, 0px));
  }
  /* Price-map legend is independently fixed; keep it above the global nav. */
  body.ig-pricemap .pm-legend.is-collapsed,
  body.ig-pricemap .pm-legend:not(.is-collapsed) {
    bottom: calc(var(--ig-mobile-nav-height) + 12px) !important;
  }
  /* The price sidebar creates the legend's stacking context. Keep it above
     the long-form content section so browser scroll restoration cannot hide
     or disable the fixed legend. */
  body.ig-pricemap .ig-price-sidebar { z-index: 20 !important; }

  body { padding-bottom: var(--ig-mobile-nav-height) !important; }
  /* Home is a single-screen map. There is no document content below it, so
     keep the page locked to the dynamic viewport and let the map end exactly
     at the top edge of the fixed navigation. */
  html:has(body.ig-home-map),
  body.ig-home-map {
    height: 100vh !important;
    height: 100dvh !important;
    min-height: 100vh !important;
    min-height: 100dvh !important;
    overflow: hidden !important;
    overscroll-behavior: none;
  }
  body.ig-home-map {
    padding-bottom: 0 !important;
  }
  body.ig-home-map main.app-shell.map-first {
    height: 100vh !important;
    height: 100dvh !important;
    min-height: 100vh !important;
    min-height: 100dvh !important;
  }
  body.ig-home-map main.app-shell.map-first .map-frame.full-map > #map {
    top: 0 !important;
    bottom: auto !important;
    height: calc(100% - var(--ig-mobile-nav-height)) !important;
  }
  #igMobileNav {
    position: fixed;
    z-index: 2400;
    left: 0;
    right: 0;
    bottom: 0;
    display: grid;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    gap: 2px;
    padding: var(--ig-mobile-nav-padding-y) 4px calc(var(--ig-mobile-nav-padding-y) + env(safe-area-inset-bottom, 0px));
    background: rgba(255, 255, 255, .98);
    border-top: 1px solid #dce4de;
    box-shadow: 0 -8px 24px rgba(15, 55, 30, .12);
    backdrop-filter: blur(12px);
    -webkit-backdrop-filter: blur(12px);
  }
  #igMobileNav button,
  #igMobileNav a {
    min-width: 44px;
    min-height: var(--ig-mobile-nav-item-height);
    padding: 1px 2px;
    border: 0;
    border-radius: 12px;
    background: transparent;
    color: #406051;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 2px;
    font: inherit;
    text-decoration: none;
    cursor: pointer;
  }
  #igMobileNav .ig-mobile-nav__icon {
    width: 29px;
    height: 29px;
    display: grid;
    place-items: center;
    border-radius: 10px;
  }
  #igMobileNav svg { width: 23px; height: 23px; display: block; }
  #igMobileNav small {
    display: -webkit-box;
    min-width: 0;
    min-height: 10px;
    max-width: 100%;
    max-height: 22px;
    font-size: clamp(9px, 2.6vw, 10.5px);
    font-weight: 800;
    line-height: 1.05;
    white-space: normal;
    overflow: hidden;
    overflow-wrap: normal;
    word-break: normal;
    text-align: center;
    text-overflow: clip;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;
  }
  #cookieBanner .cc-actions button,
  #cookieDetails button { min-height: 44px; box-sizing: border-box; }
  /* Prevent iOS/WebKit from zooming visible form controls. Keep this scoped
     to the mobile cascade so desktop typography stays unchanged. */
  body :is(input, select, textarea) { font-size: 16px !important; }
  body.legal-page > main {
    padding-bottom: calc(28px + var(--ig-mobile-nav-height) + env(safe-area-inset-bottom, 0px)) !important;
  }
  body.legal-page .btn-manage {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 44px;
    padding: 10px 16px;
    border: 1px solid #b8cdbd;
    border-radius: 10px;
    background: #f4fbf5;
    color: #12643a;
    font: inherit;
    font-weight: 800;
    text-decoration: none;
    cursor: pointer;
    margin-top: -12px;
  }
  #backToTop.totop {
    bottom: calc(var(--ig-mobile-nav-height) + 12px) !important;
  }
  #igMobileNav button:focus-visible,
  #igMobileNav a:focus-visible { outline: 3px solid #8ad6a7; outline-offset: -2px; }
  #igMobileNav button:hover .ig-mobile-nav__icon,
  #igMobileNav a:hover .ig-mobile-nav__icon,
  #igMobileNav [aria-current="page"] .ig-mobile-nav__icon {
    background: #e6f6eb;
    color: #147343;
  }
  body.ig-menu-open #igMobileNav { z-index: 2200; }
  body.ig-menu-open .app-menu {
    position: fixed !important;
    z-index: 2600 !important;
    inset: 0 !important;
    width: 100% !important;
    max-height: 100dvh !important;
    height: 100dvh !important;
    overflow-y: auto !important;
    box-sizing: border-box !important;
    border-radius: 0 !important;
    padding: calc(18px + env(safe-area-inset-top, 0px)) 16px calc(24px + env(safe-area-inset-bottom, 0px)) !important;
    background: #fff !important;
  }
  body.ig-menu-open #cookieBanner {
    visibility: hidden !important;
    opacity: 0 !important;
    pointer-events: none !important;
  }
  body.ig-menu-open .app-menu .menu-item { min-height: 48px; }
  body.ig-menu-open { position: fixed !important; width: 100% !important; overflow: hidden !important; overscroll-behavior: none; }
  body.ig-menu-open .ig-menu-close {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    align-self: flex-end;
    width: auto;
    min-width: 44px;
    gap: 10px;
    margin-left: auto;
    min-height: 44px;
    margin-top: 0;
    margin-right: 0;
    margin-bottom: 4px;
    padding: 10px 12px;
    border: 1px solid #dce4de;
    border-radius: 12px;
    background: #f5faf5;
    color: #103221;
    font: inherit;
    font-weight: 800;
    font-size: 15px;
    line-height: 1.1;
    cursor: pointer;
  }
  body.ig-menu-open .app-menu .menu-item { min-height: 44px; padding-block: 9px; }
  body.ig-menu-open .app-menu .menu-sep { margin-block: 3px; }
  body.ig-menu-open .ig-menu-close b { font-size: 1.35em; font-weight: 500; line-height: 1; }
  .donate-fab { bottom: calc(82px + env(safe-area-inset-bottom, 0px)) !important; }
  .donate-panel { bottom: calc(88px + env(safe-area-inset-bottom, 0px)) !important; }

  /* The mobile map frame already ends at the top edge of the fixed navigation
     (see #map height above). These offsets are therefore measured from that
     edge and must not add --ig-mobile-nav-height a second time. app.js anchors
     the report button 12px above the toggle row, preserving the 20 / 88 / 92 /
     141px lower-control stack agreed for the full mobile fold. */
  html body.has-map-shell:not(.ig-pricemap) .map-frame .map-toggle-wrap {
    bottom: 20px !important;
  }
  html body.has-map-shell:not(.ig-pricemap) .map-frame .attribution {
    bottom: 92px !important;
  }
  html body.has-map-shell:not(.ig-pricemap) .map-frame .zoom-controls {
    bottom: 141px !important;
  }

  /* The first header row is 48px high. Let the complete brand use that space
     while keeping a real gap before the language control. */
  html body.has-map-shell .topbar.compact-topbar.ig-topbar--search .brand {
    height: 48px !important;
    gap: 10px !important;
  }
  html body.has-map-shell .topbar.compact-topbar.ig-topbar--search .brand .logo {
    width: 48px !important;
    height: 48px !important;
    min-width: 48px !important;
    flex: 0 0 48px !important;
    margin: 0 !important;
  }
  html body.has-map-shell .topbar.compact-topbar.ig-topbar--search .brand-text {
    margin-top: 0 !important;
  }
  html body.has-map-shell .topbar.compact-topbar.ig-topbar--search .brand-text strong {
    font-size: 20px !important;
    line-height: 1 !important;
  }
  html body.has-map-shell .topbar.compact-topbar.ig-topbar--search .brand-text > span[data-i18n="tagline"] {
    margin-top: 3px !important;
    font-size: 11.5px !important;
    line-height: 1.2 !important;
  }
}

html.ig-cookie-modal-open,
html.ig-cookie-modal-open body,
html.ig-cookie-modal-open body:not(.has-map-shell) {
  overflow: hidden !important;
  overscroll-behavior: none;
}

/* 2026-08-13 owner mobile parity: Mapa cen has no search form, so its
   content header must be a real one-row mobile bar.  The generic map shell
   reserved a second search row anyway and constrained the bar to
   calc(100vw - 20px), leaving a dark empty band and a 20px right gap.  Keep
   the map camera untouched; remove that false visual frame instead. */
@media (max-width: 767px) {
  html body.has-map-shell.ig-pricemap {
    --pm-topbar: 64px;
  }

  html body.has-map-shell.ig-pricemap .topbar.compact-topbar.ig-topbar--content {
    position: fixed !important;
    inset: 0 0 auto 0 !important;
    width: 100% !important;
    max-width: none !important;
    min-width: 0 !important;
    height: 64px !important;
    min-height: 64px !important;
    margin: 0 !important;
    padding: 8px 12px !important;
    display: grid !important;
    grid-template-columns: minmax(0, 1fr) auto !important;
    grid-template-areas: "brand actions" !important;
    grid-template-rows: 48px !important;
    gap: 8px !important;
    align-items: center !important;
    border-radius: 0 !important;
    overflow: visible !important;
    transform: none !important;
  }

  html body.has-map-shell.ig-pricemap .topbar.compact-topbar.ig-topbar--content .brand {
    grid-area: brand !important;
    display: flex !important;
    align-items: center !important;
    gap: 9px !important;
    width: auto !important;
    max-width: 100% !important;
    min-width: 0 !important;
    height: 48px !important;
  }

  html body.has-map-shell.ig-pricemap .topbar.compact-topbar.ig-topbar--content .brand .logo {
    flex: 0 0 42px !important;
    width: 42px !important;
    height: 42px !important;
    min-width: 42px !important;
    margin: 0 !important;
  }

  html body.has-map-shell.ig-pricemap .topbar.compact-topbar.ig-topbar--content .brand-text {
    display: block !important;
    min-width: 0 !important;
  }

  html body.has-map-shell.ig-pricemap .topbar.compact-topbar.ig-topbar--content .brand-text strong {
    display: block !important;
    color: #f5fff1 !important;
    font-size: 18px !important;
    line-height: 1.05 !important;
    white-space: nowrap !important;
  }

  html body.has-map-shell.ig-pricemap .topbar.compact-topbar.ig-topbar--content .brand-text > span[data-i18n="tagline"] {
    display: block !important;
    margin-top: 3px !important;
    color: #cfe7d7 !important;
    font-size: 10px !important;
    line-height: 1.15 !important;
    white-space: nowrap !important;
  }

  html body.has-map-shell.ig-pricemap .topbar.compact-topbar.ig-topbar--content .topbar-right {
    grid-area: actions !important;
    position: static !important;
    display: flex !important;
    align-items: center !important;
    width: auto !important;
    height: 48px !important;
    margin: 0 0 0 auto !important;
    inset: auto !important;
    transform: none !important;
  }

  html body.has-map-shell.ig-pricemap .topbar.compact-topbar.ig-topbar--content .topbar-right .menu-toggle {
    display: none !important;
  }

  html body.has-map-shell.ig-pricemap .topbar.compact-topbar.ig-topbar--content .topbar-right .lang-toggle {
    display: inline-flex !important;
    width: 46px !important;
    min-width: 46px !important;
    height: 46px !important;
  }
}

/* 2026-08-10 audit closeout: the standalone parcel map keeps the accepted
   original dark shell, but its content header must participate in document
   flow. This prevents the title and search controls from rendering beneath
   the fixed header without changing the full-screen home map. */
html body.has-map-shell.ig-parcelmap:not(.ig-home-map) .topbar.compact-topbar.ig-topbar--content {
  position: sticky !important;
  top: 0 !important;
  left: auto !important;
  right: auto !important;
}
html body.has-map-shell.ig-parcelmap:not(.ig-home-map) .topbar.compact-topbar.ig-topbar--content .brand,
html body.has-map-shell.ig-parcelmap:not(.ig-home-map) .topbar.compact-topbar.ig-topbar--content .brand-text strong {
  color: #f5fff1 !important;
}
html body.has-map-shell.ig-parcelmap:not(.ig-home-map) .topbar.compact-topbar.ig-topbar--content .brand-text > span {
  color: #cfe7d7 !important;
}
html body.has-map-shell.ig-parcelmap:not(.ig-home-map) :is(
  .topbar.compact-topbar.ig-topbar--content .brand,
  .ig-workspace-search .tab,
  .ig-workspace-search input,
  .ig-workspace-search .primary,
  .ig-map-examples button
) {
  min-height: 44px !important;
}

@media (prefers-reduced-motion: reduce) {
  #igMobileNav *, #igMobileNav { scroll-behavior: auto !important; transition: none !important; }
}

/* Final cascade guard: original-ui-restore-2026.css is loaded after the
   bundled home CSS and historically re-exposed the desktop menu at phone
   widths. When the mobile nav owns the breakpoint, the duplicate toggle is
   never part of the visible mobile UI. Desktop keeps its existing toggle. */
@media (max-width: 860px) {
  html body.ig-has-mobile-nav .topbar.compact-topbar.ig-topbar .topbar-right .menu-toggle,
  html body.ig-has-mobile-nav .topbar.ig-topbar .menu-toggle {
    display: none !important;
  }
}

/* p0-shared-header-release-20260829: the Home release must not recover its
   desktop header by replacing this shared file with an older loader build.
   Keep the complete brand promise on desktop, while leaving every responsive
   rule at and below the 1180px breakpoint untouched. */
@media (min-width: 1181px) {
  html body .topbar.compact-topbar.ig-topbar .brand {
    flex: 0 0 286px !important;
    width: 286px !important;
    min-width: 286px !important;
    max-width: none !important;
    overflow: visible !important;
  }

  html body .topbar.compact-topbar.ig-topbar .brand-text {
    display: block !important;
    min-width: 0 !important;
    overflow: visible !important;
  }

  html body .topbar.compact-topbar.ig-topbar .brand-text > span[data-i18n="tagline"] {
    display: block !important;
    width: max-content !important;
    max-width: none !important;
    overflow: visible !important;
    text-overflow: clip !important;
    white-space: nowrap !important;
  }

  html body.ig-home-landing .topbar.compact-topbar.ig-topbar .topbar-right .menu-toggle {
    display: none !important;
  }
}

/* report-toolbar-consistency-20260828: one surface contract for the four
   compact report actions. Older bundles gave language, favourite, Guardian
   and close four different borders, radii and shadows; this shared layer
   keeps their semantics while making loading and ready states stable. */
@media (max-width: 860px) {
  html body.has-map-shell #detailsPanel.parcel-drawer > .drawer-titlebar {
    min-height: 64px !important;
    padding: 8px !important;
    gap: 6px !important;
  }

  html body.has-map-shell #detailsPanel.parcel-drawer
    > .drawer-titlebar
    > :is(#igReportLangToggle.report-lang-toggle,
          #btnFavReport.report-fav-btn,
          #btnGuardWatch.report-guard-btn,
          #btnCloseReport.drawer-close) {
    position: static !important;
    inset: auto !important;
    display: inline-flex !important;
    flex: 0 0 44px !important;
    align-items: center !important;
    justify-content: center !important;
    width: 44px !important;
    min-width: 44px !important;
    max-width: 44px !important;
    height: 44px !important;
    min-height: 44px !important;
    margin: 0 !important;
    padding: 0 !important;
    box-sizing: border-box !important;
    border: 1px solid var(--atlas-line, #d9e2d9) !important;
    border-radius: var(--atlas-radius-control, 12px) !important;
    background: var(--atlas-surface, #fff) !important;
    color: var(--atlas-brand-strong, #082d1d) !important;
    box-shadow: none !important;
    line-height: 1 !important;
    transform: none !important;
    cursor: pointer;
    transition:
      background-color 160ms ease-out,
      border-color 160ms ease-out,
      color 160ms ease-out;
  }

  html body.has-map-shell #detailsPanel.parcel-drawer
    > .drawer-titlebar
    > :is(#igReportLangToggle.report-lang-toggle,
          #btnFavReport.report-fav-btn,
          #btnGuardWatch.report-guard-btn,
          #btnCloseReport.drawer-close):hover {
    border-color: var(--atlas-line-strong, #bbcabd) !important;
    background: var(--atlas-surface-soft, #f4f8f2) !important;
    box-shadow: none !important;
    transform: none !important;
  }

  html body.has-map-shell #detailsPanel.parcel-drawer
    > .drawer-titlebar
    > :is(#igReportLangToggle.report-lang-toggle,
          #btnFavReport.report-fav-btn,
          #btnGuardWatch.report-guard-btn,
          #btnCloseReport.drawer-close):focus-visible {
    outline: 3px solid var(--atlas-focus, #1769aa) !important;
    outline-offset: 2px !important;
  }

  /* The modal itself receives programmatic focus when it opens so screen
     readers enter the report without Safari painting a blue ring around X.
     The dialog container is not an action; keyboard focus becomes visible on
     the first real control as soon as the user presses Tab. */
  html body.has-map-shell #detailsPanel.parcel-drawer:focus-visible {
    outline: none !important;
  }

  html body.has-map-shell #detailsPanel.parcel-drawer
    > .drawer-titlebar
    > :is(#igReportLangToggle.report-lang-toggle,
          #btnFavReport.report-fav-btn,
          #btnGuardWatch.report-guard-btn,
          #btnCloseReport.drawer-close):active {
    border-color: var(--atlas-line-strong, #bbcabd) !important;
    background: var(--atlas-page, #eef4ed) !important;
    box-shadow: none !important;
    transform: none !important;
  }

  html body.has-map-shell #detailsPanel.parcel-drawer
    > .drawer-titlebar
    > #btnFavReport.report-fav-btn.on {
    color: #d4435d !important;
  }

  html body.has-map-shell #detailsPanel.parcel-drawer
    > .drawer-titlebar
    > #btnGuardWatch.report-guard-btn.on {
    border-color: #afd5bc !important;
    background: #e7f7ec !important;
    color: #1f7a3d !important;
  }

  html body.has-map-shell #detailsPanel.parcel-drawer
    > .drawer-titlebar
    > #btnCloseReport.drawer-close {
    font-size: 24px !important;
  }

  html body.has-map-shell #detailsPanel.parcel-drawer
    > .drawer-titlebar
    > :is(#btnFavReport.report-fav-btn, #btnGuardWatch.report-guard-btn) svg {
    display: block;
    flex: 0 0 20px;
    width: 20px;
    height: 20px;
  }
}

@media (max-width: 860px) and (prefers-reduced-motion: reduce) {
  html body.has-map-shell #detailsPanel.parcel-drawer
    > .drawer-titlebar
    > :is(#igReportLangToggle.report-lang-toggle,
          #btnFavReport.report-fav-btn,
          #btnGuardWatch.report-guard-btn,
          #btnCloseReport.drawer-close) {
    transition: none !important;
  }
}

/* loader-mobile-long-label-final-20260825: this direct sheet is loaded after
   home-final.min.css, so it must preserve the loader's final narrow-phone
   column widths instead of restoring the older 34px/12px tile geometry. */
@media (min-width: 361px) and (max-width: 420px) {
  html body.has-map-shell.report-loading-state #detailsPanel .report-content .loading-card.v34.ig-loading-v2 .step-tile {
    grid-template-columns: 32px minmax(0, 1fr) 16px !important;
    padding: 8px !important;
  }

  html body.has-map-shell.report-loading-state #detailsPanel .report-content .ig-loading-v2 .step-emoji {
    width: 32px !important;
    height: 32px !important;
  }

  html body.has-map-shell.report-loading-state #detailsPanel .report-content .loading-card.v34.ig-loading-v2 .step-label {
    font-size: 11px !important;
    overflow-wrap: normal !important;
    word-break: normal !important;
  }
}

@media (max-width: 360px) {
  html body.has-map-shell.report-loading-state #detailsPanel .report-content .loading-card.v34.ig-loading-v2 .step-tile {
    grid-template-columns: 26px minmax(0, 1fr) 14px !important;
    gap: 4px !important;
    padding: 6px !important;
  }

  html body.has-map-shell.report-loading-state #detailsPanel .report-content .ig-loading-v2 .step-emoji {
    width: 26px !important;
    height: 26px !important;
    font-size: 16px !important;
  }

  html body.has-map-shell.report-loading-state #detailsPanel .report-content .loading-card.v34.ig-loading-v2 .step-label {
    font-size: 10.5px !important;
    overflow-wrap: normal !important;
    word-break: normal !important;
  }
}

/* Final mobile /mapa contract: this route replaces the former map-first home.
   The explanatory sidebar is useful on desktop, but on a phone it pushed the
   actual map below the fold while the fixed header covered its first rows.
   Keep the canonical header and five-item navigation, then give every pixel
   between them to the interactive map. */
@media (max-width: 860px) {
  html:has(body.has-map-shell.ig-parcelmap:not(.ig-home-map)) {
    height: 100vh !important;
    height: 100dvh !important;
    min-height: 100vh !important;
    min-height: 100dvh !important;
    overflow: hidden !important;
  }
  html body.has-map-shell.ig-parcelmap:not(.ig-home-map) {
    display: flex !important;
    flex-direction: column !important;
    height: 100vh !important;
    height: 100dvh !important;
    min-height: 100vh !important;
    min-height: 100dvh !important;
    padding-bottom: var(--ig-mobile-nav-height) !important;
    overflow: hidden !important;
    box-sizing: border-box !important;
  }
  html body.has-map-shell.ig-parcelmap:not(.ig-home-map) .topbar.compact-topbar.ig-topbar--search {
    position: relative !important;
    inset: auto !important;
    flex: 0 0 auto !important;
    width: 100% !important;
    max-width: 100% !important;
    overflow: visible !important;
    box-sizing: border-box !important;
  }
  html body.has-map-shell.ig-parcelmap:not(.ig-home-map) .topbar.compact-topbar.ig-topbar--search .top-search.has-search-tabs {
    grid-template-columns: minmax(0, 106px) minmax(0, 1fr) 44px !important;
    align-items: stretch !important;
    height: 44px !important;
    min-height: 44px !important;
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
    box-sizing: border-box !important;
  }
  html body.has-map-shell.ig-parcelmap:not(.ig-home-map) .topbar.compact-topbar.ig-topbar--search
    .top-search.has-search-tabs > :is(.tabs, .search-wrap, .primary),
  html body.has-map-shell.ig-parcelmap:not(.ig-home-map) .topbar.compact-topbar.ig-topbar--search
    .top-search.has-search-tabs > .search-wrap > input {
    align-self: stretch !important;
    height: 44px !important;
    min-height: 44px !important;
    margin: 0 !important;
    box-sizing: border-box !important;
  }
  html body.has-map-shell.ig-parcelmap:not(.ig-home-map) .topbar.compact-topbar.ig-topbar--search .top-search :is(.tabs, .search-wrap, input) {
    min-width: 0 !important;
    max-width: 100% !important;
  }
  html body.has-map-shell.ig-parcelmap:not(.ig-home-map) .topbar.compact-topbar.ig-topbar--search .top-search .primary {
    display: grid !important;
    width: 44px !important;
    min-width: 44px !important;
    max-width: 44px !important;
    height: 44px !important;
    min-height: 44px !important;
    padding: 0 !important;
    overflow: hidden !important;
    box-sizing: border-box !important;
  }
  html body.has-map-shell.ig-parcelmap:not(.ig-home-map) :is(.ig-map-sidebar, .ig-map-proof, .site-footer) {
    display: none !important;
  }
  html body.has-map-shell.ig-parcelmap:not(.ig-home-map) main.app-shell.map-first.ig-map-workspace {
    position: relative !important;
    inset: auto !important;
    display: block !important;
    flex: 1 1 auto !important;
    width: 100% !important;
    height: auto !important;
    min-height: 0 !important;
    padding: 0 !important;
    overflow: hidden !important;
  }
  html body.has-map-shell.ig-parcelmap:not(.ig-home-map) main.app-shell.map-first.ig-map-workspace > .map-frame.full-map {
    position: absolute !important;
    inset: 0 !important;
    width: 100% !important;
    height: 100% !important;
    min-height: 0 !important;
    border: 0 !important;
    border-radius: 0 !important;
  }
  html body.has-map-shell.ig-parcelmap:not(.ig-home-map):is(.report-open, .report-loading-state, .report-terminal-state) {
    padding-bottom: 0 !important;
  }
}

/* `/mapa` is the dedicated full-screen workspace at every viewport. The
   explanatory landing copy belongs to `/`, not above the desktop map. */
@media (min-width: 861px) {
  html:has(body.has-map-shell.ig-parcelmap:not(.ig-home-map)) {
    height: 100vh !important;
    height: 100dvh !important;
    overflow: hidden !important;
  }
  html body.has-map-shell.ig-parcelmap:not(.ig-home-map) {
    display: flex !important;
    flex-direction: column !important;
    height: 100vh !important;
    height: 100dvh !important;
    overflow: hidden !important;
  }
  html body.has-map-shell.ig-parcelmap:not(.ig-home-map) .topbar.compact-topbar.ig-topbar--search {
    position: relative !important;
    inset: auto !important;
    flex: 0 0 auto !important;
    width: 100% !important;
    max-width: 100% !important;
    box-sizing: border-box !important;
  }
  html body.has-map-shell.ig-parcelmap:not(.ig-home-map) :is(.ig-map-sidebar, .ig-map-proof, .site-footer) {
    display: none !important;
  }
  html body.has-map-shell.ig-parcelmap:not(.ig-home-map) main.app-shell.map-first.ig-map-workspace {
    position: relative !important;
    inset: auto !important;
    flex: 1 1 auto !important;
    width: 100% !important;
    height: auto !important;
    min-height: 0 !important;
    padding: 0 !important;
    overflow: hidden !important;
  }
  html body.has-map-shell.ig-parcelmap:not(.ig-home-map) main.app-shell.map-first.ig-map-workspace > .map-frame.full-map {
    position: absolute !important;
    inset: 0 !important;
    width: 100% !important;
    height: 100% !important;
    min-height: 0 !important;
  }
}

/* Final desktop loading-state guard: this sheet loads after the legacy restore. */
@media (min-width: 861px) {
  html body.has-map-shell.report-loading-state #detailsPanel.parcel-drawer:has(.loading-card.v34.ig-loading-v2) {
    bottom: auto !important;
    height: auto !important;
    max-height: calc(100dvh - 140px) !important;
  }

  html body.has-map-shell.report-loading-state #detailsPanel.parcel-drawer:has(.loading-card.v34.ig-loading-v2) > #reportContent {
    display: block !important;
    flex: 0 0 auto !important;
    height: auto !important;
    min-height: 0 !important;
    overflow: visible !important;
  }
}

/* Final mobile loading-state guard: keep the report as a centered,
   content-sized sheet over the visible parcel map. This file loads after the
   legacy restore and therefore owns the final geometry at the phone/tablet breakpoint. */
@media (max-width: 860px) {
  html body.has-map-shell.report-loading-state #map {
    visibility: visible !important;
    pointer-events: none !important;
  }
  html body.has-map-shell.report-loading-state :is(.leaflet-control-container, .map-controls) {
    visibility: hidden !important;
  }
  html body.has-map-shell.report-loading-state #detailsPanel.parcel-drawer:has(.loading-card.v34.ig-loading-v2),
  html body.has-map-shell.report-loading-state #detailsPanel.parcel-drawer.is-open:has(.loading-card.v34.ig-loading-v2) {
    position: fixed !important;
    top: 50% !important;
    right: auto !important;
    bottom: auto !important;
    left: 50% !important;
    width: min(620px, calc(100vw - 24px)) !important;
    max-width: none !important;
    height: auto !important;
    min-height: 0 !important;
    max-height: calc(100dvh - 24px - env(safe-area-inset-top, 0px) - env(safe-area-inset-bottom, 0px)) !important;
    overflow: hidden !important;
    border: 1px solid var(--atlas-line) !important;
    border-radius: 16px !important;
    background: #fff !important;
    box-shadow: 0 4px 8px rgba(8, 28, 18, .22) !important;
    box-sizing: border-box !important;
    transform: translate(-50%, -50%) !important;
  }
  html body.has-map-shell.report-loading-state #detailsPanel.parcel-drawer:has(.loading-card.v34.ig-loading-v2) > .drawer-titlebar {
    min-height: 52px !important;
    padding: 8px 10px !important;
    border-radius: 15px 15px 0 0 !important;
  }
  html body.has-map-shell.report-loading-state #detailsPanel.parcel-drawer:has(.loading-card.v34.ig-loading-v2) > #reportContent {
    display: block !important;
    flex: 0 0 auto !important;
    width: 100% !important;
    height: auto !important;
    min-height: 0 !important;
    max-height: calc(100dvh - 100px - env(safe-area-inset-bottom, 0px)) !important;
    padding: 10px 12px 4px !important;
    overflow-x: hidden !important;
    overflow-y: auto !important;
    overscroll-behavior: contain;
    background: #fff !important;
  }

  /* loader-cookie-clearance-final-20260825: original-ui-restore-2026.css
     lifts every open report above the consent banner. Loading already has a
     centered, content-sized contract, so keeping top:50% together with that
     bottom inset constrains the drawer and clips the final tile rows. */
  html body.has-map-shell.report-loading-state.report-open:has(#cookieBanner.active)
    #detailsPanel.parcel-drawer:has(.loading-card.v34.ig-loading-v2) {
    top: auto !important;
    bottom: calc(var(--ig-report-cookie-bottom, 0px) + 12px) !important;
    max-height: calc(100dvh - var(--ig-report-cookie-bottom, 0px) - 24px - env(safe-area-inset-top, 0px)) !important;
    transform: translateX(-50%) !important;
  }
}

/* Home scroll hint: keep the established position, but make the short mobile
   action visually match the light map controls. Tablet and desktop retain the
   existing long/short labels and styling. */
html body.has-map-shell .map-frame #igScrollHint .lbl-mobile { display: none !important; }

@media (max-width: 767px) {
  html body.ig-home-map .map-frame #igScrollHint {
    box-sizing: border-box !important;
    width: max-content !important;
    max-width: calc(100% - 152px) !important;
    min-height: 44px !important;
    padding: 8px 14px !important;
    gap: 3px !important;
    background: rgba(255, 255, 255, .94) !important;
    color: #143d27 !important;
    border: 1px solid rgba(91, 125, 104, .38) !important;
    box-shadow: 0 2px 8px rgba(5, 40, 22, .12) !important;
    -webkit-backdrop-filter: blur(6px) !important;
    backdrop-filter: blur(6px) !important;
    font: 750 12.5px/1.2 system-ui, -apple-system, "Segoe UI", sans-serif !important;
  }
  html body.ig-home-map .map-frame #igScrollHint .lbl-full,
  html body.ig-home-map .map-frame #igScrollHint .lbl-short {
    display: none !important;
  }
  html body.ig-home-map .map-frame #igScrollHint .lbl-mobile {
    display: inline !important;
  }
  html body.ig-home-map:has(#cookieBanner.active) .map-frame #igScrollHint {
    transform: translate(-50%, -68px) !important;
  }
  html body.ig-home-map .map-frame #igScrollHint:focus-visible {
    outline: 3px solid #8ad6a7 !important;
    outline-offset: 2px !important;
  }
}

/* Compact, explicit consent banner. Keep the global navigation visible and
   actionable while the banner is open; map controls already use the measured
   banner height as their clearance. */
@media (max-width: 767px) {
  html #cookieBanner.cc-banner.cc-v607 {
    left: 8px !important;
    right: 8px !important;
    bottom: calc(var(--ig-mobile-nav-height) + 8px) !important;
    display: grid !important;
    grid-template-columns: minmax(0, 1fr) !important;
    gap: 6px !important;
    padding: 8px !important;
    border: 1px solid rgba(167, 255, 69, .22) !important;
    border-radius: 13px !important;
    font-size: 11.5px !important;
    line-height: 1.28 !important;
  }
  html #cookieBanner.cc-v607 .cc-emoji { display: none !important; }
  html #cookieBanner.cc-v607 .cc-text {
    min-width: 0 !important;
    text-wrap: pretty;
  }
  html #cookieBanner.cc-v607 .cc-actions {
    display: grid !important;
    grid-template-columns: .9fr 1.15fr 1.15fr !important;
    width: 100% !important;
    gap: 4px !important;
  }
  html #cookieBanner.cc-v607 .cc-actions button {
    width: 100% !important;
    min-width: 0 !important;
    min-height: 44px !important;
    padding: 5px 6px !important;
    font-size: 11px !important;
    line-height: 1.12 !important;
    white-space: normal !important;
  }
}

/* report-full-width-category-list-20260813: this final sheet loads after the
   legacy restore, so the finished report stays a single ordered list at every
   viewport and each disclosure expands across the complete drawer width. */
html body.has-map-shell.report-terminal-state #detailsPanel.parcel-drawer .ig-report-primary,
html body.has-map-shell.report-terminal-state #detailsPanel.parcel-drawer .ig-report-group {
  display: block !important;
  width: 100% !important;
  min-width: 0 !important;
  max-width: 100% !important;
}

html body.has-map-shell.report-terminal-state #detailsPanel.parcel-drawer .ig-report-primary > h3,
html body.has-map-shell.report-terminal-state #detailsPanel.parcel-drawer .ig-report-group > h3 {
  display: block !important;
  width: 100% !important;
  min-width: 0 !important;
  margin: 0 0 10px !important;
}

html body.has-map-shell.report-terminal-state #detailsPanel.parcel-drawer .ig-report-primary__items,
html body.has-map-shell.report-terminal-state #detailsPanel.parcel-drawer .ig-report-group__items {
  display: grid !important;
  grid-template-columns: minmax(0, 1fr) !important;
  gap: 8px !important;
  width: 100% !important;
  min-width: 0 !important;
  max-width: 100% !important;
}

html body.has-map-shell.report-terminal-state #detailsPanel.parcel-drawer
  :is(.ig-report-primary__items, .ig-report-group__items) > .ig-metric {
  grid-column: 1 / -1 !important;
  width: 100% !important;
  min-width: 0 !important;
  max-width: 100% !important;
  min-height: 0 !important;
  margin: 0 !important;
  overflow: hidden !important;
  box-sizing: border-box !important;
  text-align: left !important;
}

html body.has-map-shell.report-terminal-state #detailsPanel.parcel-drawer
  :is(.ig-report-primary__items, .ig-report-group__items) > details.ig-metric {
  display: block !important;
  padding: 0 !important;
}

html body.has-map-shell.report-terminal-state #detailsPanel.parcel-drawer
  :is(.ig-report-primary__items, .ig-report-group__items) > div.ig-metric,
html body.has-map-shell.report-terminal-state #detailsPanel.parcel-drawer
  :is(.ig-report-primary__items, .ig-report-group__items) > details.ig-metric > .ig-metric__summary {
  position: relative !important;
  display: grid !important;
  grid-template-columns: 40px minmax(0, 1fr) 24px !important;
  align-items: center !important;
  justify-items: stretch !important;
  gap: 12px !important;
  width: 100% !important;
  min-width: 0 !important;
  min-height: 72px !important;
  padding: 12px 14px !important;
  box-sizing: border-box !important;
  text-align: left !important;
}

html body.has-map-shell.report-terminal-state #detailsPanel.parcel-drawer
  :is(.ig-report-primary__items, .ig-report-group__items) > div.ig-metric {
  grid-template-columns: 40px minmax(0, 1fr) !important;
}

html body.has-map-shell.report-terminal-state #detailsPanel.parcel-drawer
  :is(.ig-report-primary__items, .ig-report-group__items) > .ig-metric .ig-metric__icon {
  position: static !important;
  align-self: center !important;
  width: 40px !important;
  height: 40px !important;
  min-width: 40px !important;
  margin: 0 !important;
}

html body.has-map-shell.report-terminal-state #detailsPanel.parcel-drawer
  :is(.ig-report-primary__items, .ig-report-group__items) > .ig-metric .ig-metric__body {
  display: grid !important;
  grid-template-columns: minmax(0, 1fr) !important;
  justify-items: stretch !important;
  gap: 3px !important;
  width: auto !important;
  min-width: 0 !important;
  max-width: 100% !important;
  text-align: left !important;
}

html body.has-map-shell.report-terminal-state #detailsPanel.parcel-drawer
  :is(.ig-report-primary__items, .ig-report-group__items) > .ig-metric .ig-metric__caret {
  position: static !important;
  align-self: center !important;
  justify-self: end !important;
  margin: 0 !important;
}

html body.has-map-shell.report-terminal-state #detailsPanel.parcel-drawer
  :is(.ig-report-primary__items, .ig-report-group__items) > .ig-metric .ig-metric__details {
  width: 100% !important;
  min-width: 0 !important;
  max-width: 100% !important;
  box-sizing: border-box !important;
  text-align: left !important;
}

/* Cookie consent is an overlay, not a layout state. Keep the layer tiles in
   exactly the same thumb-zone position on both the home and price maps; the
   higher-z-index banner may cover them until the visitor makes a choice. */
@media (max-width: 860px) {
  html body.has-map-shell:is(.ig-home-map, .ig-pricemap):has(#cookieBanner.active)
    .map-frame .map-toggle-wrap {
    transform: none !important;
  }

  /* The consent panel already ends above the fixed five-icon navigation. On
     the parcel map the normal 141px control offset leaves a real gap above
     that panel at 320px and 390px, so adding the full measured banner height
     makes locate/+/- jump unnecessarily toward the header. */
  html body.has-map-shell.ig-parcelmap:not(.report-open):has(#cookieBanner.active)
    .map-frame .zoom-controls {
    transform: none !important;
  }
  html body.has-map-shell.ig-parcelmap:not(.report-open):has(#cookieBanner.active)
    .map-frame .report-bug-btn {
    /* 56px control + 12px gap to the left; align its lower edge with "−". */
    transform: translate(-68px, -53px) !important;
  }
}

/* Final mobile visual guardrails.  This sheet is loaded after the legacy
   layers, so the permanent five-icon navigation remains reachable without
   allowing report actions to slide under it. */
html:has(body.ig-home-landing),
html body.ig-home-landing {
  max-width: 100%;
  overflow-x: clip;
}

@media (max-width: 767px) {
  html body.ig-home-landing .topbar.ig-topbar .brand {
    flex: 0 1 calc(100% - 184px) !important;
    width: auto !important;
    max-width: calc(100% - 184px) !important;
    min-width: 0 !important;
    overflow: hidden !important;
  }
  html body.ig-home-landing .topbar.ig-topbar .brand-text {
    min-width: 0 !important;
  }
  html body.ig-home-landing .topbar.ig-topbar .brand-text strong {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  html body.ig-home-landing .topbar.ig-topbar .ig-header-cta {
    min-height: 44px !important;
  }

  html body.has-map-shell #detailsPanel.parcel-drawer #reportShare:not([hidden]) {
    bottom: var(--ig-mobile-nav-height) !important;
  }
  /* The drawer already ends above the persistent navigation. Reserving the
     navigation height again inside the scroller created a large empty tail
     after the final support tile. Keep only the normal end-of-report rhythm. */
  html body.has-map-shell #detailsPanel.parcel-drawer:has(#reportShare:not([hidden])) .report-content {
    padding-bottom: 16px !important;
  }
}

/* At 320px the full "change parcel" label collides with four adjacent report
   controls.  Preserve the labelled button for assistive tech, but show its
   already-familiar back glyph as one clean 44px control instead of a clipped
   word. */
@media (max-width: 340px) {
  html body.has-map-shell #detailsPanel.parcel-drawer .drawer-change-parcel {
    width: 44px !important;
    min-width: 44px !important;
    padding-inline: 0 !important;
  }
  html body.has-map-shell #detailsPanel.parcel-drawer .drawer-change-parcel .drawer-change-label {
    display: none !important;
  }
}

/* report-share-hidden-final-20260825: legacy bundles set .report-share to an
   !important grid. Honour the native hidden contract so its 24px safe-area
   margin cannot survive as an empty strip under the loading card. */
html body.has-map-shell #detailsPanel.parcel-drawer > #reportShare.report-share[hidden] {
  display: none !important;
  height: 0 !important;
  min-height: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
}

/* report-loading-compact-flow-p0-20260828: this file is the final cascade
   layer. Keep the SSR loader inside the stable #reportContent shell, but let
   the loading view use its own content-sized geometry instead of stretching
   it to the finished 28-card report viewport. */
#reportContent.report-content {
  position: relative;
}

#reportContent.report-content > .loading-card.v34.ig-loading-v2 {
  position: static;
  inset: auto;
  z-index: auto;
  box-sizing: border-box;
  margin: 0;
  width: 100%;
  max-height: none;
  overflow: visible;
  background: transparent;
}

@media (max-width: 860px) {
  html body.has-map-shell.report-loading-state #detailsPanel.parcel-drawer:has(.loading-card.v34.ig-loading-v2),
  html body.has-map-shell.report-loading-state #detailsPanel.parcel-drawer.is-open:has(.loading-card.v34.ig-loading-v2) {
    position: fixed !important;
    top: 50% !important;
    right: auto !important;
    bottom: auto !important;
    left: 50% !important;
    width: min(620px, calc(100vw - 24px)) !important;
    max-width: none !important;
    height: auto !important;
    min-height: 0 !important;
    max-height: calc(100dvh - 24px - env(safe-area-inset-top, 0px) - env(safe-area-inset-bottom, 0px)) !important;
    margin: 0 !important;
    overflow: hidden !important;
    border: 1px solid var(--atlas-line) !important;
    border-radius: 16px !important;
    background: #fff !important;
    box-shadow: 0 4px 8px rgba(8, 28, 18, .22) !important;
    box-sizing: border-box !important;
    transform: translate(-50%, -50%) !important;
  }

  html body.has-map-shell.report-loading-state.report-open:has(#cookieBanner.active)
    #detailsPanel.parcel-drawer:has(.loading-card.v34.ig-loading-v2) {
    top: auto !important;
    bottom: calc(var(--ig-report-cookie-bottom, 0px) + 12px) !important;
    max-height: calc(100dvh - var(--ig-report-cookie-bottom, 0px) - 24px - env(safe-area-inset-top, 0px)) !important;
    transform: translateX(-50%) !important;
  }

  html body.has-map-shell.report-loading-state #detailsPanel.parcel-drawer:has(.loading-card.v34.ig-loading-v2) > #reportContent {
    display: block !important;
    flex: 0 0 auto !important;
    width: 100% !important;
    height: auto !important;
    min-height: 0 !important;
    max-height: calc(100dvh - 100px - env(safe-area-inset-bottom, 0px)) !important;
    padding: 10px 12px 4px !important;
    overflow-x: hidden !important;
    overflow-y: auto !important;
    overscroll-behavior: contain;
    background: #fff !important;
  }

  html body.has-map-shell.report-loading-state .ig-loading-contracts {
    display: grid;
    gap: 5px;
    margin-top: 10px;
    padding-top: 10px;
    border-top: 1px solid #dce8df;
    color: #52675a;
    font-size: 10.5px;
    line-height: 1.35;
  }
}

@media (min-width: 861px) {
  html body.has-map-shell.report-loading-state #detailsPanel.parcel-drawer:has(.loading-card.v34.ig-loading-v2) {
    bottom: auto !important;
    height: auto !important;
    max-height: calc(100dvh - 140px) !important;
  }

  html body.has-map-shell.report-loading-state #detailsPanel.parcel-drawer:has(.loading-card.v34.ig-loading-v2) > #reportContent {
    display: block !important;
    flex: 0 0 auto !important;
    height: auto !important;
    min-height: 0 !important;
    padding: 12px 14px !important;
    overflow: visible !important;
  }

  html body.has-map-shell.report-loading-state .ig-loading-contracts {
    display: grid;
    gap: 5px;
    margin-top: 10px;
    color: #52675a;
    font-size: 11px;
    line-height: 1.4;
  }
}

@media (prefers-reduced-motion: reduce) {
  html body.has-map-shell.report-loading-state #detailsPanel.parcel-drawer:has(.loading-card.v34.ig-loading-v2) {
    transition: none !important;
  }

  html body.has-map-shell.report-loading-state #detailsPanel .report-content .loading-card.v34.ig-loading-v2 .loading-bar > i,
  html body.has-map-shell.report-loading-state #detailsPanel .report-content .loading-card.v34.ig-loading-v2 .step-tile,
  html body.has-map-shell.report-loading-state #detailsPanel .report-content .loading-card.v34.ig-loading-v2 .step-mark,
  html body.has-map-shell.report-loading-state #detailsPanel .report-content .loading-card.v34.ig-loading-v2 .step-tile::after,
  html body.has-map-shell.report-loading-state #detailsPanel .report-content .loading-card.v34.ig-loading-v2 .step-mark::after {
    animation: none !important;
    transition: none !important;
  }
}

/* report-toolbar-loading-geometry-final-20260828: the compact loader rules
   above intentionally own panel geometry. Reassert the shared titlebar rhythm
   after them so the controls do not jump when the finished report arrives. */
@media (max-width: 860px) {
  html body.has-map-shell.report-loading-state
    #detailsPanel.parcel-drawer:has(.loading-card.v34.ig-loading-v2)
    > .drawer-titlebar {
    min-height: 64px !important;
    padding: 8px !important;
    gap: 6px !important;
  }
}

/* p0-terminal-panel-position-20260829: the content-sized loading sheet is
   centred with translate(-50%, -50%). Once the report becomes terminal the
   drawer returns to fixed side insets, so it must also drop that transform.
   Without this explicit final reset the whole 290/360px drawer is shifted by
   half its width to the left on 320/390px screens. */
@media (max-width: 860px) {
  html body.has-map-shell.report-terminal-state
    #detailsPanel.parcel-drawer.is-open {
    right: 0 !important;
    left: 0 !important;
    width: auto !important;
    max-width: none !important;
    margin: 0 !important;
    transform: none !important;
    transition: none !important;
  }
}

/* Keep the report's own actions in the drawer flow, below its scroll area. */
.ig-flood-map { margin: 16px 0; }
.ig-flood-map .ig-mini-map { height: 300px !important; border-radius: 12px; }
.ig-flood-map figcaption { margin-top: 8px; font-size: 13px; line-height: 1.5; color: #315443; }
.ig-flood-map > p { font-size: 13px; line-height: 1.5; }
html body.has-map-shell.report-open #detailsPanel.parcel-drawer > #reportShare.report-share.ig-share-revealed:not([hidden]) {
  position: static !important;
  flex: 0 0 auto !important;
  width: 100% !important;
  box-sizing: border-box !important;
  margin: 0 !important;
  padding: 8px 12px calc(8px + env(safe-area-inset-bottom, 0px)) !important;
}
@media (max-width: 860px) {
  html body.has-map-shell.report-open {
    --ig-mobile-nav-height: 0px;
    padding-bottom: 0 !important;
  }
  html body.has-map-shell.report-open #igMobileNav {
    display: none !important;
  }
  html body.has-map-shell.report-open.report-terminal-state #detailsPanel.parcel-drawer.is-open {
    bottom: 0 !important;
    max-height: 100dvh !important;
  }
  html body.has-map-shell.report-open #detailsPanel.parcel-drawer > #reportContent {
    min-height: 0 !important;
    padding-bottom: 20px !important;
  }
  html body.has-map-shell.report-open #reportContent .ig-donate-tile {
    display: grid !important;
    grid-template-columns: 42px minmax(0, 1fr) !important;
    gap: 10px 12px !important;
    padding: 16px !important;
    align-items: start !important;
  }
  html body.has-map-shell.report-open #reportContent .ig-donate-tile .ico {
    grid-column: 1;
    grid-row: 1 / span 2;
  }
  html body.has-map-shell.report-open #reportContent .ig-donate-tile .txt {
    grid-column: 2;
    min-width: 0;
    font-size: 14px;
    line-height: 1.5;
  }
  html body.has-map-shell.report-open #reportContent .ig-donate-tile .cta {
    grid-column: 2;
    justify-self: start;
    min-height: 44px;
    display: flex;
    align-items: center;
  }
}

/* P3 (audyt 2026-09-10): /mapa nie ma widocznego H1 — panel .ig-map-sidebar jest
   display:none na kazdej szerokosci (360-1920). Ten naglowek zostaje w drzewie
   dostepnosci, zachowujac dokument z jednym H1, bez zmian wizualnych.
   Uwaga: .ig-visually-hidden nie jest ladowany na /mapa, stad lokalna regula. */
.ig-map-sr-title {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  padding: 0 !important;
  margin: -1px !important;
  overflow: hidden !important;
  clip: rect(0 0 0 0) !important;
  white-space: nowrap !important;
  border: 0 !important;
}
