/* ==========================================================================
   GeoFix World — visual shell (T002)
   Proprietary CSS on top of Bootstrap 5 (layout/collapse only). Prefix: gfw-
   ========================================================================== */

:root {
    --gfw-navy: #0f3d5e;
    --gfw-navy-deep: #0a2a42;
    --gfw-teal: #17b3a3;
    --gfw-teal-ink: #0f7d72; /* teal for text on light surfaces (AA) */
    --gfw-blue: #1a73e8;
    --gfw-blue-strong: #1558c0;
    --gfw-amber: #f5a623;
    --gfw-green: #1b7a43;
    --gfw-orange: #b45309;
    --gfw-ink: #16212b;
    --gfw-ink-soft: #4d5b68;
    --gfw-ink-muted: #5f6d7a;
    --gfw-line: #dfe5ec;
    --gfw-surface: #ffffff;
    --gfw-surface-2: #f3f6f9;
    --gfw-surface-dark: #14202b;
    --gfw-surface-dark-2: #1c2b39;
    --gfw-on-dark: #e8eef4;
    --gfw-on-dark-muted: #9fb0bf;

    --gfw-radius-s: 8px;
    --gfw-radius-m: 12px;
    --gfw-radius-l: 18px;
    --gfw-radius-pill: 999px;

    --gfw-space-1: 4px;
    --gfw-space-2: 8px;
    --gfw-space-3: 12px;
    --gfw-space-4: 16px;
    --gfw-space-5: 24px;
    --gfw-space-6: 32px;
    --gfw-space-7: 48px;

    --gfw-shadow-s: 0 1px 2px rgba(16, 33, 43, .08);
    --gfw-shadow-m: 0 6px 18px rgba(16, 33, 43, .12);
    --gfw-shadow-l: 0 18px 40px rgba(16, 33, 43, .18);

    --gfw-focus: 0 0 0 3px rgba(26, 115, 232, .45);
    --gfw-font: "Segoe UI", system-ui, -apple-system, Roboto, "Helvetica Neue", Arial, sans-serif;
}

/* --- Base ---------------------------------------------------------------- */

html { scroll-behavior: smooth; }
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } }

.gfw-body {
    margin: 0;
    font-family: var(--gfw-font);
    color: var(--gfw-ink);
    background: var(--gfw-surface-2);
    -webkit-font-smoothing: antialiased;
    overflow-x: hidden;
}

.gfw-main { display: block; }

.gfw-sprite { position: absolute; width: 0; height: 0; overflow: hidden; }

.gfw-icon {
    width: 1.1em;
    height: 1.1em;
    flex: 0 0 auto;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.8;
    stroke-linecap: round;
    stroke-linejoin: round;
    vertical-align: -0.2em;
}

:where(a, button, input, [tabindex]):focus-visible {
    outline: none;
    box-shadow: var(--gfw-focus);
}

