/* Realizacje (moduł gfrealizacje) — makiety Kingi „Zakładka Realizacje”, „Karta Obiektu”, „Przycisk Zobacz Realizacje” (02.10.2026).
   Pasy na całą szerokość jak w gfserwis: margin-inline calc(50% - 50vw) + padding-inline calc(50vw - 50%). Czcionka = motyw (DM Sans). */
body:is(.module-gfrealizacje-main,.module-gfrealizacje-all,.module-gfrealizacje-item) { overflow-x: clip; }
.gfr { --gfr-ink: #111; --gfr-muted: #666; --gfr-red: var(--primary, #d50000); --gfr-dark: #0b0909; --gfr-light: #f4f4f4; --gfr-line: #e2e2e2;
  position: relative; color: var(--gfr-ink); }
.gfr--item, .gfr:not(.gfr-home) { margin-bottom: -48px; } /* -48 px = dolny padding <main> motywu */
.gfr *, .gfr *::before, .gfr *::after { box-sizing: border-box; }
.gfr [hidden] { display: none !important; }
.gfr svg { fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.gfr ul, .gfr ol { list-style: none; margin: 0; padding: 0; }
.gfr img { display: block; max-width: 100%; }

/* ---------- wspólne ---------- */
.gfr-band { margin: 0 calc(50% - 50vw); padding-left: calc(50vw - 50%); padding-right: calc(50vw - 50%); }
.gfr-eyebrow { margin: 0 0 8px; font-size: 13px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: #d6cfd0; }
.gfr-eyebrow--red { color: var(--gfr-red); }
.gfr-h2 { margin: 0 0 14px; font-size: clamp(24px, 2.6vw, 34px); line-height: 1.1; font-weight: 700; text-transform: uppercase; color: var(--gfr-ink); }
.gfr-h2--light { color: #fff; }
.gfr-h2--center { text-align: center; }
.gfr-center { text-align: center; margin: 28px 0 0; }
.gfr .gfr-btn { display: inline-flex; align-items: center; gap: 10px; padding: 13px 26px; border-radius: 3px; font-size: 13.5px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; text-decoration: none; border: 1.5px solid transparent; cursor: pointer; transition: background .15s ease, color .15s ease, border-color .15s ease; }
.gfr .gfr-btn svg { width: 18px; height: 18px; }
.gfr .gfr-btn--red { background: var(--gfr-red); color: #fff; }
.gfr .gfr-btn--red:hover { background: #e81919; color: #fff; }
.gfr .gfr-btn--dark { background: var(--gfr-dark); color: #fff; }
.gfr .gfr-btn--dark:hover { background: #2a2424; color: #fff; }
.gfr .gfr-btn--outline { background: #fff; color: var(--gfr-ink); border-color: var(--gfr-ink); }
.gfr .gfr-btn--outline:hover { background: var(--gfr-ink); color: #fff; }
.gfr .gfr-btn--outline-dark { background: transparent; color: var(--gfr-ink); border-color: rgba(0, 0, 0, .7); }
.gfr .gfr-btn--outline-dark:hover { background: var(--gfr-ink); color: #fff; }
.gfr .gfr-btn--big { padding: 16px 34px; font-size: 15px; }
.gfr-card-noimg { display: block; width: 100%; height: 100%; min-height: 160px; background: repeating-linear-gradient(45deg, #2a2424 0 12px, #1d1818 12px 24px); }

/* ---------- hero ---------- */
.gfr-hero { position: relative; margin: 0 calc(50% - 50vw); padding: 64px calc(50vw - 50%) 60px; background: var(--gfr-dark) var(--gfr-hero) right center / cover no-repeat; color: #fff; isolation: isolate; min-height: 300px; display: flex; align-items: center; }
.gfr-hero::before { content: ""; position: absolute; inset: 0; z-index: -1; background: linear-gradient(90deg, rgba(8, 6, 6, .96) 0%, rgba(8, 6, 6, .9) 38%, rgba(8, 6, 6, .45) 68%, rgba(8, 6, 6, .2) 100%); }
.gfr-hero-in { max-width: 640px; }
.gfr-hero-title { position: relative; margin: 0 0 18px; padding-bottom: 14px; font-size: clamp(32px, 4.4vw, 58px); line-height: 1; font-weight: 800; letter-spacing: -.01em; text-transform: uppercase; color: #fff; }
.gfr-hero-title::after { content: ""; position: absolute; left: 0; bottom: 0; width: 64px; height: 4px; background: var(--gfr-red); }
.gfr-hero-city { display: flex; align-items: center; gap: 8px; margin: -6px 0 14px; font-size: 16px; font-weight: 600; color: #fff; }
.gfr-hero-city svg { width: 22px; height: 22px; color: var(--gfr-red); }
.gfr-hero-lead { margin: 0 0 26px; font-size: 15.5px; line-height: 1.6; color: #e9e3e4; max-width: 58ch; }


/* ---------- hero pod nagłówkiem, jak na stronie głównej (uwaga Andrzeja 15.10.2026) ----------
   Baner wjeżdża pod sticky nagłówek (110 / 62 / 56 px jak w header-v2.css) i pod górny padding <main> motywu (48 / 24 px —
   dawało biały pas); nagłówek przezroczysty, dopóki header-v2.js nie doda hdr2--scrolled. Wzór: gfserwis.css. */
.gfr-hero { --gf-hdr: 110px; --gf-mainpad: 48px; margin-top: calc(-1 * (var(--gf-hdr) + var(--gf-mainpad))); padding-top: calc(64px + var(--gf-hdr)); min-height: calc(300px + var(--gf-hdr)); }
.gfr-hero::after { content: ""; position: absolute; left: 0; right: 0; top: 0; height: calc(var(--gf-hdr) + 70px); z-index: -1; pointer-events: none; background: linear-gradient(180deg, rgba(8, 6, 6, .9) 0%, rgba(8, 6, 6, .78) 40%, rgba(8, 6, 6, .4) 75%, rgba(8, 6, 6, 0) 100%); }
body:is(.module-gfrealizacje-main,.module-gfrealizacje-all,.module-gfrealizacje-item) .hdr2 .hdr2-top, body:is(.module-gfrealizacje-main,.module-gfrealizacje-all,.module-gfrealizacje-item) .hdr2 .hdr2-main { transition: background-color .25s ease, transform .25s ease; }
body:is(.module-gfrealizacje-main,.module-gfrealizacje-all,.module-gfrealizacje-item) .hdr2:not(.hdr2--scrolled) .hdr2-top, body:is(.module-gfrealizacje-main,.module-gfrealizacje-all,.module-gfrealizacje-item) .hdr2:not(.hdr2--scrolled) .hdr2-main { background-color: transparent; }
@media (max-width: 1199.98px) { .gfr-hero { --gf-hdr: 62px; } .gfr-hero::after { height: calc(var(--gf-hdr) + 16px); background: linear-gradient(180deg, rgba(8, 6, 6, .85) 0%, rgba(8, 6, 6, .7) 70%, rgba(8, 6, 6, 0) 100%); } }
@media (max-width: 767.98px) { .gfr-hero { --gf-mainpad: 24px; padding-top: calc(44px + var(--gf-hdr)); } }
@media (max-width: 575.98px) { .gfr-hero { --gf-hdr: 56px; } }

/* ---------- proces ---------- */
.gfr-process { margin: 0 calc(50% - 50vw); padding: 56px calc(50vw - 50%) 56px; background: #fff; }
.gfr-process-lead { max-width: 820px; margin: -4px auto 30px; text-align: center; font-size: 14.5px; line-height: 1.55; color: var(--gfr-muted); }
.gfr-steps { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 0; padding: 30px 14px; border: 1px solid var(--gfr-line); box-shadow: 0 8px 24px rgba(0, 0, 0, .06); background: #fff; }
.gfr-step { position: relative; display: grid; justify-items: center; align-content: start; gap: 10px; padding: 0 16px; text-align: center; }
.gfr-step + .gfr-step::before { content: ""; position: absolute; left: -7px; top: 28px; width: 10px; height: 10px; border-right: 2.5px solid var(--gfr-red); border-bottom: 2.5px solid var(--gfr-red); transform: rotate(-45deg); }
.gfr-step-ic { width: 60px; height: 60px; color: var(--gfr-ink); }
.gfr-step-ic svg { width: 60px; height: 60px; stroke-width: 1.3; }
.gfr-step-title { font-size: 13px; font-weight: 800; letter-spacing: .04em; text-transform: uppercase; line-height: 1.25; }
.gfr-step-title::after { content: ""; display: block; width: 36px; height: 1px; margin: 10px auto 0; background: #cfcfcf; }
.gfr-step-desc { font-size: 12px; line-height: 1.4; color: var(--gfr-muted); }

/* ---------- kafle ---------- */
.gfr-cards { margin: 0 calc(50% - 50vw); padding: 56px calc(50vw - 50%) 56px; background: var(--gfr-light); }
.gfr-cards--all { padding-top: 40px; }
.gfr-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 22px; }
.gfr-grid--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 18px; }
.gfr-grid--home { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 18px; }
.gfr-card { position: relative; }
.gfr .gfr-card-in { position: relative; display: block; overflow: hidden; border-radius: 3px; background: #000; color: #fff; text-decoration: none; border: 1px solid #221c1c; transition: border-color .2s ease, transform .2s ease; }
.gfr-card-img { position: relative; display: block; aspect-ratio: 3 / 2; overflow: hidden; }
.gfr-card-img img { width: 100%; height: 100%; object-fit: cover; transition: transform .4s ease; }
.gfr-card-img::after { content: ""; position: absolute; inset: 0; pointer-events: none; background: linear-gradient(0deg, rgba(8, 6, 6, .92) 0%, rgba(8, 6, 6, .5) 38%, rgba(8, 6, 6, 0) 62%); }
.gfr-card-txt { position: absolute; left: 16px; right: 60px; bottom: 14px; z-index: 1; display: grid; gap: 5px; }
.gfr-card-name { font-size: 15px; font-weight: 800; letter-spacing: .03em; text-transform: uppercase; color: #fff; }
.gfr-card-meta { display: flex; flex-wrap: wrap; gap: 6px 16px; font-size: 13px; color: #e6e0e1; }
.gfr-card-meta span { display: inline-flex; align-items: center; gap: 5px; }
.gfr-card-meta svg { width: 15px; height: 15px; color: var(--gfr-red); }
.gfr-card-quote { font-size: 12.5px; line-height: 1.4; font-style: italic; color: #d6cfd0; }
.gfr-card-arrow { position: absolute; right: 14px; bottom: 14px; z-index: 1; display: grid; place-items: center; width: 38px; height: 38px; border-radius: 50%; background: var(--gfr-red); color: #fff; transition: transform .2s ease; }
.gfr-card-arrow svg { width: 20px; height: 20px; stroke-width: 2.2; }
.gfr .gfr-card-in:hover { border-color: var(--gfr-red); }
.gfr-card-in:hover .gfr-card-img img { transform: scale(1.05); }
.gfr-card-in:hover .gfr-card-arrow { transform: translateX(3px); }
.gfr .gfr-card-in:focus-visible { outline: 2px solid var(--gfr-red); outline-offset: 2px; }

/* ---------- paginacja ---------- */
.gfr-pager { display: flex; justify-content: center; align-items: center; gap: 14px; margin-top: 28px; font-size: 15px; }
.gfr .gfr-pager-btn { display: inline-grid; place-items: center; width: 36px; height: 36px; border-radius: 50%; border: 0; background: var(--gfr-red); color: #fff; cursor: pointer; text-decoration: none; }
.gfr .gfr-pager-btn svg { width: 20px; height: 20px; stroke-width: 2.2; }
.gfr .gfr-pager-btn.is-off { background: #cfcfcf; cursor: default; }
.gfr .gfr-pager-btn:hover:not(.is-off) { background: #e81919; }

/* ---------- case study ---------- */
.gfr-case { margin: 0 calc(50% - 50vw); padding: 60px calc(50vw - 50%); background: var(--gfr-dark); color: #fff; }
.gfr-case-in { display: grid; grid-template-columns: minmax(280px, 5fr) 7fr; gap: 40px; align-items: center; }
.gfr-case-title { margin: 0 0 16px; font-size: clamp(26px, 3vw, 40px); line-height: 1.05; font-weight: 800; color: #fff; }
.gfr-case-lead { margin: 0 0 24px; font-size: 15px; line-height: 1.55; color: #d6cfd0; }
.gfr-facts { display: grid; grid-template-columns: 1fr 1fr; gap: 18px 24px; margin: 0 0 28px; }
.gfr-facts li { display: flex; align-items: center; gap: 12px; }
.gfr-facts svg { width: 36px; height: 36px; flex: none; color: var(--gfr-red); stroke-width: 1.5; }
.gfr-facts span { display: grid; font-size: 15px; font-weight: 700; }
.gfr-facts small { font-size: 12.5px; font-weight: 400; color: #bdb5b6; }
.gfr-case-big { position: relative; aspect-ratio: 16 / 10; overflow: hidden; border-radius: 3px; background: #000; }
.gfr-case-big img { width: 100%; height: 100%; object-fit: cover; }
.gfr-case-thumbs { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-top: 12px; }
.gfr-case-thumbs li { display: grid; gap: 6px; text-align: center; }
.gfr-case-thumbs img, .gfr-case-thumbs .gfr-card-noimg { width: 100%; aspect-ratio: 3 / 2; min-height: 0; object-fit: cover; border-radius: 3px; }
.gfr-case-thumbs small { font-size: 11px; letter-spacing: .08em; text-transform: uppercase; color: #bdb5b6; }
.gfr-case-big > a, .gfr-case-thumbs a { position: relative; display: block; cursor: zoom-in; overflow: hidden; border-radius: 3px; }
.gfr-case-big > a { height: 100%; }
.gfr-case-thumbs a img { display: block; }
.gfr-case-big > a img, .gfr-case-thumbs a img { transition: transform .35s ease; }
.gfr-case-big > a:hover img, .gfr-case-thumbs a:hover img { transform: scale(1.04); }
.gfr-zoom { position: absolute; right: 10px; bottom: 10px; width: 36px; height: 36px; display: grid; place-items: center; border-radius: 50%; background: rgba(0, 0, 0, .55); color: #fff; opacity: .85; transition: opacity .2s ease, background .2s ease; pointer-events: none; }
.gfr-case-thumbs .gfr-zoom { width: 30px; height: 30px; right: 8px; bottom: 8px; opacity: 0; }
.gfr-case-big > a:hover .gfr-zoom, .gfr-case-thumbs a:hover .gfr-zoom, .gfr-case-thumbs a:focus-visible .gfr-zoom { opacity: 1; background: var(--primary, #d50000); }
@media (hover: none) { .gfr-case-thumbs .gfr-zoom { opacity: .85; } }
.gfr-zoom svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 2.2; stroke-linecap: round; }

/* ---------- liczby ---------- */
.gfr-numbers { margin: 0 calc(50% - 50vw); padding: 52px calc(50vw - 50%) 48px; background: #fff; }
.gfr-numbers-list { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 24px; text-align: center; }
.gfr-numbers-list li { display: grid; justify-items: center; gap: 8px; }
.gfr-numbers-ic { width: 64px; height: 64px; color: var(--gfr-ink); } /* 22.10.2026: liczby i ikony czarne (Andrzej) */
.gfr-numbers-ic svg { width: 64px; height: 64px; stroke-width: 1.4; }
.gfr-numbers-val { font-size: clamp(26px, 3vw, 36px); line-height: 1; font-weight: 800; color: var(--gfr-ink); }
.gfr-numbers-lab { font-size: 14px; line-height: 1.35; color: var(--gfr-ink); max-width: 18ch; }

/* ---------- mapa ---------- */
.gfr-map { margin: 0 calc(50% - 50vw); padding: 56px calc(50vw - 50%); background: var(--gfr-dark); color: #fff; }
.gfr-map-in { display: grid; grid-template-columns: minmax(260px, 4fr) 7fr; gap: 40px; align-items: center; }
.gfr-map-sub { margin: 0 0 14px; font-size: 17px; font-weight: 700; color: #fff; }
.gfr-map-note { margin: 0 0 10px; font-size: 13px; line-height: 1.5; color: #bdb5b6; }
.gfr .gfr-map-btn { margin-top: 24px; }
.gfr-map-box { position: relative; }
.gfr-map-stage { position: relative; width: 100%; max-width: 448px; margin: 0 auto; } /* 22.10.2026: mapa o 30% mniejsza (było 640) */
.gfr-map-stage > svg { display: block; width: 100%; height: auto; filter: drop-shadow(0 10px 30px rgba(0, 0, 0, .45)); }
.gfr .gfr-pin { position: absolute; display: block; width: 26px; height: 26px; margin: -26px 0 0 -13px; padding: 0; border: 0; background: transparent; color: var(--gfr-red); cursor: pointer; text-decoration: none; transition: transform .15s ease; }
.gfr .gfr-pin svg { width: 26px; height: 26px; fill: var(--gfr-red); stroke: #fff; stroke-width: 1.2; filter: drop-shadow(0 2px 3px rgba(0, 0, 0, .4)); }
.gfr .gfr-pin svg circle { fill: #fff; stroke: none; }
.gfr .gfr-pin:hover, .gfr .gfr-pin.is-active { transform: scale(1.25); z-index: 3; }
.gfr .gfr-pin.is-active svg { fill: #111; }
.gfr-map-pop { position: absolute; z-index: 5; width: 230px; margin: 4px 0 0 14px; padding: 8px; background: #000; border: 1px solid #333; border-radius: 3px; box-shadow: 0 10px 30px rgba(0, 0, 0, .6); display: grid; gap: 4px; pointer-events: auto; }
.gfr-map-pop.is-left { margin-left: -244px; }
.gfr-map-pop.is-up { transform: translateY(calc(-100% - 30px)); }
.gfr-map-pop-img { width: 100%; aspect-ratio: 3 / 2; object-fit: cover; border-radius: 2px; margin-bottom: 4px; }
.gfr-map-pop-name { font-size: 13px; font-weight: 800; text-transform: uppercase; color: #fff; }
.gfr-map-pop-addr { font-size: 11.5px; color: #bdb5b6; }
.gfr .gfr-map-pop-link { display: inline-flex; align-items: center; gap: 6px; margin-top: 4px; font-size: 12px; font-weight: 700; color: var(--gfr-red); text-decoration: none; }
.gfr .gfr-map-pop-link svg { width: 16px; height: 16px; }

/* ---------- opinie ---------- */
.gfr-opinions { margin: 0 calc(50% - 50vw); padding: 56px calc(50vw - 50%); background: #fff; }
.gfr-slider { position: relative; padding: 0 56px; }
.gfr-opinions-list { display: grid; grid-auto-flow: column; grid-auto-columns: calc((100% - 48px) / 3); gap: 24px; overflow-x: auto; scroll-snap-type: x mandatory; scrollbar-width: none; padding: 6px 2px 10px; }
.gfr-opinions-list::-webkit-scrollbar { display: none; }
.gfr-opinion { scroll-snap-align: start; display: grid; grid-template-rows: auto 1fr auto; background: var(--gfr-light); border: 1px solid var(--gfr-line); border-radius: 3px; overflow: hidden; box-shadow: 0 6px 18px rgba(0, 0, 0, .06); }
.gfr-opinions--single .gfr-opinions-list { grid-auto-columns: minmax(0, 760px); justify-content: center; }
.gfr .gfr-opinions--single .gfr-slider-btn { display: none; }
.gfr-opinion-img { aspect-ratio: 16 / 7; overflow: hidden; background: #000; }
.gfr-opinion-img img { width: 100%; height: 100%; object-fit: cover; }
.gfr-opinion-body { padding: 18px 18px 6px; }
.gfr-opinion-text { margin: 0; font-size: 13.5px; line-height: 1.55; color: var(--gfr-ink); display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 6; line-clamp: 6; overflow: hidden; }
.gfr .gfr-opinion-more { margin-top: 8px; padding: 0; border: 0; background: none; color: var(--gfr-red); font-size: 13px; font-weight: 700; cursor: pointer; text-decoration: underline; }
.gfr-omodal { position: fixed; inset: 0; z-index: 9999; display: flex; align-items: center; justify-content: center; padding: 16px; background: rgba(8, 6, 6, .8); }
.gfr-omodal[hidden] { display: none; }
.gfr-omodal-box { position: relative; width: min(640px, 100%); max-height: calc(100vh - 32px); overflow: auto; background: #fff; border-radius: 4px; padding: 28px 26px 22px; }
.gfr-omodal-box .gfr-opinion-text { display: block; -webkit-line-clamp: unset; line-clamp: unset; font-size: 15px; }
.gfr-omodal-box .gfr-opinion-foot { padding: 16px 0 0; }
.gfr .gfr-omodal-close { position: absolute; top: 6px; right: 10px; border: 0; background: none; font-size: 30px; line-height: 1; cursor: pointer; color: var(--gfr-ink); }
.gfr-opinion-foot { display: flex; align-items: center; gap: 12px; padding: 10px 18px 18px; }
.gfr-opinion-avatar { display: grid; place-items: center; width: 46px; height: 46px; border-radius: 50%; background: var(--gfr-dark); color: #fff; font-size: 15px; font-weight: 800; flex: none; }
.gfr-opinion-who { display: grid; gap: 1px; font-size: 13px; }
.gfr-opinion-who small { font-size: 12px; color: var(--gfr-muted); }
.gfr-stars { display: inline-flex; gap: 2px; margin-top: 3px; }
.gfr .gfr-stars svg { width: 15px; height: 15px; fill: #ddd; stroke: none; }
.gfr .gfr-stars svg.is-on { fill: #f5b400; }
.gfr .gfr-slider-btn { position: absolute; top: 50%; transform: translateY(-50%); display: grid; place-items: center; width: 40px; height: 40px; border-radius: 50%; border: 0; background: var(--gfr-red); color: #fff; cursor: pointer; }
.gfr .gfr-slider-btn svg { width: 22px; height: 22px; stroke-width: 2.2; }
.gfr .gfr-slider-btn--prev { left: 0; }
.gfr .gfr-slider-btn--next { right: 0; }

/* ---------- CTA ---------- */
.gfr-cta { position: relative; margin: 0 calc(50% - 50vw); padding: 72px calc(50vw - 50%); background: var(--gfr-dark) var(--gfr-cta) right center / cover no-repeat; color: #fff; isolation: isolate; }
.gfr-cta::before { content: ""; position: absolute; inset: 0; z-index: -1; background: linear-gradient(90deg, rgba(8, 6, 6, .97) 0%, rgba(8, 6, 6, .9) 45%, rgba(8, 6, 6, .55) 75%, rgba(8, 6, 6, .35) 100%); }
.gfr-cta-in { max-width: 600px; }
.gfr-cta-title { margin: 0 0 14px; font-size: clamp(26px, 3vw, 40px); line-height: 1.05; font-weight: 800; color: #fff; }
.gfr-cta-lead { margin: 0 0 26px; font-size: 15px; line-height: 1.6; color: #e9e3e4; }
/* 22.10.2026: „Kompleksowa obsługa” w pasie CTA — kroki na ciemnym tle */
.gfr-cta-process { margin-top: 40px; }
.gfr-cta-ptitle { margin: 0 0 16px; font-size: 13px; font-weight: 800; letter-spacing: .14em; text-transform: uppercase; color: #fff; }
.gfr-steps--dark { background: rgba(8, 6, 6, .78); border-color: rgba(255, 255, 255, .16); box-shadow: none; backdrop-filter: blur(2px); }
.gfr-steps--dark .gfr-step-ic { color: #fff; }
.gfr-steps--dark .gfr-step-title { color: #fff; }
.gfr-steps--dark .gfr-step-title::after { background: rgba(255, 255, 255, .28); }
.gfr-steps--dark .gfr-step-desc { color: #cfc8c9; }

/* ---------- powrót ---------- */
.gfr-back { padding: 28px 0 36px; }

/* ---------- karta obiektu ---------- */
.gfr-factbar { margin: 0 calc(50% - 50vw); padding: 0 calc(50vw - 50%); background: #fff; border-bottom: 1px solid var(--gfr-line); }
.gfr-factbar-in { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 16px; padding: 22px 0; }
.gfr-factbar li { display: flex; align-items: center; gap: 12px; }
.gfr-factbar svg { width: 40px; height: 40px; flex: none; color: var(--gfr-ink); stroke-width: 1.4; }
.gfr-factbar span { display: grid; }
.gfr-factbar small { font-size: 12.5px; color: var(--gfr-muted); }
.gfr-factbar b { font-size: 16px; font-weight: 800; }
.gfr-gallery { padding: 44px 0 40px; }
.gfr-gallery-head { display: flex; justify-content: space-between; align-items: flex-end; gap: 20px; margin-bottom: 20px; }
.gfr-gallery-head .gfr-h2 { margin-bottom: 0; }
.gfr-gpager { display: flex; align-items: center; gap: 10px; font-size: 14px; }
/* 22.10.2026 (#5627): równa siatka 4:3 zamiast mozaiki (dziury przy różnej liczbie zdjęć); kafelek = kadr z BO (url_tile) */
.gfr-mosaic { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; }
.gfr-mosaic li { position: relative; overflow: hidden; border-radius: 3px; background: #000; aspect-ratio: 4 / 3; }
.gfr-mosaic a { display: block; width: 100%; height: 100%; }
.gfr-mosaic img { width: 100%; height: 100%; object-fit: cover; transition: transform .4s ease; }
.gfr-mosaic a:hover img { transform: scale(1.04); }
.gfr-products { padding: 10px 0 44px; }
.gfr-products-head { display: flex; justify-content: space-between; align-items: center; gap: 20px; margin-bottom: 22px; }
.gfr-products-head .gfr-h2 { margin: 0; }
.gfr-products-list { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 18px; }
.gfr .gfr-product { display: grid; gap: 12px; justify-items: center; text-align: center; color: var(--gfr-ink); text-decoration: none; }
.gfr-product-img { display: grid; place-items: center; width: 100%; aspect-ratio: 1; background: #fff; border: 1px solid var(--gfr-line); border-radius: 3px; padding: 12px; }
.gfr-product-img img { max-height: 100%; width: auto; object-fit: contain; }
.gfr-product-img svg { width: 56px; height: 56px; color: #bbb; }
.gfr-product-name { font-size: 14px; font-weight: 700; line-height: 1.3; }
.gfr a.gfr-product:hover .gfr-product-img { border-color: var(--gfr-red); }
.gfr-about { margin: 0 calc(50% - 50vw); padding: 56px calc(50vw - 50%); background: var(--gfr-dark); color: #fff; }
.gfr-about-in { display: grid; grid-template-columns: 6fr 6fr; gap: 40px; align-items: center; }
.gfr-about-body { font-size: 14.5px; line-height: 1.65; color: #d6cfd0; }
.gfr-about-body p { margin: 0 0 14px; }
.gfr-about-img { aspect-ratio: 4 / 3; overflow: hidden; border-radius: 3px; }
.gfr-about-img img { width: 100%; height: 100%; object-fit: cover; }
.gfr-video { padding: 44px 0 20px; }
.gfr-yt { position: relative; aspect-ratio: 16 / 9; max-width: 900px; margin: 0 auto; overflow: hidden; border-radius: 3px; background: #000; cursor: pointer; }
.gfr-yt img { width: 100%; height: 100%; object-fit: cover; opacity: .85; }
.gfr-yt iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }
.gfr .gfr-yt-play { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); width: 76px; height: 76px; border: 0; border-radius: 50%; background: var(--gfr-red); color: #fff; cursor: pointer; display: grid; place-items: center; }
.gfr .gfr-yt-play svg { width: 34px; height: 34px; fill: #fff; stroke: none; margin-left: 4px; }
.gfr-social { display: flex; justify-content: center; flex-wrap: wrap; gap: 14px; margin-top: 22px; }
.gfr .gfr-social a { display: inline-flex; align-items: center; gap: 8px; padding: 10px 18px; border: 1.5px solid var(--gfr-ink); border-radius: 3px; color: var(--gfr-ink); font-size: 13px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; text-decoration: none; }
.gfr .gfr-social a:hover { background: var(--gfr-ink); color: #fff; }
.gfr .gfr-social svg { width: 18px; height: 18px; }
.gfr-plan { margin: 0 calc(50% - 50vw); padding: 36px calc(50vw - 50%); background: #fff; border-top: 1px solid var(--gfr-line); }
.gfr-plan-in { display: grid; grid-template-columns: auto 1fr auto; gap: 24px; align-items: center; }
.gfr-plan-ic { width: 64px; height: 64px; color: var(--gfr-red); stroke-width: 1.4; }
.gfr-plan-title { margin: 0 0 4px; font-size: 22px; font-weight: 800; }
.gfr-plan-lead { margin: 0; font-size: 14px; color: var(--gfr-muted); }

/* ---------- lightbox ---------- */
.gfr-lb { position: fixed; inset: 0; z-index: 10000; display: grid; place-items: center; background: rgba(0, 0, 0, .94); }
.gfr-lb[hidden] { display: none; }
.gfr-lb-img { max-width: calc(100vw - 32px); max-height: calc(100vh - 32px); max-height: calc(100dvh - 32px); object-fit: contain; }
.gfr-lb button { position: absolute; border: 0; background: rgba(255, 255, 255, .12); color: #fff; cursor: pointer; display: grid; place-items: center; border-radius: 50%; }
.gfr-lb button:hover { background: var(--primary, #d50000); }
.gfr-lb-close { top: 14px; right: 14px; width: 44px; height: 44px; font-size: 30px; line-height: 1; }
.gfr-lb-nav { top: 50%; transform: translateY(-50%); width: 48px; height: 48px; }
.gfr-lb-nav svg { width: 26px; height: 26px; fill: none; stroke: currentColor; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; }
.gfr-lb-prev { left: 14px; }
.gfr-lb-next { right: 14px; }
.gfr-lb-count { position: absolute; bottom: 14px; left: 50%; transform: translateX(-50%); display: flex; gap: 14px; color: #ccc; font-size: 13px; white-space: nowrap; }
[data-gfr-lb-cap] { text-transform: uppercase; letter-spacing: .08em; color: #fff; }
[data-gfr-lb-cap]:empty, [data-gfr-lb-count]:empty { display: none; }
.gfr-lb.is-single .gfr-lb-nav { display: none; }
body.gfr-lb-open { overflow: hidden; }

/* ---------- strona główna: „Realizacje, które robią różnicę” (makieta V7 06: czarny moduł, karuzela kart) ---------- */
.gfr-home { background: var(--gfr-dark); color: #fff; }
.gfr-home-in { padding-top: 48px; padding-bottom: 48px; }
.gfr-home-head { display: flex; justify-content: space-between; align-items: center; gap: 24px; margin-bottom: 22px; }
.gfr-home-title { margin: 0; font-size: clamp(20px, 1.9vw, 26px); line-height: 1.15; font-weight: 700; letter-spacing: .02em; text-transform: uppercase; color: #fff; }
.gfr .gfr-home-all { display: inline-flex; align-items: center; gap: 8px; font-size: 12.5px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: #fff; text-decoration: none; white-space: nowrap; }
.gfr .gfr-home-all svg { width: 18px; height: 18px; stroke-width: 2.2; transition: transform .2s ease; }
.gfr .gfr-home-all:hover { color: var(--gfr-red); }
.gfr .gfr-home-all:hover svg { transform: translateX(4px); }
.gfr-home-slider { padding: 0; position: relative; }
.gfr-hcards { display: grid; grid-auto-flow: column; grid-auto-columns: calc((100% - 56px) / 5); gap: 14px; overflow-x: auto; scroll-snap-type: x mandatory; scrollbar-width: none; padding-bottom: 4px; scroll-behavior: smooth; }
.gfr-hcards::-webkit-scrollbar { display: none; }
.gfr-hcard { scroll-snap-align: start; display: grid; grid-template-rows: auto 1fr; background: #171212; border: 1px solid #2a2323; border-radius: 3px; overflow: hidden; transition: border-color .2s ease; }
.gfr-hcard:hover { border-color: var(--gfr-red); }
.gfr .gfr-hcard-img { position: relative; display: block; aspect-ratio: 3 / 2; overflow: hidden; background: #000; }
.gfr-hcard-img img { width: 100%; height: 100%; object-fit: cover; transition: transform .4s ease; }
.gfr-hcard:hover .gfr-hcard-img img { transform: scale(1.05); }
.gfr-hcard-badge { position: absolute; top: 10px; left: 10px; padding: 4px 8px; border-radius: 3px; background: var(--gfr-red); color: #fff; font-size: 12px; font-weight: 700; }
.gfr-hcard-txt { display: grid; grid-template-rows: auto auto 1fr auto; gap: 4px; padding: 12px 14px 14px; } /* link zawsze na dole karty = w jednej linii we wszystkich kartach */
.gfr-hcard-name { margin: 0; font-size: 14px; line-height: 1.2; font-weight: 800; letter-spacing: .03em; text-transform: uppercase; }
.gfr .gfr-hcard-name a { color: #fff; text-decoration: none; }
.gfr-hcard-city { margin: 0; font-size: 12.5px; color: #bdb5b6; }
.gfr-hcard-quote-wrap { display: grid; align-content: start; gap: 2px; min-height: 0; }
.gfr-hcard-quote { margin: 6px 0 0; font-size: 12.5px; line-height: 1.45; font-style: italic; color: #d6cfd0; display: -webkit-box; -webkit-line-clamp: 4; -webkit-box-orient: vertical; overflow: hidden; }
.gfr-hcard-author { margin: 0; font-size: 12px; color: #bdb5b6; }
.gfr .gfr-hcard-link { display: inline-flex; align-items: center; gap: 8px; margin-top: 10px; font-size: 11.5px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--gfr-red); text-decoration: none; align-self: end; }
.gfr .gfr-hcard-link svg { width: 16px; height: 16px; stroke-width: 2.2; }
.gfr .gfr-hcard-link:hover { color: #fff; }
.gfr-home .gfr-slider-btn { display: none; top: 33%; width: 40px; height: 40px; background: var(--gfr-red); color: #fff; box-shadow: 0 4px 14px rgba(0, 0, 0, .5); z-index: 2; }
.gfr-home .gfr-slider-btn:hover { background: #e81919; }
.gfr-home .gfr-slider-btn--prev { left: -16px; }
.gfr-home .gfr-slider-btn--next { right: -16px; }
.gfr-home-slider.is-scrollable .gfr-slider-btn { display: grid; }
.gfr-home-more { display: none; margin: 22px 0 0; text-align: center; }

/* ---------- responsywność ---------- */
@media (max-width: 1199.98px) {
  .gfr-steps { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 28px 0; }
  .gfr-step + .gfr-step::before { display: none; }
  .gfr-grid--4 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .gfr-hcards { grid-auto-columns: calc((100% - 28px) / 3); }
  .gfr-products-list { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .gfr-opinions-list { grid-auto-columns: calc((100% - 24px) / 2); }
  .gfr-factbar-in { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 991.98px) {
  .gfr-case-in, .gfr-map-in, .gfr-about-in { grid-template-columns: 1fr; gap: 28px; }
  .gfr-map-stage { max-width: 392px; }
  .gfr-mosaic { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .gfr-plan-in { grid-template-columns: auto 1fr; }
  .gfr-plan-in .gfr-btn { grid-column: 1 / -1; justify-self: start; }
}
@media (max-width: 767.98px) {
  .gfr-hero { padding-bottom: 40px; min-height: 0; } /* 22.10.2026: bez padding-top — nadpisywał calc(44px + nagłówek) z góry pliku, tekst wchodził pod przezroczysty nagłówek */
  .gfr-hero::before { background: linear-gradient(0deg, rgba(8, 6, 6, .97) 0%, rgba(8, 6, 6, .85) 60%, rgba(8, 6, 6, .55) 100%); }
  .gfr-process, .gfr-cards, .gfr-case, .gfr-numbers, .gfr-map, .gfr-opinions, .gfr-about { padding-top: 40px; padding-bottom: 40px; }
  .gfr-steps { grid-template-columns: repeat(2, minmax(0, 1fr)); padding: 22px 6px; }
  .gfr-step { padding: 0 8px; }
  .gfr-grid, .gfr-grid--4 { grid-template-columns: 1fr; gap: 14px; }
  .gfr-numbers-list { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 28px 12px; }
  .gfr-facts { grid-template-columns: 1fr; }
  .gfr-slider { padding: 0; }
  .gfr .gfr-slider-btn { display: none; }
  .gfr-opinions-list { grid-auto-columns: 86%; }
  .gfr-factbar-in { grid-template-columns: 1fr; gap: 12px; padding: 16px 0; }
  .gfr-gallery-head { flex-direction: column; align-items: flex-start; }
  .gfr-mosaic { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; }
  .gfr-products-head { flex-direction: column; align-items: flex-start; }
  .gfr-products-list { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .gfr-plan-in { grid-template-columns: 1fr; }
  .gfr-plan-ic { display: none; }
  .gfr-map-pop { width: 200px; }
  .gfr-home-in { padding-top: 36px; padding-bottom: 36px; }
  .gfr-home-head .gfr-home-all { display: none; }
  .gfr-home-more { display: block; }
  .gfr-hcards { grid-auto-columns: 78%; }
  .gfr-home .gfr-slider-btn { display: none !important; }
}