.gfw-skip-link {
    position: absolute;
    left: var(--gfw-space-3);
    top: -100px;
    z-index: 1100;
    padding: var(--gfw-space-2) var(--gfw-space-3);
    background: var(--gfw-navy);
    color: #fff;
    border-radius: var(--gfw-radius-s);
}
.gfw-skip-link:focus { top: var(--gfw-space-3); color: #fff; }

.gfw-page { padding-block: var(--gfw-space-6) var(--gfw-space-7); }
.gfw-page--narrow { max-width: 760px; }

/* Application containers (T048). Editorial pages keep Bootstrap's centred container-xl (+ --narrow for forms);
   operative surfaces use the wide container (catalogues, dashboards, moderation, administration, public map pages)
   and the Route Builder uses the full-width workspace: no max-width, controlled gutters, viewport-based height. */
:root {
    --gfw-gutter: clamp(12px, 2vw, 32px);
    --gfw-wide-max: 1680px;
    --gfw-workspace-chrome: 11.5rem; /* sticky header + breadcrumb + compact toolbar + page paddings */
    --gfw-workspace-h: clamp(520px, calc(100dvh - var(--gfw-workspace-chrome)), 1600px);
    --gfw-map-h: clamp(360px, 60dvh, 640px); /* map canvas height below the desktop breakpoint */
}
.gfw-container--wide, .gfw-page--wide { width: 100%; max-width: var(--gfw-wide-max); margin-inline: auto; padding-inline: var(--gfw-gutter); }
.gfw-page--workspace { width: 100%; max-width: none; margin-inline: 0; padding: var(--gfw-space-3) var(--gfw-gutter) var(--gfw-space-5); }
.gfw-page--workspace .gfw-breadcrumb { margin-bottom: var(--gfw-space-2); }
.gfw-page--workspace .gfw-flash { margin-bottom: var(--gfw-space-2); }
.gfw-text-muted { color: var(--gfw-ink-muted); }

/* Placeholders: visually present, explicitly not interactive. */
.is-placeholder { cursor: default; }

/* --- Header -------------------------------------------------------------- */

.gfw-header {
    position: sticky;
    top: 0;
    z-index: 1020;
    background: rgba(10, 42, 66, .92);
    backdrop-filter: blur(10px);
    color: var(--gfw-on-dark);
}

.gfw-navbar { padding-block: var(--gfw-space-2); }
/* T048: the header inner container is the wide application container, so it takes over Bootstrap's .navbar > .container* flex layout. */
.gfw-navbar > .gfw-container--wide { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; }

.gfw-brand {
    display: inline-flex;
    align-items: center;
    gap: var(--gfw-space-2);
    color: #fff;
    text-decoration: none;
    font-size: 1.25rem;
    line-height: 1;
}
.gfw-brand:hover, .gfw-brand:focus { color: #fff; }
.gfw-brand__logo { border-radius: 22%; display: block; }
.gfw-brand__world { color: var(--gfw-teal); font-weight: 600; }

.gfw-navbar__toggler {
    border: 1px solid rgba(255, 255, 255, .35);
    color: #fff;
    padding: var(--gfw-space-2) var(--gfw-space-3);
    border-radius: var(--gfw-radius-s);
}
.gfw-navbar__toggler .gfw-icon { width: 1.4em; height: 1.4em; }

.gfw-nav { gap: var(--gfw-space-1); }
.gfw-nav__link {
    color: var(--gfw-on-dark) !important;
    padding: var(--gfw-space-2) var(--gfw-space-3) !important;
    border-radius: var(--gfw-radius-s);
    font-weight: 500;
    display: inline-flex;
    align-items: center;
    gap: var(--gfw-space-2);
}
.gfw-nav__link:hover { background: rgba(255, 255, 255, .08); }
.gfw-nav__link.is-active { box-shadow: inset 0 -3px 0 var(--gfw-teal); }
.gfw-nav__link.is-placeholder { color: var(--gfw-on-dark-muted) !important; }

.gfw-header__actions {
    display: flex;
    align-items: center;
    gap: var(--gfw-space-2);
    margin-inline-start: auto;
}

.gfw-icon-button {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    border-radius: var(--gfw-radius-pill);
    color: inherit;
    background: transparent;
    border: 0;
    text-decoration: none;
}
.gfw-icon-button:hover { background: rgba(127, 140, 160, .15); color: inherit; }
.gfw-icon-button .gfw-icon { width: 1.35em; height: 1.35em; }

.gfw-account {
    text-decoration: none;
    padding: var(--gfw-space-2) var(--gfw-space-2);
    border-radius: var(--gfw-radius-pill);
    display: inline-flex;
    align-items: center;
    gap: var(--gfw-space-2);
    color: var(--gfw-on-dark);
    font-size: .9rem;
    max-width: 16rem;
}
.gfw-account__label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.gfw-account:hover, .gfw-account:focus-visible, .gfw-account.is-active { color: #fff; background: rgba(255, 255, 255, .12); }
.gfw-account-overview dd { margin: 0 0 var(--gfw-space-2); }
.gfw-button--on-dark { color: var(--gfw-on-dark); border-color: rgba(255, 255, 255, .55); }
.gfw-button--on-dark:hover, .gfw-button--on-dark:focus-visible { color: var(--gfw-on-dark); border-color: #fff; }

.gfw-account-placeholder {
    display: inline-flex;
    align-items: center;
    gap: var(--gfw-space-2);
    padding: var(--gfw-space-2) var(--gfw-space-3);
    border: 1px dashed rgba(255, 255, 255, .45);
    border-radius: var(--gfw-radius-pill);
    color: var(--gfw-on-dark-muted);
    font-size: .9rem;
}

@media (max-width: 991.98px) {
    .gfw-navbar__collapse { padding-block: var(--gfw-space-3); }
    .gfw-nav { flex-direction: column; }
    .gfw-header__actions { margin-top: var(--gfw-space-3); margin-inline-start: 0; }
}

/* --- Badges, states, buttons -------------------------------------------- */

.gfw-badge {
    display: inline-flex;
    align-items: center;
    gap: var(--gfw-space-1);
    padding: 3px 10px;
    border-radius: var(--gfw-radius-pill);
    font-size: .78rem;
    font-weight: 600;
    line-height: 1.4;
    white-space: nowrap;
}
.gfw-badge--soon { background: rgba(255, 255, 255, .14); color: var(--gfw-on-dark); font-weight: 500; }
.gfw-badge--variant { background: #eef2f6; color: #3b4a5a; border: 1px solid #d5dde6; font-weight: 600; }
.gfw-badge--category { background: rgba(10, 42, 66, .85); color: #fff; }
.gfw-badge--demo { background: #fff3d6; color: #7a4a00; border: 1px solid #f2d59b; font-weight: 500; }

.gfw-state { font-weight: 600; }
.gfw-state.is-draft { color: var(--gfw-ink-soft); }
.gfw-state.is-review { color: var(--gfw-orange); }
.gfw-state.is-published { color: var(--gfw-green); }

.gfw-kind {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    padding: 1px 8px;
    border-radius: var(--gfw-radius-pill);
    font-size: .72rem;
    font-weight: 600;
    border: 1px solid transparent;
}
.gfw-kind.is-planned { color: var(--gfw-blue-strong); background: #e8f0fe; border-color: #c6dafc; }
.gfw-kind.is-recorded { color: #0c6b60; background: #dff6f2; border-color: #b6e7df; }

.gfw-button {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--gfw-space-2);
    padding: 10px 18px;
    border-radius: var(--gfw-radius-m);
    font-weight: 600;
    text-decoration: none;
    border: 1px solid transparent;
    line-height: 1.2;
}
.gfw-button--primary { background: var(--gfw-blue); color: #fff; }
.gfw-button--primary:hover { background: var(--gfw-blue-strong); color: #fff; }
.gfw-button--primary.is-placeholder { opacity: .85; }
.gfw-button--block { width: 100%; }
.gfw-button--small { padding: 6px 12px; font-size: .85rem; border-radius: var(--gfw-radius-s); }

/* --- Hero ---------------------------------------------------------------- */

.gfw-hero {
    position: relative;
    isolation: isolate;
    color: #fff;
    background: var(--gfw-navy-deep);
    padding-block: clamp(40px, 8vw, 96px) clamp(32px, 6vw, 64px);
}
.gfw-hero__image {
    position: absolute;
    inset: 0;
    z-index: -2;
    width: 100%;
    height: 100%;
    object-fit: cover;
    /* The photo has the hiker on the left third; mirrored so the headline (left) does not cover
       him and the composition matches the reference (text left, subject right). Asset untouched. */
    transform: scaleX(-1);
    object-position: 32% center;
}
.gfw-hero::after {
    content: "";
    position: absolute;
    inset: 0;
    z-index: -1;
    background: linear-gradient(90deg, rgba(8, 28, 46, .82) 0%, rgba(8, 28, 46, .55) 55%, rgba(8, 28, 46, .25) 100%);
}
.gfw-hero__inner { max-width: 1320px; }
.gfw-hero__title {
    font-size: clamp(2.2rem, 5.5vw, 3.6rem);
    font-weight: 800;
    letter-spacing: -.02em;
    margin: 0 0 var(--gfw-space-3);
}
.gfw-hero__lead {
    max-width: 560px;
    font-size: clamp(1rem, 1.6vw, 1.2rem);
    color: rgba(255, 255, 255, .9);
    margin: 0 0 var(--gfw-space-5);
}

.gfw-search {
    position: relative;
    display: flex;
    align-items: center;
    max-width: 560px;
    background: #fff;
    border-radius: var(--gfw-radius-pill);
    box-shadow: var(--gfw-shadow-m);
    padding: 6px 6px 6px 18px;
    color: var(--gfw-ink);
    margin-bottom: var(--gfw-space-5);
}
.gfw-search:focus-within { box-shadow: var(--gfw-shadow-m), var(--gfw-focus); }
.gfw-search__icon { color: var(--gfw-ink-muted); width: 1.3em; height: 1.3em; }
.gfw-search__input {
    flex: 1 1 auto;
    min-width: 0;
    border: 0;
    background: transparent;
    padding: 10px 12px;
    font-size: 1.05rem;
}
.gfw-search__input:focus { outline: none; box-shadow: none; }
.gfw-search__input::placeholder { color: var(--gfw-ink-muted); }
.gfw-search__button {
    width: 44px;
    height: 44px;
    border: 0;
    border-radius: var(--gfw-radius-pill);
    background: var(--gfw-blue);
    color: #fff;
    display: inline-flex;
    align-items: center;
    justify-content: center;
}
.gfw-search__button:hover { background: var(--gfw-blue-strong); }
.gfw-search__button .gfw-icon { width: 1.3em; height: 1.3em; }

/* Activity filters: radio inputs drive the selected chip without JavaScript. */
.gfw-filters { position: relative; margin: 0; padding: 0; border: 0; min-width: 0; min-inline-size: 0; }
.gfw-filters__scroller {
    display: flex;
    gap: var(--gfw-space-2);
    overflow-x: auto;
    scrollbar-width: none;
    padding-block: 2px;
    margin-inline: calc(-1 * var(--bs-gutter-x, 1.5rem) / 2);
    padding-inline: calc(var(--bs-gutter-x, 1.5rem) / 2);
}
.gfw-filters__scroller::-webkit-scrollbar { display: none; }
.gfw-filters__input {
    position: absolute;
    left: 0;
    top: 0;
    clip: rect(0 0 0 0);
    width: 1px;
    height: 1px;
    opacity: 0;
    pointer-events: none;
}
.gfw-chip {
    display: inline-flex;
    align-items: center;
    gap: var(--gfw-space-2);
    padding: 9px 16px;
    border-radius: var(--gfw-radius-m);
    background: rgba(255, 255, 255, .92);
    color: var(--gfw-ink);
    font-weight: 600;
    font-size: .95rem;
    white-space: nowrap;
    cursor: pointer;
    border: 2px solid transparent;
    box-shadow: var(--gfw-shadow-s);
}
.gfw-chip:hover { background: #fff; }
.gfw-filters__input:checked + .gfw-chip { background: #fff; color: var(--gfw-blue-strong); border-color: var(--gfw-blue); }
.gfw-filters__input:focus-visible + .gfw-chip { box-shadow: var(--gfw-focus); }

/* --- Explore area: featured + personal preview -------------------------- */

.gfw-explore {
    display: grid;
    gap: var(--gfw-space-6);
    margin-bottom: var(--gfw-space-7);
}
@media (min-width: 1200px) {
    .gfw-explore { grid-template-columns: minmax(0, 1fr) 320px; align-items: start; }
}

.gfw-section__head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--gfw-space-3);
    margin-bottom: var(--gfw-space-4);
}
.gfw-section__title { font-size: 1.5rem; font-weight: 700; margin: 0; letter-spacing: -.01em; }
.gfw-section__link {
    display: inline-flex;
    align-items: center;
    gap: var(--gfw-space-1);
    color: var(--gfw-blue);
    font-weight: 600;
    text-decoration: none;
    white-space: nowrap;
}
.gfw-section__link.is-placeholder { color: var(--gfw-ink-muted); }

.gfw-card-grid {
    list-style: none;
    margin: 0;
    padding: 0;
    display: grid;
    gap: var(--gfw-space-4);
    grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
}

.gfw-card {
    background: var(--gfw-surface);
    border-radius: var(--gfw-radius-l);
    overflow: hidden;
    box-shadow: var(--gfw-shadow-s);
    height: 100%;
    display: flex;
    flex-direction: column;
    transition: transform .15s ease, box-shadow .15s ease;
}
.gfw-card:hover { transform: translateY(-2px); box-shadow: var(--gfw-shadow-m); }
.gfw-card__media { position: relative; aspect-ratio: 16 / 10; background: var(--gfw-surface-2); }
.gfw-card__image { width: 100%; height: 100%; object-fit: cover; display: block; }
.gfw-card__media .gfw-badge { position: absolute; top: var(--gfw-space-3); left: var(--gfw-space-3); }
.gfw-card__body { padding: var(--gfw-space-4); display: flex; flex-direction: column; gap: var(--gfw-space-2); flex: 1; }
.gfw-card__title { font-size: 1.1rem; font-weight: 700; margin: 0; }
.gfw-card__location {
    display: flex;
    align-items: center;
    gap: var(--gfw-space-1);
    color: var(--gfw-ink-muted);
    font-size: .9rem;
    margin: 0;
}
.gfw-card__footer { display: flex; align-items: center; justify-content: space-between; margin-top: auto; padding-top: var(--gfw-space-2); }
.gfw-card__footer .gfw-icon-button { color: var(--gfw-ink-muted); }

.gfw-stats {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-wrap: wrap;
    gap: var(--gfw-space-2) var(--gfw-space-4);
    color: var(--gfw-ink-soft);
    font-size: .88rem;
}
.gfw-stats li { display: inline-flex; align-items: center; gap: var(--gfw-space-1); white-space: nowrap; }

.gfw-rating { display: inline-flex; align-items: center; gap: var(--gfw-space-1); }
.gfw-rating .gfw-icon { color: var(--gfw-amber); fill: var(--gfw-amber); }
.gfw-rating__count { color: var(--gfw-ink-muted); font-size: .9rem; }

/* Personal area preview */
.gfw-panel {
    background: var(--gfw-surface);
    border-radius: var(--gfw-radius-l);
    box-shadow: var(--gfw-shadow-s);
    padding: var(--gfw-space-4);
}

.gfw-tabs {
    list-style: none;
    display: flex;
    gap: var(--gfw-space-1);
    margin: 0 0 var(--gfw-space-3);
    padding: 0;
    border-bottom: 1px solid var(--gfw-line);
    overflow-x: auto;
    scrollbar-width: none;
}
.gfw-tabs::-webkit-scrollbar { display: none; }
.gfw-tabs__item {
    padding: var(--gfw-space-2) var(--gfw-space-3);
    font-size: .9rem;
    font-weight: 600;
    color: var(--gfw-ink-muted);
    white-space: nowrap;
    border-bottom: 3px solid transparent;
    margin-bottom: -1px;
}
.gfw-tabs__item.is-active { color: var(--gfw-blue-strong); border-color: var(--gfw-blue); }
.gfw-tabs--compact .gfw-tabs__item { padding-inline: var(--gfw-space-2); font-size: .85rem; }

.gfw-mine .gfw-tabs { flex-wrap: wrap; }
.gfw-mine__list { list-style: none; margin: 0 0 var(--gfw-space-4); padding: 0; display: grid; gap: var(--gfw-space-2); }
.gfw-mine__item {
    display: grid;
    grid-template-columns: 64px minmax(0, 1fr) auto;
    align-items: center;
    gap: var(--gfw-space-3);
    padding: var(--gfw-space-2);
    border-radius: var(--gfw-radius-m);
    background: var(--gfw-surface-2);
}
.gfw-mine__thumb { width: 64px; height: 48px; object-fit: cover; border-radius: var(--gfw-radius-s); }
.gfw-mine__title { font-size: .98rem; font-weight: 700; margin: 0 0 2px; }
.gfw-mine__meta { margin: 0; font-size: .82rem; color: var(--gfw-ink-muted); }
.gfw-mine__item .gfw-icon-button { color: var(--gfw-ink-muted); width: 32px; height: 32px; }

/* --- Route Builder shell ------------------------------------------------- */

.gfw-builder {
    background: var(--gfw-surface-dark);
    color: var(--gfw-on-dark);
    border-radius: var(--gfw-radius-l);
    overflow: hidden;
    box-shadow: var(--gfw-shadow-l);
}

.gfw-builder__toolbar {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    justify-content: space-between;
    gap: var(--gfw-space-3) var(--gfw-space-5);
    padding: var(--gfw-space-4) var(--gfw-space-5);
    border-bottom: 1px solid rgba(255, 255, 255, .08);
}
.gfw-builder__tool {
    display: inline-flex;
    align-items: center;
    gap: var(--gfw-space-2);
    font-size: .8rem;
    font-weight: 600;
    letter-spacing: .08em;
    text-transform: uppercase;
    color: var(--gfw-teal);
}
.gfw-builder__title {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--gfw-space-3);
    font-size: 1.4rem;
    font-weight: 700;
    margin: var(--gfw-space-1) 0;
}
.gfw-builder__status { margin: 0; color: var(--gfw-on-dark-muted); font-size: .9rem; }
.gfw-builder__totals {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-wrap: wrap;
    gap: var(--gfw-space-2) var(--gfw-space-4);
    font-size: .9rem;
    font-weight: 600;
}
.gfw-builder__totals li { display: inline-flex; align-items: center; gap: var(--gfw-space-1); white-space: nowrap; }

.gfw-builder__layout { display: grid; grid-template-columns: minmax(0, 1fr); }
@media (min-width: 992px) {
    /* T048: fluid columns (clamp), the map gets every remaining pixel; one viewport-based row, side panels scroll inside it. */
    .gfw-builder__layout { grid-template-columns: clamp(240px, 27vw, 300px) minmax(0, 1fr); grid-template-rows: var(--gfw-workspace-h); }
}
@media (min-width: 1200px) {
    .gfw-builder__layout { grid-template-columns: clamp(260px, 19vw, 300px) minmax(0, 1fr) clamp(320px, 23vw, 400px); }
}

.gfw-builder__side {
    padding: var(--gfw-space-4);
    background: var(--gfw-surface-dark-2);
    border-right: 1px solid rgba(255, 255, 255, .08);
    min-height: 0;
    overflow-y: auto;
}
.gfw-builder__side .gfw-tabs { border-color: rgba(255, 255, 255, .1); }
.gfw-builder__side .gfw-tabs__item { color: var(--gfw-on-dark-muted); }
.gfw-builder__side .gfw-tabs__item.is-active { color: #fff; border-color: var(--gfw-teal); }
.gfw-builder__side-head { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--gfw-space-2); margin-bottom: var(--gfw-space-3); }
.gfw-builder__side-head .gfw-editor__actions { flex-wrap: wrap; gap: var(--gfw-space-2); }
.gfw-builder__subtitle { font-size: 1rem; font-weight: 700; margin: 0; }

.gfw-stages { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--gfw-space-2); }
.gfw-stage {
    display: grid;
    grid-template-columns: 28px 56px minmax(0, 1fr);
    gap: var(--gfw-space-3);
    align-items: start;
    padding: var(--gfw-space-2);
    border-radius: var(--gfw-radius-m);
    border: 1px solid transparent;
}
.gfw-stage.is-focused { background: rgba(23, 179, 163, .12); border-color: rgba(23, 179, 163, .5); }
.gfw-stage__ordinal {
    width: 28px;
    height: 28px;
    border-radius: var(--gfw-radius-pill);
    background: var(--gfw-blue);
    color: #fff;
    font-weight: 700;
    font-size: .85rem;
    display: inline-flex;
    align-items: center;
    justify-content: center;
}
.gfw-stage__thumb { width: 56px; height: 42px; object-fit: cover; border-radius: var(--gfw-radius-s); }
.gfw-stage__text { min-width: 0; }
.gfw-stage__name { font-size: .95rem; font-weight: 700; margin: 0; }
.gfw-stage__meta { margin: 2px 0 var(--gfw-space-1); font-size: .8rem; color: var(--gfw-on-dark-muted); }
.gfw-tracks { list-style: none; margin: 0; padding: 0; display: grid; gap: 2px; }
.gfw-track { display: flex; align-items: center; justify-content: space-between; gap: var(--gfw-space-2); font-size: .8rem; color: var(--gfw-on-dark-muted); }
.gfw-track.is-default .gfw-track__name { color: var(--gfw-on-dark); font-weight: 600; }
.gfw-track__name { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* T048: in a narrow sidebar the row shrinks (name with ellipsis), the kind badge never wraps or overflows. */
.gfw-tracks { grid-template-columns: minmax(0, 1fr); }
.gfw-track__name { flex: 1 1 4rem; }
.gfw-track .gfw-kind, .gfw-track .gfw-badge { flex-shrink: 0; white-space: nowrap; }

.gfw-builder__map {
    position: relative;
    min-height: 320px;
    background: radial-gradient(circle at 30% 30%, #2c4a5a, #14202b 70%);
    overflow: hidden;
}
.gfw-map-sketch { position: absolute; inset: 0; width: 100%; height: 100%; }
.gfw-map-sketch__terrain { fill: #24404f; }
.gfw-map-sketch__route { fill: none; stroke: var(--gfw-blue); stroke-width: 5; stroke-linecap: round; stroke-linejoin: round; }
.gfw-map-sketch__variant { fill: none; stroke: var(--gfw-teal); stroke-width: 3; stroke-dasharray: 6 6; }
.gfw-map-sketch__stops circle { fill: #fff; stroke: var(--gfw-blue); stroke-width: 3; }
.gfw-map-sketch__stops text { fill: var(--gfw-navy); font-size: 11px; font-weight: 700; text-anchor: middle; }
.gfw-map-controls {
    position: absolute;
    top: var(--gfw-space-3);
    left: var(--gfw-space-3);
    display: grid;
    gap: var(--gfw-space-1);
}
.gfw-map-controls__button {
    width: 36px;
    height: 36px;
    border-radius: var(--gfw-radius-s);
    background: #fff;
    color: var(--gfw-ink);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-weight: 700;
    box-shadow: var(--gfw-shadow-s);
}
.gfw-map-modes {
    position: absolute;
    top: var(--gfw-space-3);
    right: var(--gfw-space-3);
    list-style: none;
    margin: 0;
    padding: 4px;
    display: flex;
    gap: 2px;
    background: #fff;
    border-radius: var(--gfw-radius-s);
    color: var(--gfw-ink-muted);
    font-size: .82rem;
    font-weight: 600;
    box-shadow: var(--gfw-shadow-s);
}
.gfw-map-modes li { padding: 4px 10px; border-radius: 6px; }
.gfw-map-modes li.is-active { background: #e8f0fe; color: var(--gfw-blue-strong); }
.gfw-map-placeholder {
    position: absolute;
    left: 50%;
    bottom: var(--gfw-space-4);
    transform: translateX(-50%);
    margin: 0;
    padding: var(--gfw-space-2) var(--gfw-space-4);
    background: rgba(255, 255, 255, .92);
    color: var(--gfw-ink);
    border-radius: var(--gfw-radius-pill);
    font-size: .85rem;
    font-weight: 600;
    display: inline-flex;
    align-items: center;
    gap: var(--gfw-space-2);
    white-space: nowrap;
    box-shadow: var(--gfw-shadow-m);
}

.gfw-builder__context {
    background: var(--gfw-surface);
    color: var(--gfw-ink);
    display: flex;
    flex-direction: column;
    min-height: 0;
    overflow-y: auto;
}
.gfw-builder__context-image { width: 100%; height: 130px; object-fit: cover; }
.gfw-builder__context-body { padding: var(--gfw-space-4); display: grid; gap: var(--gfw-space-3); }
.gfw-builder__context-kicker { margin: 0; font-size: .8rem; color: var(--gfw-ink-muted); font-weight: 600; }
.gfw-builder__context-title { margin: 0; font-size: 1.15rem; font-weight: 700; }
.gfw-builder__context-text { margin: 0; font-size: .9rem; color: var(--gfw-ink-soft); }

.gfw-profile { margin: 0; }
.gfw-profile svg { width: 100%; height: 80px; display: block; }
.gfw-profile__area { fill: rgba(26, 115, 232, .18); }
.gfw-profile__line { fill: none; stroke: var(--gfw-blue); stroke-width: 2; }
.gfw-profile__caption { display: flex; justify-content: space-between; font-size: .75rem; color: var(--gfw-ink-muted); margin-top: 4px; }

/* Mobile builder (T048): single column, map first, then the context panel (forms), then the lists. */
@media (max-width: 991.98px) {
    .gfw-builder__toolbar { padding: var(--gfw-space-3) var(--gfw-space-4); }
    .gfw-builder__side { border-right: 0; border-top: 1px solid rgba(255, 255, 255, .08); order: 2; }
    .gfw-builder__map { min-height: 260px; order: 0; }
    .gfw-builder__context { order: 1; }
    .gfw-map-modes { display: none; }
    .gfw-builder__context-image { height: 120px; }
}

/* --- Footer -------------------------------------------------------------- */

.gfw-footer {
    background: var(--gfw-navy-deep);
    color: var(--gfw-on-dark-muted);
    padding-block: var(--gfw-space-6);
    margin-top: var(--gfw-space-6);
}
.gfw-footer__inner { display: grid; gap: var(--gfw-space-4); }
@media (min-width: 768px) {
    .gfw-footer__inner { grid-template-columns: 1fr auto; align-items: center; }
    .gfw-footer__legal { grid-column: 1 / -1; }
}
.gfw-footer__brand { display: flex; flex-wrap: wrap; align-items: center; gap: var(--gfw-space-2); color: #fff; }
.gfw-footer__claim { width: 100%; margin: 0; color: var(--gfw-on-dark-muted); font-size: .9rem; }
.gfw-footer__nav { display: flex; flex-wrap: wrap; gap: var(--gfw-space-4); }
.gfw-footer__nav a { color: var(--gfw-on-dark); text-decoration: none; font-weight: 500; }
.gfw-footer__nav a:hover { color: var(--gfw-teal); }
.gfw-footer__legal { margin: 0; font-size: .85rem; }
.gfw-footer__owner { color: var(--gfw-on-dark); font-weight: 500; }
.gfw-footer__ai-note { max-width: 90ch; }
.gfw-footer__ai-note a { color: var(--gfw-on-dark); }

/* ==========================================================================
   Route Builder editor (T006): real server-side editor on the T002 builder shell
   ========================================================================== */

.gfw-kicker {
    display: inline-flex;
    align-items: center;
    gap: var(--gfw-space-2);
    margin: 0 0 var(--gfw-space-2);
    font-size: .8rem;
    font-weight: 600;
    letter-spacing: .08em;
    text-transform: uppercase;
    color: var(--gfw-teal-ink);
}
.gfw-public__hero .gfw-kicker, .gfw-explore-hero .gfw-kicker { color: var(--gfw-teal); }
.gfw-page-title { margin-bottom: var(--gfw-space-3); }
.gfw-breadcrumb { display: flex; gap: var(--gfw-space-2); font-size: .9rem; color: var(--gfw-ink-muted); margin-bottom: var(--gfw-space-4); }
.gfw-breadcrumb a { display: inline-block; padding-block: .2rem; color: var(--gfw-blue); text-decoration: none; }

.gfw-flash {
    display: flex;
    align-items: center;
    gap: var(--gfw-space-2);
    margin: 0 0 var(--gfw-space-4);
    padding: var(--gfw-space-3) var(--gfw-space-4);
    border-radius: var(--gfw-radius-m);
    font-weight: 600;
}
.gfw-flash--ok { background: #e3f6ec; color: #145c34; border: 1px solid #b7e4c7; }
.gfw-flash--alert { background: #fdecec; color: #8a1c1c; border: 1px solid #f4b8b8; }

/* Forms */
.gfw-form { display: grid; gap: var(--gfw-space-4); }
.gfw-form--compact { gap: var(--gfw-space-3); margin-top: var(--gfw-space-3); }
.gfw-form-grid { display: grid; gap: var(--gfw-space-3) var(--gfw-space-4); grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); }
.gfw-form-grid__wide { grid-column: 1 / -1; }
.gfw-field { display: grid; gap: var(--gfw-space-1); margin: 0; padding: 0; border: 0; min-width: 0; min-inline-size: 0; }
.gfw-field__label { font-weight: 600; font-size: .9rem; color: var(--gfw-ink); }
legend.gfw-field__label { float: none; width: auto; padding: 0; margin-bottom: var(--gfw-space-1); }
.gfw-required { color: var(--gfw-orange); }
.gfw-input, .gfw-select, .gfw-textarea {
    width: 100%;
    min-width: 0;
    padding: 10px 12px;
    border: 1px solid var(--gfw-line);
    border-radius: var(--gfw-radius-s);
    background: var(--gfw-surface);
    color: var(--gfw-ink);
    font: inherit;
}
.gfw-input--small { padding: 6px 10px; font-size: .9rem; }
.gfw-input:focus, .gfw-select:focus, .gfw-textarea:focus { outline: none; border-color: var(--gfw-blue); box-shadow: var(--gfw-focus); }
.gfw-input.input-validation-error, .gfw-select.input-validation-error, .gfw-textarea.input-validation-error { border-color: #c62828; }
.gfw-field__error { display: block; min-height: 0; font-size: .82rem; color: #b71c1c; font-weight: 600; }
.gfw-field__error:empty { display: none; }
.gfw-field__help { display: block; font-size: .8rem; color: var(--gfw-ink-muted); margin: 0; }
.gfw-form__errors { margin: 0; padding: var(--gfw-space-3) var(--gfw-space-4); border-radius: var(--gfw-radius-s); background: #fdecec; color: #8a1c1c; font-weight: 600; }
.gfw-form__errors:empty, .gfw-form__errors.validation-summary-valid { display: none; }
.gfw-form__errors ul { margin: 0; padding-left: 1.2em; }
.gfw-form__actions { display: flex; flex-wrap: wrap; gap: var(--gfw-space-2); align-items: center; }
.gfw-button--ghost { background: transparent; color: var(--gfw-blue-strong); border-color: var(--gfw-line); }
.gfw-button--ghost:hover { background: var(--gfw-surface-2); color: var(--gfw-blue-strong); }
.gfw-button--danger { color: #b71c1c; }
.gfw-button--danger:hover { background: #fdecec; color: #8a1c1c; }
.gfw-button:disabled { opacity: .5; cursor: not-allowed; }

.gfw-choice { gap: var(--gfw-space-2); }
.gfw-choice__option {
    display: grid;
    grid-template-columns: auto 1fr;
    gap: var(--gfw-space-2);
    align-items: start;
    padding: var(--gfw-space-2) var(--gfw-space-3);
    border: 1px solid var(--gfw-line);
    border-radius: var(--gfw-radius-s);
    cursor: pointer;
}
.gfw-choice__option:has(input:checked) { border-color: var(--gfw-blue); background: #e8f0fe; }
.gfw-choice__option input { width: 20px; height: 20px; margin-top: 2px; accent-color: var(--gfw-blue); }
.gfw-choice__option small { display: block; color: var(--gfw-ink-muted); font-size: .8rem; }

.gfw-inline-form { display: flex; flex-wrap: wrap; gap: var(--gfw-space-2); align-items: center; margin-top: var(--gfw-space-2); }
.gfw-inline-form .gfw-input { flex: 1 1 160px; width: auto; }
.gfw-order-form { display: none; }

/* Editor shell adjustments (T048: compact chrome above the map) */
.gfw-editor-page .gfw-builder { box-shadow: var(--gfw-shadow-m); }
.gfw-editor-page .gfw-builder__toolbar { padding: var(--gfw-space-2) var(--gfw-space-4); gap: var(--gfw-space-2) var(--gfw-space-4); align-items: center; }
.gfw-editor-page .gfw-builder__identity { display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--gfw-space-1) var(--gfw-space-3); }
.gfw-editor-page .gfw-builder__title { font-size: 1.15rem; margin: 0; }
.gfw-editor-page .gfw-builder__status, .gfw-editor-page .gfw-builder__totals { font-size: .82rem; }
.gfw-badge--draft { background: rgba(23, 179, 163, .18); color: var(--gfw-teal); border: 1px solid rgba(23, 179, 163, .5); font-weight: 600; }
.gfw-badge--primary { background: #fff3d6; color: #7a4a00; border: 1px solid #f2d59b; font-weight: 600; }
.gfw-badge--default { background: #dff6f2; color: #0c6b60; border: 1px solid #b6e7df; font-weight: 600; }
.gfw-builder__cta { margin-top: var(--gfw-space-2); }

@media (min-width: 992px) {
    /* The side and context panels scroll within the viewport-based row; the map never shrinks to make room for them. */
    .gfw-editor__side, .gfw-editor__context { max-height: none; min-height: 0; overflow-y: auto; overscroll-behavior: contain; }
    .gfw-editor__map { min-height: 0; }
    /* Narrow sidebar (260-300px): tighter padding and the row actions under the item text instead of beside it. */
    .gfw-editor-page .gfw-builder__side { padding: var(--gfw-space-3); }
    .gfw-editor-page .gfw-editor__item { grid-template-columns: 28px minmax(0, 1fr); }
    .gfw-editor-page .gfw-editor__item .gfw-editor__actions { grid-column: 2; justify-self: start; }
}
@media (min-width: 992px) and (max-width: 1199.98px) {
    /* Tablet landscape: two columns, the context panel flows full-width under the map and scrolls with the page. */
    .gfw-editor__layout { grid-template-rows: var(--gfw-workspace-h) auto; }
    .gfw-editor__context { grid-column: 1 / -1; overflow: visible; }
}

.gfw-editor__nav { display: flex; flex-wrap: wrap; gap: var(--gfw-space-1); overflow: visible; }
.gfw-editor__nav .gfw-tabs__item { text-decoration: none; }
.gfw-editor__nav .gfw-tabs__item:hover { color: #fff; }
.gfw-editor__section { margin-top: var(--gfw-space-4); }
.gfw-editor__section:first-of-type { margin-top: 0; }
.gfw-editor__hint { margin: 0; font-size: .85rem; color: var(--gfw-on-dark-muted); }
.gfw-editor__hint a { color: var(--gfw-teal); }
.gfw-editor__item { grid-template-columns: 28px minmax(0, 1fr) auto; align-items: start; }
.gfw-editor__item-link { display: inline-block; padding-block: .2rem; color: inherit; text-decoration: none; overflow-wrap: anywhere; }
.gfw-editor__item-link:hover { color: var(--gfw-teal); }
.gfw-editor__item.is-focused .gfw-editor__item-link { color: #fff; }
.gfw-stage__ordinal--track { background: var(--gfw-teal); color: var(--gfw-navy-deep); }
.gfw-stage__ordinal--waypoint { background: var(--gfw-amber); color: var(--gfw-navy-deep); }
.gfw-editor__item .gfw-stage__meta { display: flex; flex-wrap: wrap; gap: 4px; align-items: center; }
.gfw-editor__item .gfw-stage__name { display: flex; flex-wrap: wrap; gap: var(--gfw-space-2); align-items: center; }
.gfw-editor__actions { display: inline-flex; gap: 2px; align-items: center; }
.gfw-editor__actions form { display: inline-flex; margin: 0; }
.gfw-iconbtn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 30px;
    height: 30px;
    padding: 0;
    border: 1px solid transparent;
    border-radius: var(--gfw-radius-s);
    background: transparent;
    color: inherit;
}
.gfw-builder__side .gfw-iconbtn { color: var(--gfw-on-dark-muted); }
.gfw-iconbtn:hover:not(:disabled) { background: rgba(127, 140, 160, .2); color: inherit; }
.gfw-iconbtn:disabled { opacity: .3; cursor: not-allowed; }
.gfw-iconbtn--danger:hover:not(:disabled) { color: #ff8a80; }
.gfw-builder__context .gfw-iconbtn { color: var(--gfw-ink-muted); }

.gfw-editor__map { display: grid; place-items: end center; }
.gfw-editor__map-note { position: relative; z-index: 1; display: grid; gap: var(--gfw-space-2); justify-items: center; padding: var(--gfw-space-4); text-align: center; }
.gfw-editor__map-note .gfw-map-placeholder { position: static; transform: none; white-space: normal; }
.gfw-editor__map-stats { margin: 0; font-size: .85rem; color: var(--gfw-on-dark-muted); }

.gfw-editor__context .gfw-builder__context-body { gap: var(--gfw-space-4); }
.gfw-subsection { display: grid; gap: var(--gfw-space-2); padding-top: var(--gfw-space-3); border-top: 1px solid var(--gfw-line); }
.gfw-subsection__title { margin: 0; font-size: 1rem; font-weight: 700; }
.gfw-subsection__subtitle { margin: 0; font-size: .92rem; font-weight: 700; }
.gfw-summary { display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: var(--gfw-space-1) var(--gfw-space-3); margin: 0; font-size: .9rem; }
.gfw-summary dt { color: var(--gfw-ink-muted); font-weight: 600; }
.gfw-summary dd { margin: 0; min-width: 0; overflow-wrap: anywhere; }
.gfw-shortcuts { display: grid; gap: var(--gfw-space-2); }
.gfw-variants { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--gfw-space-2); }
.gfw-variant { padding: var(--gfw-space-2) var(--gfw-space-3); border: 1px solid var(--gfw-line); border-radius: var(--gfw-radius-s); background: var(--gfw-surface-2); }
.gfw-variant.is-default { border-color: #b6e7df; }
.gfw-variant__head { display: flex; align-items: center; justify-content: space-between; gap: var(--gfw-space-2); }
.gfw-variant__name { display: flex; flex-wrap: wrap; align-items: center; gap: var(--gfw-space-2); min-width: 0; font-weight: 600; }
.gfw-variant__name a { color: var(--gfw-ink); text-decoration: none; }
.gfw-variant__actions { display: flex; flex-wrap: wrap; gap: var(--gfw-space-2); margin-top: var(--gfw-space-2); }
.gfw-variant__actions form { margin: 0; }
.gfw-danger-zone { display: grid; gap: var(--gfw-space-1); justify-items: start; padding-top: var(--gfw-space-3); border-top: 1px solid var(--gfw-line); }
.gfw-conflict { border: 1px solid #f4b8b8; }
.gfw-conflict__message { font-size: 1.1rem; font-weight: 700; color: #8a1c1c; }

@media (max-width: 991.98px) {
    .gfw-editor__map { min-height: 0; }
    .gfw-editor__nav { flex-wrap: wrap; }
}

/* ==========================================================================
   Draft map (T007): MapLibre read-only visualisation inside the builder shell
   ========================================================================== */

.gfw-draft-map { display: block; position: relative; min-height: 460px; background: #182634; }
.gfw-draft-map .gfw-draft-map__canvas { position: absolute; inset: 0; width: 100%; height: 100%; } /* beats .maplibregl-map { position: relative } */
.gfw-draft-map .maplibregl-canvas:focus-visible { outline: 3px solid var(--gfw-amber); outline-offset: -3px; }
.gfw-draft-map__overlay {
    position: absolute;
    left: 50%;
    bottom: var(--gfw-space-4);
    transform: translateX(-50%);
    z-index: 2;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--gfw-space-2);
    max-width: calc(100% - 2 * var(--gfw-space-4));
    pointer-events: none;
}
.gfw-draft-map__overlay > * { pointer-events: auto; }
.gfw-draft-map__status {
    margin: 0;
    padding: var(--gfw-space-2) var(--gfw-space-4);
    background: rgba(255, 255, 255, .92);
    color: var(--gfw-ink);
    border-radius: var(--gfw-radius-pill);
    font-size: .85rem;
    font-weight: 600;
    text-align: center;
    box-shadow: var(--gfw-shadow-m);
}
.gfw-draft-map__status.is-error { background: #fdecec; color: #8a1c1c; }
.gfw-draft-map__status--static { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); z-index: 2; }
.gfw-draft-map__fit { background: #fff; color: var(--gfw-blue-strong); border-color: var(--gfw-line); box-shadow: var(--gfw-shadow-s); }
.gfw-draft-map__fit:hover { background: #e8f0fe; color: var(--gfw-blue-strong); }

.gfw-map-legend {
    position: absolute;
    top: var(--gfw-space-3);
    right: var(--gfw-space-3);
    z-index: 2;
    list-style: none;
    margin: 0;
    padding: var(--gfw-space-2) var(--gfw-space-3);
    display: grid;
    gap: 4px;
    background: rgba(255, 255, 255, .94);
    color: var(--gfw-ink);
    border-radius: var(--gfw-radius-s);
    font-size: .75rem;
    font-weight: 600;
    box-shadow: var(--gfw-shadow-s);
    max-width: 200px;
}
.gfw-map-legend li { display: flex; align-items: center; gap: var(--gfw-space-2); }
.gfw-map-legend__swatch { display: inline-block; width: 26px; height: 0; border-top: 3px solid; flex: 0 0 auto; }
.gfw-map-legend__swatch--planned { border-top-style: dashed; border-color: #5da9ff; }
.gfw-map-legend__swatch--recorded { border-color: #2fd6c0; }
.gfw-map-legend__swatch--primary { border-top-width: 4px; border-color: #2fd6c0; box-shadow: 0 0 0 3px rgba(20, 32, 43, .25); }
.gfw-map-legend__swatch--variant { border-top-width: 2px; border-color: #5da9ff; opacity: .75; }
.gfw-map-legend__swatch--waypoint { width: 14px; height: 14px; border: 2px solid #fff; border-radius: 50%; background: #f5a623; box-shadow: 0 0 0 1px #c88a1a; }
.gfw-map-legend__swatch--selected { border-top-width: 6px; border-color: rgba(255, 209, 102, .7); }

.gfw-draft-map__warnings {
    position: absolute;
    left: var(--gfw-space-3);
    bottom: 72px;
    z-index: 2;
    max-width: min(360px, calc(100% - 2 * var(--gfw-space-3)));
    padding: var(--gfw-space-2) var(--gfw-space-3);
    background: #fff3d6;
    color: #7a4a00;
    border: 1px solid #f2d59b;
    border-radius: var(--gfw-radius-s);
    font-size: .8rem;
    box-shadow: var(--gfw-shadow-s);
}
.gfw-draft-map__warnings-title { margin: 0 0 4px; font-weight: 700; }
.gfw-draft-map__warnings ul { margin: 0; padding-left: 1.1em; display: grid; gap: 4px; }
.gfw-draft-map__warnings small { display: block; color: #7a4a00; overflow-wrap: anywhere; }

.gfw-map-popup .maplibregl-popup-content { display: grid; gap: 2px; padding: 8px 10px; font: 600 .8rem/1.3 var(--gfw-font); color: var(--gfw-ink); border-radius: var(--gfw-radius-s); box-shadow: var(--gfw-shadow-m); }
.gfw-map-popup .maplibregl-popup-content span { font-weight: 500; color: var(--gfw-ink-soft); }
.gfw-draft-map .maplibregl-ctrl-group { box-shadow: var(--gfw-shadow-s); }
/* T038: basemap attribution always readable, wrapping on narrow screens instead of collapsing. */
.gfw-draft-map .maplibregl-ctrl-attrib { font-size: .72rem; line-height: 1.3; max-width: calc(100% - 16px); white-space: normal; background: rgba(255, 255, 255, .92); color: #14202b; }
.gfw-draft-map .maplibregl-ctrl-attrib a { color: #0b4f9c; display: inline-block; min-height: 24px; line-height: 24px; padding-inline: 2px; } /* touch target ≥ 24px */

/* Small screens: nothing overlays the canvas; status, warnings and legend flow below it. */
@media (max-width: 991.98px) {
    .gfw-draft-map { min-height: 0; display: grid; grid-template-rows: var(--gfw-map-h) auto auto auto; gap: var(--gfw-space-2); padding-bottom: var(--gfw-space-3); }
    .gfw-draft-map .gfw-draft-map__canvas { position: relative; inset: auto; height: var(--gfw-map-h); }
    .gfw-draft-map__overlay { position: static; transform: none; max-width: none; padding-inline: var(--gfw-space-3); }
    .gfw-draft-map__warnings { position: static; max-width: none; margin-inline: var(--gfw-space-3); }
    .gfw-map-legend { position: static; max-width: none; margin-inline: var(--gfw-space-3); display: flex; flex-wrap: wrap; gap: 4px var(--gfw-space-3); font-size: .72rem; }
    .gfw-draft-map__status--static { position: static; transform: none; }
}
@media (prefers-reduced-motion: reduce) {
    .gfw-draft-map * { transition-duration: 0s !important; animation-duration: 0s !important; }
}

/* ==========================================================================
   Geometry editor (T008): toolbar of the Planned-track editing mode
   ========================================================================== */

.gfw-geo {
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 3;
    display: grid;
    gap: var(--gfw-space-2);
    padding: var(--gfw-space-3) var(--gfw-space-4);
    background: rgba(255, 255, 255, .96);
    color: var(--gfw-ink);
    border-top: 3px solid #ffd166;
    box-shadow: var(--gfw-shadow-m);
    font-size: .85rem;
}
.gfw-geo__bar { display: flex; flex-wrap: wrap; align-items: center; gap: var(--gfw-space-2) var(--gfw-space-3); }
.gfw-geo__title { font-weight: 600; }
.gfw-geo__state { padding: 2px 10px; border-radius: var(--gfw-radius-pill); background: var(--gfw-surface-2); color: var(--gfw-ink-soft); font-weight: 600; }
.gfw-geo__state.is-dirty { background: #fff3d6; color: #7a4a00; }
.gfw-geo__buttons { display: flex; flex-wrap: wrap; gap: var(--gfw-space-2); margin-inline-start: auto; }
.gfw-geo__point { display: flex; flex-wrap: wrap; align-items: center; gap: var(--gfw-space-2) var(--gfw-space-3); padding: var(--gfw-space-2) var(--gfw-space-3); background: var(--gfw-surface-2); border-radius: var(--gfw-radius-s); }
.gfw-geo__point-label { font-weight: 600; }
.gfw-geo__field { display: inline-flex; align-items: center; gap: var(--gfw-space-1); font-weight: 600; }
.gfw-geo__field .gfw-input { width: 9.5em; }
.gfw-geo__hint { margin: 0; color: var(--gfw-ink-muted); }
.gfw-geo__route { display: flex; flex-wrap: wrap; align-items: center; gap: var(--gfw-space-2) var(--gfw-space-3); padding: var(--gfw-space-2) var(--gfw-space-3); border: 1px dashed var(--gfw-line); border-radius: var(--gfw-radius-s); }
.gfw-geo__route .gfw-geo__hint { flex-basis: 100%; }
.gfw-geo__route[aria-busy="true"] { opacity: .75; }
.gfw-geo__route-state { padding: 2px 10px; border-radius: var(--gfw-radius-pill); background: #e3f6ec; color: #145c34; font-weight: 600; }
.gfw-geo__route[data-routing-state="unavailable"] .gfw-geo__route-state { background: var(--gfw-surface-2); color: var(--gfw-ink-muted); }
.gfw-geo__route[data-routing-state="loading"] .gfw-geo__route-state { background: #e8f0fe; color: var(--gfw-blue-strong); }
.gfw-geo__route[data-routing-state="error"] .gfw-geo__route-state { background: #fdecec; color: #8a1c1c; }
.gfw-geo__check { display: inline-flex; align-items: center; gap: var(--gfw-space-1); min-height: 24px; font-weight: 600; }
.gfw-geo__check input { width: 20px; height: 20px; accent-color: var(--gfw-blue); }
.gfw-select--small { min-height: 36px; padding-block: 4px; width: auto; }
.gfw-geo__message { margin: 0; padding: var(--gfw-space-2) var(--gfw-space-3); border-radius: var(--gfw-radius-s); font-weight: 600; background: var(--gfw-surface-2); }
.gfw-geo__message.is-error { background: #fdecec; color: #8a1c1c; }
.gfw-geo__message.is-info { background: #e8f0fe; color: var(--gfw-blue-strong); }
.gfw-geo__message a { color: inherit; font-weight: 700; }
.gfw-draft-map:has(.gfw-geo:not([hidden])) .gfw-map-legend { display: none; }
.gfw-draft-map:has(.gfw-geo:not([hidden])) .gfw-draft-map__warnings { display: none; }

@media (max-width: 991.98px) {
    .gfw-draft-map { grid-template-rows: var(--gfw-map-h) auto auto auto auto; }
    .gfw-geo { position: static; margin-inline: var(--gfw-space-3); border-radius: var(--gfw-radius-s); border-top-width: 3px; }
    .gfw-geo__buttons { margin-inline-start: 0; }
}

/* Policy links (iubenda-hosted, plain anchors) */
.gfw-policy-links { list-style: none; margin: var(--gfw-space-4) 0 0; padding: 0; display: grid; gap: var(--gfw-space-2); }
.gfw-policy-links a { color: var(--gfw-blue); font-weight: 600; text-decoration: none; }
.gfw-policy-links a:hover { text-decoration: underline; }

/* Export (T009) */
.gfw-export .gfw-inline-form { margin-top: 0; }
.gfw-export__note { color: var(--gfw-ink-muted); }
.gfw-conflict__reasons { margin: 0 0 var(--gfw-space-3); padding-left: 1.2em; display: grid; gap: var(--gfw-space-1); color: #8a1c1c; }

/* Publication (T010) */
.gfw-badge--published { background: #e3f6ec; color: #145c34; border: 1px solid #b7e4c7; font-weight: 600; }
.gfw-badge--pending { background: #fff3d6; color: #7a4a00; border: 1px solid #f2d59b; font-weight: 600; }
.gfw-badge--withdrawn { background: #fdecec; color: #8a1c1c; border: 1px solid #f4b8b8; font-weight: 600; }
.gfw-badge--unpublished { background: rgba(255, 255, 255, .14); color: var(--gfw-on-dark-muted); font-weight: 600; }
.gfw-publication .gfw-form__actions form { margin: 0; }

/* ==========================================================================
   Public experience page (T011)
   ========================================================================== */
.gfw-public__hero { position: relative; isolation: isolate; overflow: hidden; background: var(--gfw-navy-deep); color: #fff; padding-block: var(--gfw-space-6) var(--gfw-space-5); }
/* T029: published cover behind the hero text, darkened for contrast; neutral navy otherwise */
.gfw-public__cover { position: absolute; inset: 0; z-index: -2; width: 100%; height: 100%; object-fit: cover; }
.gfw-public__hero.has-cover::after { content: ""; position: absolute; inset: 0; z-index: -1; background: linear-gradient(90deg, rgba(8, 28, 46, .9) 0%, rgba(8, 28, 46, .72) 60%, rgba(8, 28, 46, .55) 100%); }
.gfw-public__hero.has-cover { min-height: 360px; display: flex; align-items: flex-end; }
.gfw-public__hero-inner { position: relative; }
.gfw-public__contributor { margin: 0 0 var(--gfw-space-3); color: var(--gfw-on-dark); }
@media (prefers-reduced-motion: no-preference) { .gfw-public__hero { scroll-behavior: smooth; } }
.gfw-public__title { font-size: clamp(1.8rem, 4vw, 2.6rem); font-weight: 800; margin: 0 0 var(--gfw-space-2); letter-spacing: -.02em; }
.gfw-public__place { display: flex; align-items: center; gap: var(--gfw-space-1); margin: 0 0 var(--gfw-space-3); color: var(--gfw-on-dark); }
.gfw-public__badges { list-style: none; display: flex; flex-wrap: wrap; gap: var(--gfw-space-2); margin: 0 0 var(--gfw-space-3); padding: 0; }
.gfw-public__stats { color: var(--gfw-on-dark); }
.gfw-public__layout { display: grid; gap: var(--gfw-space-5); }
@media (min-width: 992px) { .gfw-public__layout { grid-template-columns: minmax(0, 1fr) clamp(280px, 22vw, 360px); align-items: start; } }
.gfw-public__main { display: grid; gap: var(--gfw-space-5); min-width: 0; }
.gfw-public__side { display: grid; gap: var(--gfw-space-4); }
.gfw-public__section .gfw-section__title { margin-bottom: var(--gfw-space-3); }
.gfw-public__text { margin: 0; white-space: pre-line; color: var(--gfw-ink-soft); }
.gfw-public__map { border-radius: var(--gfw-radius-l); overflow: hidden; }
.gfw-public__mapbox { min-height: clamp(420px, 62vh, 800px); }
.gfw-public__stages { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--gfw-space-4); }
.gfw-public__stage { padding-top: var(--gfw-space-3); border-top: 1px solid var(--gfw-line); }
.gfw-public__stage:first-child { padding-top: 0; border-top: 0; }
.gfw-public__stage-title { display: flex; align-items: center; gap: var(--gfw-space-2); margin: 0 0 var(--gfw-space-2); font-size: 1.1rem; font-weight: 700; }
.gfw-public__tracks, .gfw-public__waypoints { list-style: none; margin: var(--gfw-space-2) 0 0; padding: 0; display: grid; gap: var(--gfw-space-2); }
.gfw-public__track { display: flex; flex-wrap: wrap; align-items: center; gap: var(--gfw-space-2); padding: var(--gfw-space-2) var(--gfw-space-3); border: 1px solid var(--gfw-line); border-radius: var(--gfw-radius-s); background: var(--gfw-surface-2); }
.gfw-public__track.is-default, .gfw-public__track.is-primary { border-color: #b6e7df; }
.gfw-public__track-body { display: flex; flex-wrap: wrap; align-items: center; gap: var(--gfw-space-2); flex: 1 1 auto; min-width: 0; }
.gfw-public__track-name { font-weight: 700; }
.gfw-public__track-meta { color: var(--gfw-ink-muted); font-size: .85rem; }
.gfw-public__waypoint { display: inline-flex; flex-wrap: wrap; align-items: center; gap: var(--gfw-space-1); }
.gfw-public__waypoint-notes { flex-basis: 100%; color: var(--gfw-ink-muted); font-size: .85rem; }
@media (max-width: 991.98px) { .gfw-public__mapbox { min-height: 0; } }

/* Explore catalog (T012) */
.gfw-explore-hero { background: var(--gfw-navy-deep); color: #fff; padding-block: var(--gfw-space-6) var(--gfw-space-5); }
.gfw-saved__meta { display: flex; justify-content: space-between; gap: var(--gfw-space-2); margin: var(--gfw-space-2) 0 0; font-size: .9rem; }
.gfw-saved-tombstone { border-style: dashed; }
.gfw-card__creator { margin: 0 0 var(--gfw-space-2); color: var(--gfw-ink-muted); font-size: .9rem; }
.gfw-inline-link--on-dark { color: #fff; }
.gfw-textarea { min-height: 8rem; resize: vertical; }
.gfw-community-hero .gfw-public__lead, .gfw-creator-hero .gfw-public__lead { max-width: 60ch; margin: var(--gfw-space-2) 0 0; color: rgba(255, 255, 255, .85); }
.gfw-catalog-filters { display: grid; gap: var(--gfw-space-3); grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); align-items: end; margin-top: var(--gfw-space-4); }
.gfw-catalog-filters .gfw-field__label { color: var(--gfw-on-dark); }
.gfw-catalog-filters .gfw-form__actions { align-self: end; }
.gfw-catalog-card__head { display: flex; flex-wrap: wrap; gap: var(--gfw-space-2); padding: var(--gfw-space-3) var(--gfw-space-4) 0; }
.gfw-catalog-card__link { display: inline-block; padding-block: .15rem; color: inherit; text-decoration: none; }
.gfw-catalog-card__link:hover { color: var(--gfw-blue-strong); }
.gfw-catalog-card__summary { margin: 0; font-size: .9rem; color: var(--gfw-ink-soft); }
.gfw-catalog-empty { display: grid; gap: var(--gfw-space-3); justify-items: start; }
.gfw-pagination { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: var(--gfw-space-3); margin-top: var(--gfw-space-5); }

/* ==========================================================================
   My experiences dashboard (T013)
   ========================================================================== */
.gfw-dashboard__head { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--gfw-space-3); margin-bottom: var(--gfw-space-4); }
.gfw-dashboard__counts { list-style: none; display: flex; flex-wrap: wrap; gap: var(--gfw-space-2) var(--gfw-space-4); margin: 0 0 var(--gfw-space-4); padding: 0; }
.gfw-dashboard__counts li { font-size: .9rem; color: var(--gfw-ink-muted); }
.gfw-dashboard__list { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--gfw-space-3); }
.gfw-dashboard-item { display: grid; gap: var(--gfw-space-3); padding: var(--gfw-space-4); }
.gfw-dashboard-item__head { display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--gfw-space-2); }
.gfw-dashboard-item__title { font-size: 1.15rem; font-weight: 700; margin: 0; flex: 1 1 auto; }
.gfw-dashboard-item__title a { color: inherit; text-decoration: none; display: inline-block; padding-block: .15rem; }
.gfw-dashboard-item__title a:hover { color: var(--gfw-blue-strong); }
.gfw-dashboard-item__meta { margin: 0; font-size: .9rem; color: var(--gfw-ink-muted); display: flex; flex-wrap: wrap; gap: var(--gfw-space-1) var(--gfw-space-3); }
.gfw-dashboard-item__actions { display: flex; flex-wrap: wrap; gap: var(--gfw-space-2); align-items: center; }
.gfw-dashboard-item__actions form { margin: 0; }
.gfw-badge--changed { background: #fff3d6; color: #7a4a00; border: 1px solid #f2d59b; font-weight: 600; }
.gfw-badge--draft-only { background: #eef2f6; color: #3b4a5a; border: 1px solid #d5dde6; font-weight: 600; }
.gfw-dashboard-empty { text-align: center; padding: var(--gfw-space-6) var(--gfw-space-4); display: grid; gap: var(--gfw-space-3); justify-items: center; }
@media (min-width: 768px) {
  .gfw-dashboard-item { grid-template-columns: 1fr auto; align-items: start; }
  .gfw-dashboard-item__actions { justify-content: flex-end; max-width: 22rem; }
}

/* Public .geofix download (T014) */
.gfw-public__actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--gfw-space-2) var(--gfw-space-3); margin-top: var(--gfw-space-3); }
.gfw-public__actions-note { color: var(--gfw-on-dark-muted); font-size: .9rem; }

/* Public stage navigation (T015) */
.gfw-map-nav { display: flex; flex-wrap: wrap; align-items: center; gap: var(--gfw-space-2); padding: var(--gfw-space-2) var(--gfw-space-3); background: var(--gfw-navy-deep); color: #fff; }
.gfw-map-nav__label { font-size: .8rem; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: var(--gfw-on-dark-muted); }
.gfw-map-nav__buttons { display: flex; flex-wrap: wrap; gap: var(--gfw-space-2); }
.gfw-map-nav__button { display: inline-flex; align-items: center; gap: 6px; min-height: 36px; padding: 6px 12px; border-radius: 999px; border: 1px solid rgba(255, 255, 255, .35); background: transparent; color: #fff; font: inherit; font-size: .9rem; font-weight: 600; cursor: pointer; }
.gfw-map-nav__button:hover { background: rgba(255, 255, 255, .12); }
.gfw-map-nav__button[aria-pressed="true"] { background: #ffd166; border-color: #ffd166; color: #14202b; }
.gfw-map-nav__button:focus-visible, .gfw-public__show-on-map:focus-visible { outline: 3px solid #ffd166; outline-offset: 2px; }
.gfw-map-nav__button .gfw-stage__ordinal { width: 22px; height: 22px; font-size: .75rem; }
.gfw-public__stage-head { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--gfw-space-2); }
.gfw-public__stage-head .gfw-public__stage-title { margin: 0; }
.gfw-public__show-on-map { min-height: 36px; }
.gfw-public__show-on-map[aria-pressed="true"] { background: #fff3d6; border-color: #f2d59b; color: #7a4a00; }
.gfw-map-legend__swatch--global { border-color: #14202b; }

/* ==========================================================================
   Accessibility & responsive hardening (T017)
   ========================================================================== */
/* Inline text links reach a 24px target without changing the text flow. */
.gfw-inline-link { display: inline-block; padding-block: .2rem; }
/* Long unbroken words (names, labels) wrap instead of forcing horizontal scroll. */
.gfw-main :is(h1, h2, h3, h4, p, dd, dt, legend, label) { overflow-wrap: anywhere; }
.gfw-public__track-name, .gfw-public__stage-title, .gfw-card__title, .gfw-catalog-card__link, .gfw-dashboard-item__title, .gfw-map-nav__button, .gfw-public__show-on-map, .gfw-editor__item { overflow-wrap: anywhere; min-width: 0; }
.gfw-dashboard-item__title, .gfw-public__track-body { min-width: 0; }

/* --- Photos (T021) ------------------------------------------------------- */

.gfw-photo-list { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--gfw-space-3); }
.gfw-photo-list__item { display: grid; grid-template-columns: 112px minmax(0, 1fr); gap: var(--gfw-space-2) var(--gfw-space-3); align-items: start; padding: var(--gfw-space-2); border: 1px solid var(--gfw-line); border-radius: var(--gfw-radius-s); }
.gfw-photo-list__thumb { width: 112px; height: 84px; object-fit: cover; border-radius: var(--gfw-radius-s); background: var(--gfw-line); }
.gfw-photo-list__actions { grid-column: 1 / -1; display: flex; flex-wrap: wrap; align-items: center; gap: var(--gfw-space-2); }
.gfw-photo-list__actions form { display: inline-flex; gap: var(--gfw-space-1); margin: 0; }
@media (max-width: 480px) {
    .gfw-photo-list__item { grid-template-columns: 1fr; }
    .gfw-photo-list__thumb { width: 100%; height: auto; max-height: 220px; }
}

.gfw-gallery { list-style: none; margin: var(--gfw-space-2) 0 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: var(--gfw-space-3); }
.gfw-gallery__item, .gfw-photo-strip__item { margin: 0; display: grid; gap: var(--gfw-space-1); }
.gfw-gallery__open { display: block; width: 100%; padding: 0; margin: 0; border: 0; background: none; border-radius: var(--gfw-radius-s); cursor: zoom-in; }
.gfw-gallery__open:focus-visible { outline: none; box-shadow: var(--gfw-focus); }
.gfw-gallery__open img { display: block; }

/* Lightbox (T028): native dialog, no library */
.gfw-lightbox { width: min(100vw - 2rem, 1200px); max-width: none; max-height: calc(100vh - 2rem); padding: var(--gfw-space-3); border: 0; border-radius: var(--gfw-radius-m); background: #0f1a24; color: var(--gfw-on-dark); }
.gfw-lightbox::backdrop { background: rgba(8, 14, 20, .85); }
.gfw-lightbox__bar { display: flex; justify-content: space-between; align-items: center; gap: var(--gfw-space-2); margin-bottom: var(--gfw-space-2); }
.gfw-lightbox__counter { font-size: .9rem; color: var(--gfw-on-dark-muted); }
.gfw-lightbox__close { color: var(--gfw-on-dark); }
.gfw-lightbox__figure { margin: 0; display: grid; gap: var(--gfw-space-2); justify-items: center; }
.gfw-lightbox__image { max-width: 100%; max-height: calc(100vh - 11rem); object-fit: contain; border-radius: var(--gfw-radius-s); background: #000; }
.gfw-lightbox__caption { font-size: .95rem; text-align: center; overflow-wrap: anywhere; }
.gfw-lightbox__nav { display: flex; justify-content: center; gap: var(--gfw-space-2); margin-top: var(--gfw-space-3); }
.gfw-lightbox__nav .gfw-icon { transform: rotate(-90deg); }
.gfw-lightbox__nav [data-lightbox-next] .gfw-icon { transform: rotate(-90deg); }
.gfw-photo-list__preview { display: grid; gap: var(--gfw-space-1); }
.gfw-photo-list__preview .gfw-badge { justify-self: start; }
.gfw-gallery__item img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; border-radius: var(--gfw-radius-s); background: var(--gfw-line); }
.gfw-gallery figcaption, .gfw-photo-strip figcaption { font-size: .85rem; color: var(--gfw-ink-muted); overflow-wrap: anywhere; }
.gfw-photo-strip { list-style: none; margin: var(--gfw-space-1) 0 0; padding: 0; display: flex; flex-wrap: wrap; gap: var(--gfw-space-2); flex-basis: 100%; }
.gfw-photo-strip__item img { width: 160px; max-width: 100%; aspect-ratio: 4 / 3; object-fit: cover; border-radius: var(--gfw-radius-s); background: var(--gfw-line); }

/* --- Home CTA (T024) ------------------------------------------------------ */

.gfw-home-cta { display: grid; gap: var(--gfw-space-4); margin-bottom: var(--gfw-space-7); }
@media (min-width: 900px) {
    .gfw-home-cta { grid-template-columns: minmax(0, 1fr) auto; align-items: center; }
}

/* --- Simple data table (T026) --------------------------------------------- */

.gfw-table { width: 100%; border-collapse: collapse; margin-top: var(--gfw-space-3); font-size: .92rem; }
.gfw-table th, .gfw-table td { text-align: left; padding: var(--gfw-space-2) var(--gfw-space-2); border-bottom: 1px solid var(--gfw-line); vertical-align: top; overflow-wrap: anywhere; }
.gfw-table th { color: var(--gfw-ink-muted); font-weight: 600; }

/* --- Moderation area (T045) ---------------------------------------------- */

.gfw-filter-bar { margin-bottom: var(--gfw-space-4); }
.gfw-filter-bar .gfw-inline-link.is-active { text-decoration: underline; text-underline-offset: .2em; }
.gfw-moderation-head { display: grid; gap: var(--gfw-space-4); }
.gfw-moderation-actions { display: grid; gap: var(--gfw-space-4); align-items: start; }
@media (min-width: 768px) { .gfw-moderation-actions { grid-template-columns: auto minmax(0, 1fr); } }
.gfw-moderation-reject { display: grid; gap: var(--gfw-space-3); max-width: 40rem; }
.gfw-moderation-snapshot { margin-top: var(--gfw-space-5); border-top: 1px solid var(--gfw-line); }

/* --- Administration area (T046) ------------------------------------------ */

.gfw-admin-search { display: grid; gap: var(--gfw-space-3); align-items: end; margin-bottom: var(--gfw-space-4); }
@media (min-width: 576px) { .gfw-admin-search { grid-template-columns: minmax(0, 24rem) auto; } }
.gfw-admin-filters { display: grid; gap: var(--gfw-space-3); align-items: end; margin-bottom: var(--gfw-space-3); }
@media (min-width: 768px) { .gfw-admin-filters { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (min-width: 1200px) { .gfw-admin-filters { grid-template-columns: repeat(5, minmax(0, 1fr)) auto; } }
.gfw-admin-capabilities { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--gfw-space-3); }
.gfw-admin-capability { display: grid; gap: var(--gfw-space-2); padding: var(--gfw-space-3) 0; border-top: 1px solid var(--gfw-line); }
@media (min-width: 576px) { .gfw-admin-capability { grid-template-columns: minmax(0, 1fr) auto; align-items: center; } }
.gfw-admin-capability p { margin: 0; }
.gfw-table-wrap { overflow-x: auto; }
.gfw-table-wrap .gfw-table { min-width: 56rem; } /* dense data table: scrolls inside its panel on narrow screens instead of collapsing the columns */
.gfw-table-wrap .gfw-table time { white-space: nowrap; }
.gfw-table .gfw-inline-link { display: inline-block; padding-block: .25rem; } /* 24px minimum target inside dense rows */
.gfw-pager { display: flex; flex-wrap: wrap; align-items: center; gap: var(--gfw-space-3); margin-top: var(--gfw-space-3); }

/* --- Policy dialog (hosted policies without leaving the site) ------------- */

.gfw-policy-dialog { width: min(100vw - 2rem, 980px); max-width: none; height: min(100vh - 2rem, 900px); max-height: none; padding: var(--gfw-space-3); border: 0; border-radius: var(--gfw-radius-m); background: #0f1a24; color: var(--gfw-on-dark); display: none; grid-template-rows: auto minmax(0, 1fr); gap: var(--gfw-space-2); }
.gfw-policy-dialog[open] { display: grid; }
.gfw-policy-dialog::backdrop { background: rgba(8, 14, 20, .85); }
.gfw-policy-dialog__title { margin: 0; font-size: 1.05rem; font-weight: 700; }
.gfw-policy-dialog__actions { display: flex; align-items: center; gap: var(--gfw-space-2); }
.gfw-policy-dialog__body { min-height: 0; border-radius: var(--gfw-radius-s); background: #fff; overflow: hidden; }
.gfw-policy-dialog__frame { display: block; width: 100%; height: 100%; border: 0; }
@media (max-width: 575.98px) { .gfw-policy-dialog { width: 100vw; height: 100vh; max-height: 100vh; border-radius: 0; padding: var(--gfw-space-2); } }

/* --- Waypoint picker (position chosen on the map) ------------------------- */

.gfw-waypoint-pick { align-items: flex-start; }
.gfw-waypoint-pick .gfw-field__help { flex: 1 1 14rem; }
.gfw-waypoint-pick__status { font-size: .9rem; }
.gfw-draft-map.is-picking-waypoint .maplibregl-canvas { cursor: crosshair; }
.gfw-draft-map.is-picking-waypoint .gfw-draft-map__canvas { outline: 3px dashed #ff6b6b; outline-offset: -3px; }
.gfw-pick-marker-anchor { width: 26px; height: 26px; }
.gfw-pick-marker { width: 26px; height: 26px; border-radius: 50%; background: rgba(255, 107, 107, .35); border: 3px dashed #ff6b6b; box-shadow: 0 0 0 2px #14202b; cursor: grab; position: relative; }
.gfw-pick-marker::after { content: ""; position: absolute; inset: 7px; border-radius: 50%; background: #ff6b6b; border: 2px solid #fff; }
.gfw-draft-map.is-dragging-waypoint .gfw-pick-marker { cursor: grabbing; }
@media (prefers-reduced-motion: no-preference) {
  .gfw-draft-map.is-picking-waypoint .gfw-pick-marker { animation: gfw-pick-pulse 1.4s ease-in-out infinite; }
  @keyframes gfw-pick-pulse { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.15); } }
}
