﻿/* =============================================================================
   Strony WWW Pomorze - system wizualny
   Zrodlo prawdy: brandbook-strony-www-pomorze.html (Ksiega identyfikacji, v1.0)

   Kolejnosc sekcji:
   01 Tokeny        02 Reset        03 Typografia    04 Uklad
   05 Przyciski     06 Tagi         07 Karty         08 Formularze
   09 Dekoracje     10 Naglowek     11 Hero          12 Sekcje tresci
   13 Realizacje    14 Mockupy      15 Proces        16 Opinie
   17 FAQ           18 CTA          19 Stopka        20 Utility
   ========================================================================== */

/* -----------------------------------------------------------------------------
   01 TOKENY
   Paleta zamknieta. Kolor spoza tej listy nie ma prawa pojawic sie na stronie.
-------------------------------------------------------------------------- */
:root{
  /* Paleta podstawowa */
  --indygo:#5D5FAC;
  --indygo-deep:#51539E;
  --grafit:#111111;
  --biel:#FFFFFF;

  /* Paleta uzupelniajaca */
  --fiolet:#6A408D;
  --indygo-light:#9B9CDB;
  --mgla:#C3C4EA;
  --lawenda:#EFF0FA;
  --szary:#818183;
  --separator:#E6E6E6;

  /* Tekst - grafit niesie cala tresc, odcienie tylko dla hierarchii */
  --tekst:#111111;
  --tekst-2:#3d3d45;
  --tekst-3:#4a4a52;

  /* Stany semantyczne (z brandbooka, sekcja "tak/nie") */
  --ok:#1F9D63;
  --ok-bg:#E4F3EB;
  --ok-ink:#12703F;

  /* Jasne odcienie zieleni marki - pod pływający przycisk telefonu na mobile.
     Ma się wyróżniać na tle indygo, a nie wtapiać w nie. Napis jest grafitowy,
     nie biały: biel na tak jasnej zieleni daje kontrast poniżej 2:1
     i przy 15 px robi się nieczytelna w słońcu. Grafit daje ok. 8:1. */
  --zielen-jasna:#34C77F;
  --zielen-jasna-hover:#2BB673;
  --err:#D0433C;
  --err-bg:#FBE6E5;
  --err-ink:#9B2C26;

  /* Typografia */
  --sans:'Ubuntu', system-ui, -apple-system, 'Segoe UI', sans-serif;
  --text:'Roboto', system-ui, -apple-system, 'Segoe UI', sans-serif;

  /* Skala typograficzna - zamknieta, desktop */
  --h1:56px;   --h1-lh:1.1;   --h1-ls:-0.02em;
  --h2:40px;   --h2-lh:1.15;  --h2-ls:-0.01em;
  --h3:28px;   --h3-lh:1.25;
  --h4:20px;   --h4-lh:1.3;
  --nad:13px;  --nad-ls:0.18em;
  --lead:20px; --lead-lh:1.65;
  --body:17px; --body-lh:1.7;
  --small:14px;--small-lh:1.6;
  --btn:16px;

  /* Geometria - oszczedna: 4 px pola i przyciski, 8 px karty */
  --r-pole:4px;
  --r-karta:8px;
  --r-pigulka:999px;

  /* Rytm pionowy */
  --sekcja:96px;
  --sekcja-sm:64px;
  --gap:32px;

  /* Szerokosci */
  --kontener:1200px;
  --kontener-waski:820px;
  --miara:70ch;      /* dlugosc wiersza 60-75 znakow */

  /* Cien tylko na hoverze */
  --cien-hover:0 8px 24px rgba(93,95,172,.18);
  --cien-modal:0 24px 80px rgba(17,17,17,.35);

  /* Naglowek */
  --naglowek-h:84px;

  --przejscie:.2s ease;
}

@media (max-width:900px){
  :root{
    /* Brandbook: na mobile H1-H3 w dol o ok. 25% */
    --h1:38px;  --h2:30px;  --h3:22px;  --h4:18px;
    --lead:18px; --body:16px;
    --sekcja:64px; --sekcja-sm:48px; --gap:24px;
    --naglowek-h:68px;
  }
}

/* -----------------------------------------------------------------------------
   02 RESET
-------------------------------------------------------------------------- */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%; scroll-behavior:smooth; scroll-padding-top:calc(var(--naglowek-h) + 16px)}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:.001ms !important; animation-iteration-count:1 !important; transition-duration:.001ms !important}
}
body{
  margin:0;
  background:var(--biel);
  color:var(--tekst);
  font-family:var(--text);
  font-size:var(--body);
  line-height:var(--body-lh);
  font-weight:400;
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
  overflow-x:hidden;
}
img,svg,video{max-width:100%; height:auto; display:block}

/* Domyślny rozmiar ikony.
   Bez tego SVG bez jawnej szerokości rozdymał się do rozmiaru zastępczego
   przeglądarki - w przycisku "Zadzwoń" dawało to ogromną słuchawkę obok
   normalnego tekstu. Skala w em, więc ikona zawsze pasuje do stopnia pisma
   elementu, w którym siedzi. */
.swp-svg{width:1.15em; height:1.15em; flex:none}
button,input,select,textarea{font:inherit; color:inherit}
a{color:var(--indygo); text-decoration-thickness:1px; text-underline-offset:.18em}
a:hover{color:var(--indygo-deep)}
h1,h2,h3,h4,h5,h6,p,figure,ul,ol,dl{margin:0}
ul,ol{padding:0; list-style:none}
table{border-collapse:collapse; width:100%}
hr{border:0; border-top:1px solid var(--separator); margin:var(--gap) 0}

/* Focus - brandbook: obrys indygo 3 px, nie sam kolor ramki */
:focus-visible{outline:3px solid var(--indygo); outline-offset:2px; border-radius:2px}
.swp-skip{
  position:absolute; left:-9999px; top:0; z-index:100000;
  background:var(--grafit); color:#fff; padding:12px 20px; font-weight:700;
}
.swp-skip:focus{left:8px; top:8px; color:#fff}

::selection{background:var(--indygo); color:#fff}

/* -----------------------------------------------------------------------------
   03 TYPOGRAFIA
   Ubuntu buduje strukture, Roboto niesie tresc. Trzeciego kroju nie ma.
-------------------------------------------------------------------------- */
h1,h2,h3,h4,h5,h6,.swp-h1,.swp-h2,.swp-h3,.swp-h4{
  font-family:var(--sans); color:var(--grafit); text-wrap:balance;
}
h1,.swp-h1{font-size:var(--h1); line-height:var(--h1-lh); letter-spacing:var(--h1-ls); font-weight:700}
h2,.swp-h2{font-size:var(--h2); line-height:var(--h2-lh); letter-spacing:var(--h2-ls); font-weight:700}
h3,.swp-h3{font-size:var(--h3); line-height:var(--h3-lh); font-weight:500}
h4,.swp-h4{font-size:var(--h4); line-height:var(--h4-lh); font-weight:500}
h5,h6{font-size:var(--body); font-weight:500}

/* Nadtytul - wersaliki z rozstrzeleniem, zawsze indygo */
.swp-nad{
  display:block; font-family:var(--text); font-weight:700;
  font-size:var(--nad); letter-spacing:var(--nad-ls); text-transform:uppercase;
  color:var(--indygo); margin-bottom:14px;
}
.swp-nad--jasny{color:var(--mgla)}

.swp-lead{font-size:var(--lead); line-height:var(--lead-lh); color:var(--tekst-2); max-width:var(--miara)}
.swp-tekst{max-width:var(--miara)}
.swp-tekst p + p{margin-top:1.1em}
.swp-maly{font-size:var(--small); line-height:var(--small-lh); color:var(--tekst-3)}

/* Blok akcentowy - sygnatura marki. Maks. jeden na naglowek.

   Blok ma własne światło pionowe (.1em góra i dół), więc w wielowierszowym
   nagłówku nachodził na sąsiednie wiersze - przy interlinii 1,1 nie było
   go gdzie zmieścić. Nagłówek zawierający blok dostaje więc luźniejszą
   interlinię; nagłówki bez bloku zostają na skali z brandbooka. */
.swp-blok{
  background:var(--indygo); color:var(--biel);
  padding:.10em .24em; border-radius:0;
  box-decoration-break:clone; -webkit-box-decoration-break:clone;
}
h1:has(.swp-blok),
h2:has(.swp-blok),
.swp-h1:has(.swp-blok),
.swp-h2:has(.swp-blok){line-height:1.34}

/* Zapas dla przeglądarek bez :has() - klasę można dopisać ręcznie w szablonie. */
.swp-ma-blok{line-height:1.34}

/* Linia akcentowa - 56 px / 3 px, zastepuje wszystkie separatory ozdobne */
.swp-linia{width:56px; height:3px; background:var(--indygo); margin:20px 0; border:0}
.swp-linia--srodek{margin-left:auto; margin-right:auto}
.swp-linia--jasna{background:var(--mgla)}

/* Tresc redakcyjna (polityka prywatnosci, RODO, raporty) */
.swp-proza{max-width:var(--miara)}
.swp-proza > * + *{margin-top:1.1em}
.swp-proza h2{margin-top:1.8em; font-size:var(--h3); font-weight:500}
.swp-proza h3{margin-top:1.5em; font-size:var(--h4)}
.swp-proza ul,.swp-proza ol{padding-left:0}
.swp-proza li{position:relative; padding-left:26px; margin-bottom:.5em}
.swp-proza ul > li::before{
  content:""; position:absolute; left:0; top:.62em;
  width:8px; height:8px; background:var(--indygo);
}
.swp-proza ol{counter-reset:swp-ol}
.swp-proza ol > li{counter-increment:swp-ol}
.swp-proza ol > li::before{
  content:counter(swp-ol) "."; position:absolute; left:0; top:0;
  font-family:var(--sans); font-weight:700; color:var(--indygo);
}
.swp-proza a{font-weight:500}
.swp-proza strong{font-weight:700}
.swp-proza table{margin:1.4em 0; font-size:var(--small)}
.swp-proza th{
  text-align:left; background:var(--lawenda); color:var(--indygo-deep);
  font-weight:700; padding:12px 16px; border-bottom:1px solid var(--separator);
}
.swp-proza td{padding:12px 16px; border-bottom:1px solid var(--separator); vertical-align:top}
.swp-proza blockquote{
  border-left:3px solid var(--indygo); padding:4px 0 4px 24px;
  color:var(--tekst-2); font-size:var(--lead); line-height:1.6;
}

/* -----------------------------------------------------------------------------
   04 UKLAD
-------------------------------------------------------------------------- */
.swp-kontener{width:100%; max-width:var(--kontener); margin-inline:auto; padding-inline:24px}
.swp-kontener--waski{max-width:var(--kontener-waski)}
@media (max-width:600px){ .swp-kontener{padding-inline:18px} }

.swp-sekcja{padding-block:var(--sekcja)}
.swp-sekcja--sm{padding-block:var(--sekcja-sm)}
.swp-sekcja--lawenda{background:var(--lawenda)}
.swp-sekcja--grafit{background:var(--grafit); color:rgba(255,255,255,.86)}
.swp-sekcja--grafit h1,.swp-sekcja--grafit h2,.swp-sekcja--grafit h3,.swp-sekcja--grafit h4{color:#fff}
.swp-sekcja--grafit .swp-lead{color:rgba(255,255,255,.82)}
.swp-sekcja--grafit .swp-nad{color:var(--mgla)}

.swp-siatka{display:grid; gap:var(--gap)}
.swp-siatka--2{grid-template-columns:repeat(2,1fr)}
.swp-siatka--3{grid-template-columns:repeat(3,1fr)}
.swp-siatka--4{grid-template-columns:repeat(4,1fr)}
.swp-siatka--auto{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
@media (max-width:1000px){
  .swp-siatka--4{grid-template-columns:repeat(2,1fr)}
  .swp-siatka--3{grid-template-columns:repeat(2,1fr)}
}
@media (max-width:680px){
  .swp-siatka--2,.swp-siatka--3,.swp-siatka--4{grid-template-columns:1fr}
}

/* Naglowek sekcji */
.swp-glowa{max-width:var(--miara); margin-bottom:48px}
.swp-glowa--srodek{margin-inline:auto; text-align:center}
.swp-glowa--srodek .swp-lead{margin-inline:auto}
.swp-glowa p{margin-top:18px}

/* Dwie kolumny: tresc + bok */
.swp-duo{display:grid; grid-template-columns:1.15fr .85fr; gap:64px; align-items:center}
.swp-duo--odwrot > :first-child{order:2}
@media (max-width:940px){
  .swp-duo{grid-template-columns:1fr; gap:40px}
  .swp-duo--odwrot > :first-child{order:0}
}

/* -----------------------------------------------------------------------------
   05 PRZYCISKI
   Jeden przycisk glowny na sekcje. Etykieta z zamknietej listy CTA.
-------------------------------------------------------------------------- */
.swp-btn{
  display:inline-flex; align-items:center; justify-content:center; gap:10px;
  font-family:var(--text); font-weight:700; font-size:var(--btn); letter-spacing:.02em;
  line-height:1.2; padding:16px 32px; border-radius:var(--r-pole);
  border:1.5px solid transparent; cursor:pointer; text-decoration:none;
  transition:background var(--przejscie), color var(--przejscie), border-color var(--przejscie), transform var(--przejscie);
  min-height:54px;
}
.swp-btn:active{transform:translateY(1px)}

.swp-btn--glowny{background:var(--indygo); color:var(--biel); border-color:var(--indygo)}
.swp-btn--glowny:hover{background:var(--indygo-deep); border-color:var(--indygo-deep); color:var(--biel)}

.swp-btn--drugi{background:transparent; color:var(--indygo); border-color:var(--indygo)}
.swp-btn--drugi:hover{background:var(--indygo); color:var(--biel)}

.swp-btn--ciemny{background:var(--grafit); color:var(--biel); border-color:var(--grafit)}
.swp-btn--ciemny:hover{background:#000; color:var(--biel)}

.swp-btn--bialy{background:var(--biel); color:var(--indygo); border-color:var(--biel)}
.swp-btn--bialy:hover{background:var(--lawenda); color:var(--indygo-deep)}

.swp-btn--obrys-bialy{background:transparent; color:var(--biel); border-color:rgba(255,255,255,.55)}
.swp-btn--obrys-bialy:hover{background:var(--biel); color:var(--indygo); border-color:var(--biel)}

.swp-btn--duch{
  background:none; color:var(--indygo); border:0; padding:8px 0;
  text-decoration:underline; text-underline-offset:.25em; min-height:0;
}
.swp-btn--duch:hover{color:var(--indygo-deep)}
.swp-btn--duch::after{content:"\2192"; transition:transform var(--przejscie)}
.swp-btn--duch:hover::after{transform:translateX(3px)}

.swp-btn--pelny{width:100%}
.swp-btn[disabled],.swp-btn[aria-disabled="true"]{opacity:.5; pointer-events:none}

.swp-btny{display:flex; flex-wrap:wrap; gap:16px; align-items:center}
.swp-btny--srodek{justify-content:center}

/* -----------------------------------------------------------------------------
   06 TAGI - jedyne miejsce z pelnym zaokragleniem
-------------------------------------------------------------------------- */
.swp-tag{
  display:inline-flex; align-items:center; gap:6px;
  font-size:var(--small); font-weight:500; line-height:1;
  padding:8px 16px; border-radius:var(--r-pigulka);
  background:var(--lawenda); color:var(--indygo-deep); text-decoration:none;
  border:1px solid transparent; transition:background var(--przejscie), color var(--przejscie);
}
.swp-tag--pelny{background:var(--indygo); color:var(--biel)}
a.swp-tag:hover{background:var(--mgla); color:var(--indygo-deep)}
a.swp-tag--pelny:hover{background:var(--indygo-deep); color:var(--biel)}
.swp-tagi{display:flex; flex-wrap:wrap; gap:10px}

/* -----------------------------------------------------------------------------
   07 KARTY
-------------------------------------------------------------------------- */
/* Uwaga na wysokosc.
   Wczesniej bylo tu height:100%, zeby karty w siatce mialy rowna wysokosc.
   To zbedne - element siatki i tak rozciaga sie do wysokosci wiersza
   (align-items:stretch jest domyslne) - a poza siatka robilo szkode:
   pojedyncza karta wstawiona wprost do kontenera rozciagala sie na cala
   wysokosc sekcji i zostawiala pod trescia wielka biala plame. */
.swp-karta{
  background:var(--biel); border:1px solid var(--separator); border-radius:var(--r-karta);
  padding:32px; transition:box-shadow var(--przejscie), transform var(--przejscie);
  display:flex; flex-direction:column;
}
/* Karta wyróżniona.
   Wcześniej był to pasek koloru na całej górnej krawędzi - gest tak ograny,
   że czyta się jak szablon, a nie jak nasza identyfikacja. Wyróżnienie robimy
   tym, czym marka wyróżnia od zawsze: pełnym blokiem koloru. Karta siada na
   lawendzie, a jej ikona dostaje pełny blok indygo. Zero kresek. */
.swp-karta--akcent{
  background:var(--lawenda);
  border-color:transparent;
}
.swp-karta--akcent .swp-ikona{background:var(--indygo); color:var(--biel)}
.swp-karta--akcent .swp-nad{color:var(--indygo-deep)}

/* Na lawendowej sekcji karta akcentowa musi się odciąć od tła - wtedy odwracamy:
   biała karta, blok indygo zostaje. */
.swp-sekcja--lawenda .swp-karta--akcent{background:var(--biel)}
.swp-karta--klik:hover{box-shadow:var(--cien-hover); transform:translateY(-2px)}
.swp-karta h3,.swp-karta h4{margin-bottom:12px}
.swp-karta p{color:var(--tekst-3); font-size:var(--small); line-height:1.65}
.swp-karta .swp-btn--duch{margin-top:auto; padding-top:20px; align-self:flex-start}

/* Ikona karty - blok, nie kolko */
.swp-ikona{
  width:52px; height:52px; border-radius:6px; margin-bottom:22px;
  background:var(--lawenda); color:var(--indygo);
  display:flex; align-items:center; justify-content:center; flex:none;
}
.swp-ikona svg{width:26px; height:26px; stroke-width:1.6}
.swp-karta--akcent .swp-ikona{background:var(--indygo); color:var(--biel)}

/* Karta na lawendzie */
.swp-sekcja--lawenda .swp-karta{border-color:transparent}

/* Statystyka */
.swp-stat{text-align:center}
.swp-stat__num{font-family:var(--sans); font-weight:700; font-size:48px; line-height:1; letter-spacing:-.02em; color:var(--indygo)}
.swp-stat__opis{margin-top:10px; font-size:var(--small); color:var(--tekst-3)}
.swp-sekcja--grafit .swp-stat__num{color:var(--mgla)}
.swp-sekcja--grafit .swp-stat__opis{color:rgba(255,255,255,.7)}

/* -----------------------------------------------------------------------------
   08 FORMULARZE
-------------------------------------------------------------------------- */
.swp-form{display:flex; flex-direction:column; gap:20px}
.swp-pole{display:flex; flex-direction:column; gap:8px}
.swp-pole__etykieta{font-size:var(--small); font-weight:700; color:var(--grafit)}
.swp-pole__etykieta span{color:var(--indygo)}
.swp-pole__podpowiedz{font-size:13px; color:var(--szary); line-height:1.5}

.swp-input,.swp-textarea,.swp-select{
  width:100%; background:var(--biel); color:var(--grafit);
  border:1px solid var(--mgla); border-radius:var(--r-pole);
  padding:14px 16px; font-size:var(--body); line-height:1.4;
  transition:border-color var(--przejscie), box-shadow var(--przejscie);
}
.swp-textarea{min-height:150px; resize:vertical}
.swp-select{
  appearance:none; padding-right:44px; cursor:pointer;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='9' viewBox='0 0 14 9'%3E%3Cpath d='M1 1l6 6 6-6' fill='none' stroke='%235D5FAC' stroke-width='2'/%3E%3C/svg%3E");
  background-repeat:no-repeat; background-position:right 16px center;
}
.swp-input::placeholder,.swp-textarea::placeholder{color:var(--szary)}
.swp-input:focus,.swp-textarea:focus,.swp-select:focus{
  outline:0; border-color:var(--indygo); box-shadow:0 0 0 3px rgba(93,95,172,.18);
}
.swp-input[aria-invalid="true"],.swp-textarea[aria-invalid="true"]{border-color:var(--err)}

/* Zgoda RODO */
.swp-zgoda{display:flex; gap:12px; align-items:flex-start; font-size:13px; line-height:1.55; color:var(--tekst-3)}
.swp-zgoda input[type="checkbox"]{
  appearance:none; flex:none; width:22px; height:22px; margin-top:1px;
  border:1px solid var(--mgla); border-radius:3px; background:var(--biel); cursor:pointer;
  transition:background var(--przejscie), border-color var(--przejscie);
}
.swp-zgoda input[type="checkbox"]:checked{
  background:var(--indygo) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='13' height='10' viewBox='0 0 13 10'%3E%3Cpath d='M1 5l4 4 7-8' fill='none' stroke='%23fff' stroke-width='2.2'/%3E%3C/svg%3E") center/13px 10px no-repeat;
  border-color:var(--indygo);
}
.swp-zgoda a{font-weight:500}

/* Honeypot - poza ekranem, nie display:none (czesciej rozpoznawany wzorzec) */
.swp-hp{position:absolute !important; left:-9999px !important; top:auto; width:1px; height:1px; overflow:hidden}

/* Komunikaty */
.swp-flash{
  border-radius:var(--r-pole); padding:18px 22px; font-size:var(--small); line-height:1.6;
  display:flex; gap:12px; align-items:flex-start;
}
.swp-flash--ok{background:var(--ok-bg); color:var(--ok-ink); border-left:3px solid var(--ok)}
.swp-flash--err{background:var(--err-bg); color:var(--err-ink); border-left:3px solid var(--err)}
.swp-flash strong{display:block; margin-bottom:3px; font-weight:700}
.swp-flash svg{width:20px; height:20px; flex:none; margin-top:1px}

/* Formularz w ramce (sekcja kontaktowa) */
.swp-form-box{
  background:var(--biel); border:1px solid var(--separator); border-radius:var(--r-karta);
  padding:40px;
}
@media (max-width:600px){ .swp-form-box{padding:26px 20px} }

/* -----------------------------------------------------------------------------
   09 DEKORACJE
   Cztery gesty z brandbooka: blok akcentowy, siatka punktow, gradient, </>
-------------------------------------------------------------------------- */
.swp-punkty{
  background-image:radial-gradient(circle, var(--mgla) 1.2px, transparent 1.2px);
  background-size:20px 20px;
}
.swp-gradient{background:linear-gradient(135deg,#5D5FAC 0%,#6A408D 100%); color:var(--biel)}
.swp-gradient h1,.swp-gradient h2,.swp-gradient h3,.swp-gradient h4{color:#fff}
.swp-kod{
  font-family:var(--sans); font-weight:700; color:var(--mgla);
  font-size:64px; line-height:1; user-select:none;
}

/* -----------------------------------------------------------------------------
   10 NAGLOWEK
-------------------------------------------------------------------------- */
.swp-naglowek{
  position:sticky; top:0; z-index:900;
  background:rgba(255,255,255,.94); backdrop-filter:blur(10px); -webkit-backdrop-filter:blur(10px);
  border-bottom:1px solid var(--separator);
}
.swp-naglowek__in{
  height:var(--naglowek-h); display:flex; align-items:center; gap:32px;
}
.swp-logo{flex:none; display:block; line-height:0}
.swp-logo img{height:44px; width:auto}
@media (max-width:900px){ .swp-logo img{height:36px} }

/* Wrapper <nav> przejmuje odpychanie w prawo, bo to on jest dzieckiem
   flexa nagłówka. Sama lista <ul class="swp-nav"> jest kontenerem pozycji. */
.swp-nav-wrap{margin-left:auto}
.swp-nav{display:flex; align-items:center; gap:4px; margin:0; padding:0; list-style:none}
.swp-nav a{
  display:flex; align-items:center; gap:6px;
  padding:10px 14px; font-size:15px; font-weight:500; color:var(--grafit);
  text-decoration:none; border-radius:var(--r-pole); transition:color var(--przejscie), background var(--przejscie);
  white-space:nowrap;
}
.swp-nav a:hover{color:var(--indygo); background:var(--lawenda)}
.swp-nav .current-menu-item > a,
.swp-nav .current-menu-ancestor > a,
.swp-nav .current_page_item > a{color:var(--indygo); font-weight:700}

.swp-nav li{position:relative}
.swp-nav .menu-item-has-children > a::after{
  content:""; width:8px; height:5px; flex:none;
  background:currentColor; clip-path:polygon(0 0,100% 0,50% 100%);
  transition:transform var(--przejscie);
}
.swp-nav .menu-item-has-children:hover > a::after{transform:rotate(180deg)}

.swp-nav .sub-menu{
  position:absolute; top:100%; left:0; min-width:266px;
  background:var(--biel); border:1px solid var(--separator); border-radius:var(--r-karta);
  box-shadow:var(--cien-hover); padding:8px;
  opacity:0; visibility:hidden; transform:translateY(6px);
  transition:opacity var(--przejscie), transform var(--przejscie), visibility var(--przejscie);
}
.swp-nav li:hover > .sub-menu,
.swp-nav li:focus-within > .sub-menu{opacity:1; visibility:visible; transform:none}
.swp-nav .sub-menu a{padding:11px 14px; font-weight:400; width:100%}

.swp-naglowek__cta{flex:none; display:flex; align-items:center; gap:14px}
.swp-tel{
  display:inline-flex; align-items:center; gap:9px;
  font-family:var(--sans); font-weight:700; font-size:16px; color:var(--grafit);
  text-decoration:none; white-space:nowrap;
}
.swp-tel:hover{color:var(--indygo)}
.swp-tel svg{width:18px; height:18px; color:var(--indygo)}
.swp-naglowek__cta .swp-btn{padding:12px 24px; min-height:46px; font-size:15px}

/* Hamburger */
.swp-burger{
  display:none; flex:none; width:46px; height:46px; margin-left:auto;
  background:none; border:1px solid var(--separator); border-radius:var(--r-pole);
  cursor:pointer; padding:0; align-items:center; justify-content:center;
}
.swp-burger span{display:block; width:20px; height:2px; background:var(--grafit); position:relative; transition:background var(--przejscie)}
.swp-burger span::before,.swp-burger span::after{
  content:""; position:absolute; left:0; width:20px; height:2px; background:var(--grafit);
  transition:transform var(--przejscie), top var(--przejscie);
}
.swp-burger span::before{top:-6px}
.swp-burger span::after{top:6px}
.swp-burger[aria-expanded="true"] span{background:transparent}
.swp-burger[aria-expanded="true"] span::before{top:0; transform:rotate(45deg)}
.swp-burger[aria-expanded="true"] span::after{top:0; transform:rotate(-45deg)}

@media (max-width:1080px){
  .swp-burger{display:flex}
  .swp-naglowek__cta{display:none}

  /* Element z backdrop-filter staje się układem odniesienia dla potomków
     position:fixed - menu pozycjonowało się więc względem paska nagłówka
     o wysokości 68 px i było przycięte do zera. Na mobile rozmycie i tak
     niczego nie wnosi, bo tło jest pełne. */
  .swp-naglowek{backdrop-filter:none; -webkit-backdrop-filter:none; background:var(--biel)}

  /* Odstęp między pozycjami nagłówka zerujemy, bo pusty wrapper nawigacji
     (jego lista jest position:fixed) i tak zabierał 32 px odstępu - przez to
     hamburger stał dalej od krawędzi niż logo po drugiej stronie. */
  .swp-naglowek__in{gap:0}
  .swp-nav-wrap{margin-left:0}

  .swp-nav{
    position:fixed; inset:var(--naglowek-h) 0 0 0; margin:0;
    background:var(--biel); flex-direction:column; align-items:stretch; gap:0;
    padding:20px 24px 40px; overflow-y:auto;
    transform:translateX(100%); transition:transform .28s ease;
  }
  .swp-nav.jest-otwarte{transform:none}
  /* :not(.swp-nav__stopka) jest tu konieczne. Bez tego reguła łapała także
     przycisk wyceny i telefon w stopce menu - a że zeruje zaokrąglenie
     i odstęp poziomy, przycisk główny robił się kanciastym prostokątem
     z kreską pod spodem. Wyglądało to jak pozycja listy, nie jak przycisk. */
  .swp-nav > li:not(.swp-nav__stopka) > a{
    padding:16px 0; font-size:18px; border-radius:0;
    border-bottom:1px solid var(--separator);
  }
  .swp-nav .menu-item-has-children > a::after{margin-left:auto}
  .swp-nav .sub-menu{
    position:static; opacity:1; visibility:visible; transform:none;
    box-shadow:none; border:0; border-radius:0; padding:4px 0 12px 16px;
    display:none; min-width:0;
  }
  .swp-nav .sub-menu.jest-otwarte{display:block}
  .swp-nav .sub-menu a{padding:11px 0; font-size:16px; color:var(--tekst-3)}
  .swp-nav__stopka{margin-top:26px; display:flex; flex-direction:column; gap:18px}

  /* Wiersz z przełącznikiem języka. Dostaje własny pasek nad przyciskiem,
     bo to wybór, a nie akcja - wrzucony między przyciski wyglądałby
     jak trzecie CTA. */
  .swp-nav__jezyk{
    display:flex; align-items:center; justify-content:space-between; gap:14px;
    padding-bottom:20px; border-bottom:1px solid var(--separator);
  }
  .swp-nav__jezyk > span{font-size:14px; color:var(--tekst-3)}

  /* Skrót języka zostaje widoczny nawet na wąskim ekranie - w menu jest
     miejsce, a sama flaga bez podpisu bywa myląca. */
  .swp-nav__jezyk .swp-jezyk{padding:9px 15px 9px 11px; font-size:14px}
  .swp-nav__jezyk .swp-jezyk span{display:inline}

  /* Przycisk w stopce menu jest zwykłym <a> wewnątrz .swp-nav, więc dziedziczy
     style pozycji nawigacji (padding 10/14, waga 500, hover na lawendę).
     Przywracamy mu wygląd przycisku - inaczej wygląda jak odnośnik z tłem. */
  .swp-nav__stopka .swp-btn{
    padding:16px 28px; font-size:var(--btn); font-weight:700;
    border-radius:var(--r-pole); white-space:normal;
  }
  .swp-nav__stopka .swp-btn--glowny:hover{background:var(--indygo-deep); color:var(--biel)}

  /* Telefon: numer do kliknięcia, nie drugi przycisk.
     white-space:normal, bo .swp-nav a wymusza nowrap - a podpis pod numerem
     jest długi i na wąskim ekranie wyjechałby poza krawędź. */
  /* Selektor musi być dwuczłonowy: samo .swp-nav__tel przegrywa
     specyficznością z .swp-nav a i telefon dostawał wcięcie 14 px,
     przez które nie trzymał linii z resztą menu. */
  .swp-nav__stopka .swp-nav__tel{
    display:flex; align-items:center; gap:13px;
    text-decoration:none; color:var(--grafit);
    padding:2px 0; white-space:normal;
  }
  .swp-nav__stopka .swp-nav__tel:hover{background:none}
  .swp-nav__tel svg{width:22px; height:22px; flex:none; color:var(--indygo)}
  .swp-nav__tel strong{
    display:block; font-family:var(--sans); font-weight:700;
    font-size:21px; line-height:1.2; letter-spacing:.01em;
  }
  .swp-nav__tel small{display:block; margin-top:3px; font-size:13px; color:var(--tekst-3)}
  .swp-nav__tel:hover strong{color:var(--indygo)}
}
@media (min-width:1081px){ .swp-nav__stopka{display:none} }

body.swp-menu-blokada{overflow:hidden}

/* -----------------------------------------------------------------------------
   11 HERO
-------------------------------------------------------------------------- */
.swp-hero{position:relative; overflow:hidden; background:var(--biel)}
.swp-hero__in{
  display:grid; grid-template-columns:1.05fr .95fr; gap:64px; align-items:center;
  padding-block:clamp(56px,7vw,104px);
}
@media (max-width:980px){
  .swp-hero__in{grid-template-columns:1fr; gap:44px; padding-block:48px}
}
.swp-hero h1{margin-bottom:24px}
.swp-hero__lead{font-size:var(--lead); line-height:var(--lead-lh); color:var(--tekst-2); max-width:56ch}
.swp-hero .swp-btny{margin-top:36px}
.swp-hero__punkty{
  display:flex; flex-wrap:wrap; gap:12px 28px; margin-top:34px;
  padding-top:28px; border-top:1px solid var(--separator);
}
.swp-hero__punkt{display:flex; align-items:center; gap:9px; font-size:var(--small); color:var(--tekst-3)}
.swp-hero__punkt svg{width:17px; height:17px; color:var(--indygo); flex:none}

/* Podpis pod makieta - trzy realizacje, po jednej na urzadzenie.
   Flex zamiast zwyklego tekstu, zeby przy zawijaniu nie zostawal
   osierocony separator na poczatku nowego wiersza. */
.swp-hero__podpis{
  display:flex; flex-wrap:wrap; justify-content:center; align-items:center;
  gap:6px 12px; margin-top:22px;
}
.swp-hero__podpis span{color:var(--tekst-3); opacity:.5}

/* Tlo dekoracyjne hero */
.swp-hero__tlo{
  position:absolute; inset:0; z-index:0; pointer-events:none;
  background-image:radial-gradient(circle, var(--mgla) 1.2px, transparent 1.2px);
  background-size:22px 22px;
  -webkit-mask-image:radial-gradient(120% 90% at 88% 12%, #000 0%, transparent 62%);
  mask-image:radial-gradient(120% 90% at 88% 12%, #000 0%, transparent 62%);
  opacity:.85;
}
.swp-hero__in{position:relative; z-index:1}

/* Hero na gradiencie (podstrony) */
.swp-hero--gradient{
  background:linear-gradient(135deg,#5D5FAC 0%,#5D5FAC 52%,#6A408D 100%);
  color:var(--biel);
}
.swp-hero--gradient h1{color:#fff}
.swp-hero--gradient .swp-hero__lead{color:rgba(255,255,255,.85)}
.swp-hero--gradient .swp-nad{color:var(--mgla)}
.swp-hero--gradient .swp-hero__tlo{
  background-image:radial-gradient(circle, rgba(255,255,255,.9) 1.1px, transparent 1.1px);
  background-size:26px 26px; opacity:.16;
  -webkit-mask-image:none; mask-image:none;
}
.swp-hero--gradient .swp-hero__punkty{border-top-color:rgba(255,255,255,.22)}
.swp-hero--gradient .swp-hero__punkt{color:rgba(255,255,255,.85)}
.swp-hero--gradient .swp-hero__punkt svg{color:var(--mgla)}
.swp-hero--gradient .swp-okruchy,.swp-hero--gradient .swp-okruchy a{color:rgba(255,255,255,.8)}
.swp-hero--gradient .swp-okruchy a:hover{color:#fff}

/* Hero bez kolumny z obrazkiem. Zwężamy samą kolumnę treści, a nie kontener -
   inaczej cała sekcja odjeżdża od siatki reszty strony. */
.swp-hero--prosty .swp-hero__in{grid-template-columns:minmax(0,860px)}

/* Okruchy */
.swp-okruchy{font-size:13px; color:var(--szary); margin-bottom:20px; display:flex; flex-wrap:wrap; gap:8px; align-items:center}
.swp-okruchy a{color:var(--szary); text-decoration:none}
.swp-okruchy a:hover{color:var(--indygo); text-decoration:underline}
.swp-okruchy span[aria-hidden]{opacity:.5}

/* -----------------------------------------------------------------------------
   12 SEKCJE TRESCI
-------------------------------------------------------------------------- */
/* Ściana logotypów klientów.
   Znaki są jednokolorowe (grafit) i przygaszone - dopiero najechanie wydobywa
   jeden z tła. Dzięki temu ściana czyta się jako całość, a nie jako konkurs
   na najmocniejszy logotyp. */
.swp-logotypy{
  display:grid; gap:8px;
  grid-template-columns:repeat(auto-fill, minmax(168px, 1fr));
  align-items:stretch; list-style:none; padding:0; margin:0;
}
.swp-logotypy li{display:flex}
.swp-logotypy a{
  flex:1; display:flex; align-items:center; justify-content:center;
  padding:22px 18px; min-height:96px;
  border-radius:var(--r-pole); text-decoration:none;
  transition:background var(--przejscie);
}
.swp-logotypy img{
  max-height:48px; width:auto; max-width:100%; object-fit:contain;
  opacity:.42; transition:opacity var(--przejscie), transform var(--przejscie);
}
.swp-logotypy a:hover{background:var(--lawenda)}
.swp-logotypy a:hover img{opacity:1; transform:scale(1.04)}
.swp-logotypy a:focus-visible img{opacity:1}

@media (max-width:600px){
  .swp-logotypy{grid-template-columns:repeat(auto-fill, minmax(132px, 1fr))}
  .swp-logotypy a{padding:16px 12px; min-height:78px}
  .swp-logotypy img{max-height:38px}
}

/* Karta partnera */
.swp-partner{
  background:var(--biel); border-radius:var(--r-karta); padding:32px;
  display:flex; flex-direction:column; height:100%;
}
.swp-partner__logo{
  height:52px; display:flex; align-items:center; margin-bottom:22px;
}
.swp-partner__logo img{max-height:52px; width:auto; object-fit:contain}
.swp-partner__rola{
  display:block; font-size:12px; font-weight:700; letter-spacing:.18em;
  text-transform:uppercase; color:var(--indygo); margin-bottom:8px;
}
.swp-partner h3{margin-bottom:12px}
.swp-partner p{color:var(--tekst-3); font-size:var(--small); line-height:1.65; margin-bottom:18px}
.swp-partner .swp-btn--duch{margin-top:auto; align-self:flex-start; padding-top:18px}

/* Lista zalet z ptaszkami */
.swp-zalety{display:grid; gap:18px}
.swp-zalety li{display:flex; gap:14px; align-items:flex-start; font-size:var(--body); line-height:1.6}
.swp-zalety svg{width:22px; height:22px; flex:none; color:var(--indygo); margin-top:2px}
.swp-zalety strong{display:block; font-family:var(--sans); font-weight:500; margin-bottom:2px}
.swp-zalety span{color:var(--tekst-3); font-size:var(--small)}

/* Cennik / pakiety */
.swp-pakiet{position:relative}
.swp-pakiet--polecany{border-color:var(--indygo); box-shadow:var(--cien-hover)}
.swp-pakiet__wstazka{
  position:absolute; top:-1px; right:24px;
  background:var(--indygo); color:#fff; font-size:11px; font-weight:700;
  letter-spacing:.16em; text-transform:uppercase; padding:6px 14px;
}
.swp-pakiet__cena{
  font-family:var(--sans); font-weight:700; font-size:34px; line-height:1;
  color:var(--grafit); margin:6px 0 4px;
}
.swp-pakiet__cena small{font-size:14px; font-weight:400; color:var(--szary); letter-spacing:0}
.swp-pakiet__lista{margin:24px 0; display:grid; gap:11px}
.swp-pakiet__lista li{position:relative; padding-left:26px; font-size:var(--small); line-height:1.55; color:var(--tekst-3)}
.swp-pakiet__lista li::before{
  content:""; position:absolute; left:0; top:.45em; width:12px; height:7px;
  border-left:2px solid var(--indygo); border-bottom:2px solid var(--indygo);
  transform:rotate(-45deg);
}

/* -----------------------------------------------------------------------------
   13 REALIZACJE
-------------------------------------------------------------------------- */
.swp-filtry{display:flex; flex-wrap:wrap; gap:10px; margin-bottom:40px; justify-content:center}
.swp-filtr{
  background:var(--biel); border:1px solid var(--separator); color:var(--tekst-3);
  padding:9px 18px; border-radius:var(--r-pigulka); font-size:var(--small); font-weight:500;
  cursor:pointer; transition:all var(--przejscie); white-space:nowrap;
}
.swp-filtr:hover{border-color:var(--mgla); color:var(--indygo)}
.swp-filtr[aria-pressed="true"]{background:var(--indygo); border-color:var(--indygo); color:var(--biel)}

.swp-realizacje{display:grid; grid-template-columns:repeat(3,1fr); gap:32px}
@media (max-width:1000px){ .swp-realizacje{grid-template-columns:repeat(2,1fr)} }
@media (max-width:680px){ .swp-realizacje{grid-template-columns:1fr} }
.swp-realizacja[hidden]{display:none}

.swp-realizacja{
  display:flex; flex-direction:column; background:var(--biel);
  border:1px solid var(--separator); border-radius:var(--r-karta); overflow:hidden;
  transition:box-shadow var(--przejscie), transform var(--przejscie), border-color var(--przejscie);
}
.swp-realizacja:hover{box-shadow:var(--cien-hover); transform:translateY(-2px); border-color:var(--mgla)}
.swp-realizacja__tresc{padding:24px 26px 26px; display:flex; flex-direction:column; flex:1}
.swp-realizacja__branza{
  font-size:11px; font-weight:700; letter-spacing:.16em; text-transform:uppercase;
  color:var(--indygo); margin-bottom:9px;
}
.swp-realizacja__tytul{font-size:var(--h4); font-weight:500; line-height:1.3; margin-bottom:10px}
.swp-realizacja__tytul a{color:var(--grafit); text-decoration:none}
.swp-realizacja__tytul a:hover{color:var(--indygo)}
.swp-realizacja__opis{font-size:var(--small); line-height:1.6; color:var(--tekst-3); margin-bottom:18px}
.swp-realizacja__stopka{
  margin-top:auto; padding-top:16px; border-top:1px solid var(--separator);
  display:flex; align-items:center; justify-content:space-between; gap:12px;
}
.swp-realizacja__link{font-size:var(--small); font-weight:700; color:var(--indygo); text-decoration:none}
.swp-realizacja__link:hover{text-decoration:underline}
.swp-realizacja__www{font-size:12px; color:var(--szary); word-break:break-all}

/* -----------------------------------------------------------------------------
   14 MOCKUPY
   Zrzut na ramce monitora + telefon w rogu. Ramka jednolita, szary pasek -
   brandbook zakazuje imitacji przegladarki w innej stylistyce.
-------------------------------------------------------------------------- */
.swp-mockup{
  position:relative; background:var(--lawenda); padding:28px 28px 0;
  aspect-ratio:16/10; overflow:hidden; display:flex; align-items:flex-end;
}
.swp-mockup::before{
  content:""; position:absolute; inset:0;
  background-image:radial-gradient(circle, var(--mgla) 1.1px, transparent 1.1px);
  background-size:16px 16px; opacity:.5;
}

/* Ekran - monitor */
.swp-mockup__ekran{
  position:relative; width:100%; border-radius:7px 7px 0 0; overflow:hidden;
  background:var(--biel); box-shadow:0 10px 30px rgba(17,17,17,.16);
  border:1px solid rgba(17,17,17,.10); border-bottom:0;
}
.swp-mockup__pasek{
  height:22px; background:#EDEDF2; display:flex; align-items:center; gap:5px; padding-inline:10px;
  border-bottom:1px solid rgba(17,17,17,.07);
}
.swp-mockup__pasek i{width:7px; height:7px; border-radius:50%; background:var(--mgla); display:block}
.swp-mockup__ekran img{
  width:100%; height:auto; display:block; aspect-ratio:1200/750; object-fit:cover; object-position:top center;
}

/* Telefon - nakladka w prawym dolnym rogu */
.swp-mockup__telefon{
  position:absolute; right:22px; bottom:0; width:23%; min-width:78px; max-width:132px;
  border-radius:12px 12px 0 0; overflow:hidden; background:var(--grafit);
  padding:6px 6px 0; box-shadow:0 12px 28px rgba(17,17,17,.28);
}
.swp-mockup__telefon::before{
  content:""; position:absolute; top:2.5px; left:50%; transform:translateX(-50%);
  width:26%; height:3px; border-radius:2px; background:rgba(255,255,255,.35);
}
.swp-mockup__telefon img{
  width:100%; display:block; border-radius:7px 7px 0 0;
  aspect-ratio:390/720; object-fit:cover; object-position:top center; background:var(--biel);
}
@media (max-width:520px){
  .swp-mockup{padding:18px 18px 0}
  .swp-mockup__telefon{right:14px; width:26%}
}

/* Wariant duzy - na stronie case study */
.swp-mockup--duzy{aspect-ratio:16/9; padding:44px 44px 0; border-radius:var(--r-karta)}
.swp-mockup--duzy .swp-mockup__telefon{right:38px; width:19%}

/* -----------------------------------------------------------------------------
   14b MOCKUP NA URZĄDZENIACH
   Laptop, tablet i telefon rysowane CSS-em. Żadnych gotowych grafik ramek:
   są ostre na każdym ekranie, nic nie ważą, a podmiana realizacji to zmiana
   adresu obrazka. Kolor ramek to grafit z palety - nie "srebro" ani gradient.
-------------------------------------------------------------------------- */
.swp-urzadzenia{
  position:relative;
  padding:0 0 9%;          /* miejsce na tablet i telefon wystające pod laptopem */
  isolation:isolate;
}

/* --- Laptop --- */
.swp-urzadzenia__laptop{width:84%; margin:0 auto; position:relative; z-index:2}
.swp-urzadzenia__ekran{
  background:var(--grafit);
  border-radius:10px 10px 3px 3px;
  padding:2.2% 2.2% 2.6%;
  box-shadow:0 18px 44px rgba(17,17,17,.20);
}
.swp-urzadzenia__ekran img{
  width:100%; display:block; border-radius:3px;
  aspect-ratio:1200/750; object-fit:cover; object-position:top center;
  background:var(--biel);
}
/* Podstawa szersza od ekranu - tak wygląda otwarty laptop od przodu */
.swp-urzadzenia__podstawa{
  width:114%; height:14px; margin:0 -7%;
  background:linear-gradient(180deg,#2a2a30 0%,#17171b 62%,#0d0d10 100%);
  border-radius:0 0 12px 12px;
  position:relative;
  box-shadow:0 10px 22px rgba(17,17,17,.22);
}
/* Wcięcie na palec */
.swp-urzadzenia__podstawa::after{
  content:""; position:absolute; left:50%; top:0; transform:translateX(-50%);
  width:15%; height:5px; background:rgba(255,255,255,.14);
  border-radius:0 0 6px 6px;
}

/* --- Tablet, lewy dolny róg --- */
.swp-urzadzenia__tablet{
  position:absolute; left:0; bottom:0; z-index:3;
  width:31%;
  background:var(--grafit);
  border-radius:9px; padding:1.9%;
  box-shadow:0 14px 34px rgba(17,17,17,.26);
}
.swp-urzadzenia__tablet img{
  width:100%; display:block; border-radius:3px;
  aspect-ratio:1024/768; object-fit:cover; object-position:top center;
  background:var(--biel);
}

/* --- Telefon, prawy dolny róg ---

   UWAGA na padding w procentach: rozlicza się go wzgledem szerokosci bloku
   zawierajacego, czyli calej makiety, a NIE wzgledem samego telefonu.
   Telefon ma 13.5% szerokosci makiety, wiec padding 1.8% dawal ramke grubosci
   13% jego wlasnej szerokosci z kazdej strony - stad "gruba ramka". Zeby ramka
   miala realne 4%, potrzeba 0.04 * 13.5% = ok. 0.55% szerokosci makiety.

   Wspolczesne telefony maja waska ramke i mocno zaokraglone rogi, wiec przy
   okazji zmniejszamy promien wewnetrzny i zwiekszamy zewnetrzny. */
.swp-urzadzenia__telefon{
  position:absolute; right:2%; bottom:0; z-index:4;
  width:13.5%;
  background:var(--grafit);
  border-radius:18px; padding:0.75% 0.5%;
  box-shadow:0 14px 34px rgba(17,17,17,.30);
}
/* Glosnik: cienka kreska u gory, wpisana w ramke zamiast lezec na ekranie. */
.swp-urzadzenia__telefon::before{
  content:""; position:absolute; top:0.28%; left:50%; transform:translateX(-50%);
  width:26%; height:2px; border-radius:2px; background:rgba(255,255,255,.30);
  z-index:1;
}
.swp-urzadzenia__telefon img{
  width:100%; display:block; border-radius:14px;
  aspect-ratio:390/720; object-fit:cover; object-position:top center;
  background:var(--biel);
}

/* Na wąskich ekranach tablet zjada laptopa - zostaje laptop i telefon.

   Szerokość laptopa to 87%, a nie 100%, bo jego podstawa ma 114% szerokości
   ekranu i ujemne marginesy po bokach. Przy laptopie na 100% podstawa
   wystawała poza kontener i dawała poziome przewijanie - na telefonie
   objawiało się to pustym białym pasem po machnięciu w prawo.
   114% z 87% to niecałe 100%, czyli mieści się w kontenerze. */
@media (max-width:560px){
  .swp-urzadzenia{padding-bottom:4%}
  .swp-urzadzenia__laptop{width:87%}
  .swp-urzadzenia__tablet{display:none}
  /* Telefon jest tu szerszy, wiec padding musi urosnac proporcjonalnie,
     inaczej ramka znika calkiem. 0.04 * 19% = ok. 0.76%. */
  .swp-urzadzenia__telefon{width:19%; right:0; bottom:0; padding:1% 0.7%; border-radius:14px}
  .swp-urzadzenia__telefon img{border-radius:10px}
}

/* Wariant hero - bez tla, sam ekran */
.swp-mockup--goly{background:none; padding:0; aspect-ratio:auto}
.swp-mockup--goly::before{display:none}
.swp-mockup--goly .swp-mockup__ekran{border-radius:var(--r-karta); border-bottom:1px solid rgba(17,17,17,.10)}
.swp-mockup--goly .swp-mockup__ekran img{aspect-ratio:auto}

/* -----------------------------------------------------------------------------
   15 PROCES
-------------------------------------------------------------------------- */
.swp-proces{display:grid; grid-template-columns:repeat(5,1fr); gap:28px; counter-reset:krok}
@media (max-width:1000px){ .swp-proces{grid-template-columns:repeat(2,1fr)} }
@media (max-width:560px){ .swp-proces{grid-template-columns:1fr} }
.swp-krok{position:relative; padding-top:26px; border-top:3px solid var(--separator)}
.swp-krok--aktywny,.swp-krok:first-child{border-top-color:var(--indygo)}
.swp-krok__num{
  font-family:var(--sans); font-weight:700; font-size:15px; color:var(--indygo);
  letter-spacing:.04em; margin-bottom:10px; display:block;
}
.swp-krok h3{font-size:var(--h4); font-weight:500; margin-bottom:10px}
.swp-krok p{font-size:var(--small); line-height:1.6; color:var(--tekst-3)}
.swp-sekcja--grafit .swp-krok{border-top-color:rgba(255,255,255,.22)}
.swp-sekcja--grafit .swp-krok:first-child{border-top-color:var(--mgla)}
.swp-sekcja--grafit .swp-krok__num{color:var(--mgla)}
.swp-sekcja--grafit .swp-krok p{color:rgba(255,255,255,.72)}

/* -----------------------------------------------------------------------------
   16 OPINIE
-------------------------------------------------------------------------- */
.swp-opinia{
  background:var(--biel); border:1px solid var(--separator); border-radius:var(--r-karta);
  padding:32px; display:flex; flex-direction:column; height:100%;
}
.swp-opinia__gwiazdki{display:flex; gap:3px; margin-bottom:18px; color:var(--indygo)}
.swp-opinia__gwiazdki svg{width:17px; height:17px}
.swp-opinia__tresc{font-size:var(--body); line-height:1.65; color:var(--tekst-2); margin-bottom:24px}
.swp-opinia__autor{margin-top:auto; padding-top:18px; border-top:1px solid var(--separator)}
.swp-opinia__imie{font-family:var(--sans); font-weight:500; font-size:var(--small)}
.swp-opinia__firma{font-size:13px; color:var(--szary); margin-top:2px}

/* -----------------------------------------------------------------------------
   17 FAQ
-------------------------------------------------------------------------- */
.swp-faq{max-width:var(--kontener-waski); margin-inline:auto}
.swp-faq details{border-bottom:1px solid var(--separator)}
.swp-faq summary{
  list-style:none; cursor:pointer; padding:24px 44px 24px 0; position:relative;
  font-family:var(--sans); font-weight:500; font-size:var(--h4); line-height:1.4; color:var(--grafit);
}
.swp-faq summary::-webkit-details-marker{display:none}
.swp-faq summary::after{
  content:""; position:absolute; right:6px; top:50%; width:14px; height:2px;
  background:var(--indygo); transform:translateY(-50%);
}
.swp-faq summary::before{
  content:""; position:absolute; right:12px; top:50%; width:2px; height:14px;
  background:var(--indygo); transform:translateY(-50%); transition:opacity var(--przejscie);
}
.swp-faq details[open] summary::before{opacity:0}
.swp-faq summary:hover{color:var(--indygo)}
.swp-faq__odp{padding:0 44px 26px 0; color:var(--tekst-3); font-size:var(--body); line-height:1.7}
.swp-faq__odp > * + *{margin-top:.9em}

/* -----------------------------------------------------------------------------
   18 CTA
-------------------------------------------------------------------------- */
.swp-cta{position:relative; overflow:hidden; background:linear-gradient(135deg,#5D5FAC 0%,#5D5FAC 52%,#6A408D 100%); color:var(--biel)}
.swp-cta::before{
  content:""; position:absolute; inset:0;
  background-image:radial-gradient(circle,#fff 1.1px,transparent 1.1px);
  background-size:26px 26px; opacity:.15;
}
.swp-cta__in{position:relative; z-index:1; text-align:center; padding-block:var(--sekcja)}
.swp-cta h2{color:#fff; margin-bottom:18px}
.swp-cta p{color:rgba(255,255,255,.86); font-size:var(--lead); line-height:1.6; max-width:60ch; margin:0 auto 36px}
.swp-cta__kontakt{
  margin-top:34px; padding-top:26px; border-top:1px solid rgba(255,255,255,.22);
  display:flex; flex-wrap:wrap; gap:14px 40px; justify-content:center;
  font-size:var(--small); color:rgba(255,255,255,.86);
}
/* Flex musi objac takze <span> z zegarem i pinezka, nie tylko <a> z mailem.
   Bez tego ikona w spanie zachowywala sie jak zwykly element liniowy
   i przy waskim wierszu spadala do osobnej linii nad tekstem. */
.swp-cta__kontakt a,
.swp-cta__kontakt span{display:inline-flex; align-items:center; gap:8px; white-space:nowrap}
.swp-cta__kontakt a{color:#fff; text-decoration:none; font-weight:700}
.swp-cta__kontakt a:hover{text-decoration:underline}
.swp-cta__kontakt svg{width:17px; height:17px; flex:none}

/* Pasek kontaktowy - wariant lekki */
.swp-pasek{
  background:var(--lawenda); border-radius:var(--r-karta); padding:36px 40px;
  display:flex; flex-wrap:wrap; gap:24px; align-items:center; justify-content:space-between;
}
.swp-pasek h3{margin-bottom:6px}
.swp-pasek p{color:var(--tekst-3); font-size:var(--small)}
@media (max-width:600px){ .swp-pasek{padding:26px 22px} }

/* -----------------------------------------------------------------------------
   19 STOPKA
-------------------------------------------------------------------------- */
.swp-stopka{background:var(--grafit); color:rgba(255,255,255,.66); padding-top:72px}
.swp-stopka__siatka{
  display:grid; grid-template-columns:1.5fr 1fr 1fr 1fr; gap:48px; padding-bottom:56px;
}
@media (max-width:900px){ .swp-stopka__siatka{grid-template-columns:1fr 1fr; gap:40px 32px} }
@media (max-width:560px){ .swp-stopka__siatka{grid-template-columns:1fr} }
.swp-stopka__logo img{height:44px; width:auto; margin-bottom:22px}
.swp-stopka__opis{font-size:var(--small); line-height:1.7; max-width:38ch; color:rgba(255,255,255,.66)}
.swp-stopka h3{
  font-family:var(--text); font-weight:700; font-size:12px; letter-spacing:.2em;
  text-transform:uppercase; color:var(--mgla); margin-bottom:20px;
}
.swp-stopka ul{display:grid; gap:11px}
.swp-stopka a{color:rgba(255,255,255,.66); text-decoration:none; font-size:var(--small); transition:color var(--przejscie)}
.swp-stopka a:hover{color:#fff}
.swp-stopka__dane{margin-top:22px; font-size:var(--small); line-height:1.8; display:grid; gap:8px}
.swp-stopka__dane a{display:inline-flex; align-items:center; gap:9px; color:#fff; font-weight:500}
.swp-stopka__dane svg{width:16px; height:16px; color:var(--mgla); flex:none}
/* Miasta - pełnej szerokości wiersz, zawijany do tylu kolumn, ile się zmieści */
.swp-stopka__miasta{border-top:1px solid rgba(255,255,255,.14); padding-block:32px}
.swp-stopka__miasta ul{
  display:grid; gap:11px 32px;
  grid-template-columns:repeat(auto-fill, minmax(230px, 1fr));
}
@media (max-width:520px){
  .swp-stopka__miasta ul{grid-template-columns:1fr}
}

.swp-stopka__dol{
  border-top:1px solid rgba(255,255,255,.14); padding-block:26px;
  display:flex; flex-wrap:wrap; gap:12px 28px; align-items:center; justify-content:space-between;
  font-size:13px; color:rgba(255,255,255,.5);
}
.swp-stopka__dol a{font-size:13px}
.swp-stopka__prawne{display:flex; flex-wrap:wrap; gap:8px 22px; align-items:center}

.swp-social{display:inline-flex; gap:10px; align-items:center}
.swp-social a{
  display:inline-flex; align-items:center; justify-content:center;
  width:36px; height:36px; border-radius:var(--r-pole);
  border:1px solid rgba(255,255,255,.2); color:rgba(255,255,255,.7);
  transition:background var(--przejscie), color var(--przejscie), border-color var(--przejscie);
}
.swp-social a:hover{background:var(--indygo); border-color:var(--indygo); color:#fff}
.swp-social .swp-svg{width:18px; height:18px}

/* -----------------------------------------------------------------------------
   19b PŁYWAJĄCY PRZYCISK TELEFONU (tylko mobile)
-------------------------------------------------------------------------- */
.swp-dzwon{
  display:none;
  position:fixed; right:16px; bottom:16px; z-index:800;
  align-items:center; gap:10px;
  background:var(--zielen-jasna); color:var(--grafit);
  padding:14px 20px; border-radius:var(--r-pigulka);
  font-weight:700; font-size:15px; text-decoration:none;
  box-shadow:0 8px 24px rgba(17,17,17,.24);
  transition:transform var(--przejscie), opacity var(--przejscie), background var(--przejscie);
}
.swp-dzwon:hover,.swp-dzwon:focus-visible{background:var(--zielen-jasna-hover); color:var(--grafit)}
.swp-dzwon .swp-svg{width:19px; height:19px; color:var(--grafit)}

/* Chowa się, gdy w polu widzenia jest formularz - dwa wezwania do działania
   naraz konkurują ze sobą. Klasę zdejmuje i nakłada skrypt motywu. */
.swp-dzwon.jest-schowany{opacity:0; transform:translateY(90px); pointer-events:none}

@media (max-width:900px){
  .swp-dzwon{display:inline-flex}
  /* Miejsce na przycisk, żeby nie zasłaniał stopki */
  .swp-stopka__dol{padding-bottom:84px}
}
@media (max-width:380px){
  .swp-dzwon span{display:none}
  .swp-dzwon{padding:15px; border-radius:50%}
}
@media (prefers-reduced-motion:reduce){
  .swp-dzwon{transition:none}
}

/* -----------------------------------------------------------------------------
   20 UTILITY
-------------------------------------------------------------------------- */
.swp-sr{
  position:absolute; width:1px; height:1px; padding:0; margin:-1px;
  overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0;
}
.swp-srodek{text-align:center}
.swp-mt-0{margin-top:0}
.swp-mt-s{margin-top:16px}
.swp-mt-m{margin-top:32px}
.swp-mt-l{margin-top:56px}
.swp-mb-m{margin-bottom:32px}
.swp-brak{display:none !important}
.swp-przewijaj{overflow-x:auto; -webkit-overflow-scrolling:touch}

/* Hasło do stron chronionych */
.swp-haslo{
  max-width:520px; margin:0 auto; text-align:center;
  border:1px solid var(--separator); border-radius:var(--r-karta); padding:44px 40px;
}
.swp-haslo .swp-ikona{margin-inline:auto}
.swp-haslo form{display:flex; flex-direction:column; gap:14px; margin-top:26px; text-align:left}
@media (max-width:520px){ .swp-haslo{padding:30px 22px} }

/* -----------------------------------------------------------------------------
   21 RAPORTY KLIENCKIE
   Materiały za hasłem: audyty SEO, profile klienta, propozycje techniczne.
   Mają czytać się jak dokument, a nie jak podstrona oferty.
-------------------------------------------------------------------------- */
.swp-raport{max-width:var(--kontener-waski); margin-inline:auto}

/* Bez paska koloru na górnej krawędzi - patrz komentarz przy .swp-karta--akcent.
   Nadtytuł raportu siedzi w pełnym bloku indygo, tak jak człony adresu w logo. */
.swp-raport__glowa{
  background:var(--lawenda);
  border-radius:var(--r-karta); padding:36px 40px; margin-bottom:48px;
}
.swp-raport__nad{
  display:inline-block;
  background:var(--indygo); color:var(--biel);
  font-size:12px; font-weight:700; letter-spacing:.2em; text-transform:uppercase;
  padding:6px 12px; margin-bottom:16px;
}
.swp-raport__tytul{font-family:var(--sans); font-weight:700; font-size:var(--h2); line-height:1.15; letter-spacing:-.01em}
.swp-raport__klient{font-family:var(--sans); font-weight:500; font-size:var(--h4); color:var(--indygo-deep); margin-top:10px}
.swp-raport__meta{font-size:var(--small); color:var(--tekst-3); margin-top:12px}

/* Sekcja z numerem w bloku indygo - ten sam gest, co w logo */
.swp-raport__sekcja{
  display:flex; align-items:center; gap:14px;
  font-family:var(--sans); font-weight:700; font-size:var(--h3); line-height:1.25;
  margin:56px 0 22px; padding-top:26px; border-top:1px solid var(--separator);
  scroll-margin-top:calc(var(--naglowek-h) + 20px);
}
.swp-raport__sekcja:first-of-type{border-top:0; padding-top:0; margin-top:0}
.swp-raport__numer{
  flex:none; display:inline-flex; align-items:center; justify-content:center;
  min-width:38px; height:38px; padding:0 8px;
  background:var(--indygo); color:var(--biel);
  font-size:17px; font-weight:700; letter-spacing:-.01em;
}

.swp-raport__etykieta{
  font-family:var(--sans); font-weight:500; font-size:var(--h4); line-height:1.35;
  margin:32px 0 10px; color:var(--grafit);
}
.swp-raport h5.swp-raport__etykieta{font-size:18px}

/* Wyróżniona wartość pod etykietą */
.swp-raport__wartosc{
  font-family:var(--sans); font-weight:500; font-size:var(--body);
  color:var(--indygo-deep); background:var(--lawenda);
  padding:12px 18px; border-radius:var(--r-pole); margin:0 0 14px;
  display:inline-block;
}

.swp-raport p{margin:0 0 14px; line-height:1.75; color:var(--tekst-2); max-width:var(--miara)}

.swp-raport__lista{margin:0 0 22px; display:grid; gap:9px; max-width:var(--miara)}
.swp-raport__lista li{position:relative; padding-left:26px; line-height:1.65; color:var(--tekst-2)}
.swp-raport__lista li::before{
  content:""; position:absolute; left:0; top:.58em;
  width:8px; height:8px; background:var(--indygo);
}

/* Persona - karta z imieniem i cytatem */
.swp-raport__persona{
  font-family:var(--sans); font-weight:700; font-size:20px; line-height:1.3;
  margin:36px 0 10px; padding-left:16px; border-left:3px solid var(--indygo);
}
.swp-raport__cytat{
  margin:0 0 26px; padding:18px 22px;
  background:var(--lawenda); border-radius:var(--r-pole);
  font-size:var(--body); line-height:1.6; color:var(--indygo-deep);
  font-style:normal; max-width:var(--miara);
}

/* Ramka na samodzielny dokument HTML (makiety, generatory ofert) */
.swp-raport__ramka{
  border:1px solid var(--separator); border-radius:var(--r-karta);
  overflow:hidden; background:var(--biel); margin-bottom:18px;
}
.swp-raport__ramka iframe{
  width:100%; height:min(1400px, calc(100vh - 140px));
  border:0; display:block;
}

@media (max-width:640px){
  .swp-raport__glowa{padding:26px 22px; margin-bottom:34px}
  .swp-raport__sekcja{gap:11px; margin-top:40px}
  .swp-raport__numer{min-width:32px; height:32px; font-size:15px}
  .swp-raport__ramka iframe{height:calc(100vh - 120px)}
}

/* -----------------------------------------------------------------------------
   22 ZGODA NA COOKIES
   Modal na środku, reszta strony rozmyta i zablokowana do czasu decyzji.
-------------------------------------------------------------------------- */
.swp-cc{
  position:fixed; inset:0; z-index:2147483000;
  display:flex; align-items:center; justify-content:center;
  padding:24px 18px; opacity:0; transition:opacity .28s ease;
}
.swp-cc[hidden]{display:none}
.swp-cc.jest-widoczny{opacity:1}

.swp-cc__tlo{
  position:absolute; inset:0;
  background:rgba(17,17,17,.62);
  -webkit-backdrop-filter:blur(8px); backdrop-filter:blur(8px);
}

.swp-cc__karta{
  position:relative; z-index:1;
  width:min(660px,96vw); max-height:92vh; overflow-y:auto; -webkit-overflow-scrolling:touch;
  background:var(--biel); color:var(--grafit);
  border-top:4px solid var(--indygo); border-radius:var(--r-karta);
  box-shadow:var(--cien-modal);
  padding:40px 44px 32px; text-align:center;
  transform:translateY(16px) scale(.985);
  transition:transform .3s cubic-bezier(.2,.8,.3,1);
}
.swp-cc.jest-widoczny .swp-cc__karta{transform:none}

.swp-cc__logo{width:auto; height:46px; margin:0 auto 24px; object-fit:contain}
.swp-cc__tytul{font-size:28px; line-height:1.2; margin-bottom:14px}
.swp-cc__opis{
  font-size:15px; line-height:1.65; color:var(--tekst-3);
  max-width:54ch; margin:0 auto 26px;
}

.swp-cc__lista{
  text-align:left; background:var(--lawenda); border-radius:var(--r-pole);
  padding:6px 22px; margin-bottom:26px;
}
.swp-cc__lista li{padding:16px 0; border-bottom:1px solid rgba(93,95,172,.14)}
.swp-cc__lista li:last-child{border-bottom:0}
.swp-cc__lista p{font-size:13px; line-height:1.6; color:var(--tekst-3); margin-top:6px}
.swp-cc__nazwa{display:flex; align-items:center; gap:12px}
.swp-cc__nazwa strong{font-family:var(--sans); font-weight:500; font-size:16px}
.swp-cc__zawsze{
  margin-left:auto; font-size:11px; font-weight:700; letter-spacing:.14em;
  text-transform:uppercase; color:var(--indygo-deep);
  background:var(--mgla); padding:4px 10px; border-radius:var(--r-pigulka);
}

/* Przełącznik kategorii */
.swp-cc__przelacznik{display:flex; align-items:center; gap:12px; cursor:pointer}
.swp-cc__przelacznik input{position:absolute; opacity:0; width:0; height:0}
.swp-cc__suwak{
  flex:none; width:44px; height:24px; border-radius:var(--r-pigulka);
  background:var(--mgla); position:relative; transition:background var(--przejscie);
}
.swp-cc__suwak::after{
  content:""; position:absolute; top:3px; left:3px; width:18px; height:18px;
  border-radius:50%; background:var(--biel); transition:transform var(--przejscie);
  box-shadow:0 1px 3px rgba(17,17,17,.28);
}
.swp-cc__przelacznik input:checked + .swp-cc__suwak{background:var(--indygo)}
.swp-cc__przelacznik input:checked + .swp-cc__suwak::after{transform:translateX(20px)}
.swp-cc__przelacznik input:focus-visible + .swp-cc__suwak{outline:3px solid var(--indygo); outline-offset:2px}

.swp-cc__przyciski{display:flex; flex-wrap:wrap; gap:12px; justify-content:center; align-items:center}
.swp-cc__przyciski .swp-btn{flex:1 1 220px; max-width:280px}
.swp-cc__przyciski .swp-btn--duch{flex:0 0 auto; max-width:none}

.swp-cc__stopka{
  margin-top:22px; padding-top:18px; border-top:1px solid var(--separator);
  font-size:12px; line-height:1.6; color:var(--szary);
}
.swp-cc__stopka a{color:var(--indygo)}

html.swp-cc-blokada, html.swp-cc-blokada body{overflow:hidden !important}

@media (max-width:640px){
  .swp-cc{padding:12px}
  .swp-cc__karta{padding:28px 20px 24px; max-height:94vh}
  .swp-cc__logo{height:38px; margin-bottom:18px}
  .swp-cc__tytul{font-size:22px}
  .swp-cc__opis{font-size:14px; margin-bottom:20px}
  .swp-cc__lista{padding:4px 16px}
  .swp-cc__przyciski{flex-direction:column}
  .swp-cc__przyciski .swp-btn{width:100%; max-width:none; flex:none}
}
@media (prefers-reduced-motion:reduce){
  .swp-cc,.swp-cc__karta{transition:none}
}

/* Druk */
@media print{
  .swp-naglowek,.swp-stopka,.swp-cta,.swp-cc,.swp-burger{display:none !important}
  body{font-size:11pt}
  a[href^="http"]::after{content:" (" attr(href) ")"; font-size:9pt; color:#555}
}

/* =============================================================================
   CENNIK - karty pakietow i tabela zbiorcza
   ========================================================================== */

.swp-ceny{
  display:grid; grid-template-columns:repeat(3,1fr); gap:22px; align-items:start;
}
.swp-cen{
  position:relative; display:flex; flex-direction:column; height:100%;
  padding:30px 26px 26px; background:var(--biel);
  border:1px solid var(--separator); border-radius:var(--r-karta);
}
/* Wariant polecany jest wyzszy i ma pelny akcent - to jest ten,
   ktory ma sie rzucic w oczy jako pierwszy. */
.swp-cen--polecany{
  border-color:var(--indygo); box-shadow:0 18px 44px rgba(93,95,172,.16);
  padding-top:38px;
}
.swp-cen__wstega{
  position:absolute; top:-1px; left:50%; transform:translate(-50%,-50%);
  padding:6px 16px; border-radius:999px; white-space:nowrap;
  background:var(--indygo); color:#fff;
  font-size:12px; font-weight:600; letter-spacing:.03em;
}
.swp-cen__nazwa{margin:0; font-size:1.35rem}
.swp-cen__dla{margin:8px 0 0; font-size:var(--small); color:var(--tekst-3)}
.swp-cen__kwota{
  margin:20px 0 22px; padding-bottom:20px;
  border-bottom:1px solid var(--separator);
  display:flex; flex-wrap:wrap; align-items:baseline; gap:8px;
}
.swp-cen__kwota strong{font-family:var(--font-naglowki); font-size:2.1rem; line-height:1}
.swp-cen__kwota span{font-size:var(--small); color:var(--tekst-3)}
.swp-cen__lista{list-style:none; margin:0 0 24px; padding:0; flex:1}
.swp-cen__lista li{display:flex; gap:10px; align-items:flex-start; padding:7px 0; font-size:var(--small)}
.swp-cen__lista svg{color:var(--indygo); margin-top:.15em}

/* Lista rzeczy wliczonych w kazdy pakiet - dwie kolumny, bo pozycji jest duzo
   i w jednej kolumnie robil sie z tego niekonczacy sie slupek. */
.swp-w-kazdym{
  margin-top:30px; padding:28px 30px;
  background:var(--biel); border:1px solid var(--separator); border-radius:var(--r-karta);
}
.swp-w-kazdym h3{margin:0 0 16px; font-size:1.1rem}
.swp-w-kazdym ul{
  list-style:none; margin:0; padding:0;
  display:grid; grid-template-columns:repeat(auto-fill,minmax(230px,1fr)); gap:10px 26px;
}
.swp-w-kazdym li{display:flex; gap:9px; align-items:center; font-size:var(--small)}
.swp-w-kazdym svg{color:var(--indygo); flex:none}

/* Tabela zbiorcza. Wrapper przewija sie poziomo sam, zeby dluga nazwa uslugi
   nie rozpychala calej strony na telefonie. */
.swp-tabela-wrap{overflow-x:auto; -webkit-overflow-scrolling:touch; border-radius:var(--r-karta)}
.swp-tabela-cen{
  width:100%; min-width:520px; border-collapse:collapse;
  background:var(--biel); font-size:var(--small);
}
.swp-tabela-cen th,
.swp-tabela-cen td{padding:15px 20px; border-bottom:1px solid var(--separator); text-align:left}
.swp-tabela-cen tr:last-child th,
.swp-tabela-cen tr:last-child td{border-bottom:0}
.swp-tabela-cen th{font-weight:400}
.swp-tabela-cen__cena{text-align:right; white-space:nowrap}
.swp-tabela-cen__termin{text-align:right; white-space:nowrap; color:var(--szary)}

@media (max-width:900px){
  .swp-ceny{grid-template-columns:1fr; gap:30px}
  .swp-cen--polecany{order:-1}
}
@media (max-width:560px){
  .swp-cen{padding:26px 20px 22px}
  .swp-w-kazdym{padding:22px 20px}
}

/* Wizytowka autora (E-E-A-T). Zdjecie w kole u gory karty - twarz i nazwisko
   przy tresci to sygnal, ktorego Google szuka przy poradach branzowych. */
.swp-autor{text-align:center}
.swp-autor__foto{
  width:132px; height:132px; margin:0 auto 18px; display:block;
  border-radius:50%; object-fit:cover;
  border:4px solid var(--biel); box-shadow:0 10px 30px rgba(17,17,17,.14);
}
.swp-autor__rola{
  margin:6px 0 16px; color:var(--indygo); font-weight:700;
  letter-spacing:.14em; text-transform:uppercase; font-size:12px;
}
.swp-autor .swp-pakiet__lista{text-align:left}

/* =============================================================================
   WYSZUKIWARKA I STRONA 404
   ========================================================================== */

.swp-szukajka{
  position:relative; display:flex; gap:10px; align-items:center;
  max-width:640px; margin:26px 0 0;
}
.swp-szukajka__ikona{
  position:absolute; left:18px; top:50%; transform:translateY(-50%);
  color:var(--szary); pointer-events:none; display:flex;
}
.swp-szukajka__ikona svg{width:20px; height:20px}
.swp-szukajka__pole{
  flex:1; min-width:0; height:56px;
  padding:0 18px 0 50px;
  border:1px solid var(--separator); border-radius:999px;
  background:var(--biel); color:var(--tekst);
  font-family:var(--sans); font-size:16px;
  transition:border-color .18s, box-shadow .18s;
  -webkit-appearance:none; appearance:none;
}
.swp-szukajka__pole:focus{
  outline:none; border-color:var(--indygo);
  box-shadow:0 0 0 4px rgba(93,95,172,.16);
}
.swp-szukajka__pole::-webkit-search-cancel-button{-webkit-appearance:none}
.swp-szukajka__btn{height:56px; padding-inline:28px; border-radius:999px; flex:none}
.swp-szukajka--duza{margin-inline:auto}
.swp-szukajka--duza .swp-szukajka__pole{height:62px}
.swp-szukajka--duza .swp-szukajka__btn{height:62px}

/* Na gradiencie pole musi zostac biale, a nie przezroczyste. */
.swp-hero--gradient .swp-szukajka__pole{border-color:transparent}

/* Wyniki. Jedna kolumna - przy wyszukiwaniu liczy sie kolejnosc trafnosci,
   a siatka dwukolumnowa te kolejnosc zaciera. */
.swp-wyniki{display:grid; gap:12px}
.swp-wynik{
  display:grid; gap:5px; padding:20px 24px;
  background:var(--biel); border:1px solid var(--separator);
  border-radius:var(--r-karta); text-decoration:none; color:inherit;
  transition:border-color .18s, box-shadow .18s, transform .18s;
}
.swp-wynik:hover{
  border-color:var(--indygo); box-shadow:var(--cien-hover);
  transform:translateY(-2px);
}
.swp-wynik__typ{
  font-size:11px; font-weight:700; letter-spacing:.14em; text-transform:uppercase;
  color:var(--indygo);
}
.swp-wynik__tytul{font-family:var(--font-naglowki); font-size:1.15rem; line-height:1.3}
.swp-wynik__opis{font-size:var(--small); color:var(--tekst-3)}

/* Strona 404 */
.swp-404__in{text-align:center; display:grid; justify-items:center}
.swp-404__kod{
  display:block; font-family:var(--font-naglowki); font-weight:700;
  font-size:clamp(72px,15vw,150px); line-height:.9;
  color:rgba(255,255,255,.16); letter-spacing:.02em; margin-bottom:6px;
}
.swp-404 .swp-hero__lead{max-width:60ch; margin-inline:auto}
.swp-404__szybkie{
  display:flex; flex-wrap:wrap; gap:10px 14px; align-items:center;
  justify-content:center; margin-top:26px; font-size:var(--small);
}
.swp-404__szybkie span{color:rgba(255,255,255,.62)}
.swp-404__szybkie a{
  padding:7px 16px; border-radius:999px; text-decoration:none;
  border:1px solid rgba(255,255,255,.28); color:#fff;
  transition:background .18s, border-color .18s;
}
.swp-404__szybkie a:hover{background:rgba(255,255,255,.14); border-color:rgba(255,255,255,.5)}

/* Ten sam pasek uzywany jest na jasnym tle w wynikach wyszukiwania. */
.swp-karta .swp-404__szybkie span{color:var(--szary)}
.swp-karta .swp-404__szybkie a{border-color:var(--separator); color:var(--indygo)}
.swp-karta .swp-404__szybkie a:hover{background:var(--lawenda); border-color:var(--indygo)}

@media (max-width:640px){
  .swp-szukajka{flex-direction:column; align-items:stretch; gap:12px; width:100%}

  /* flex:1 z układu poziomego oznacza flex-basis:0. Po obróceniu kierunku
     na pionowy osią główną staje się wysokość, więc ta baza kasowała
     height:56px i pole zapadało się do kilkunastu pikseli. */
  .swp-szukajka__pole{flex:none}

  .swp-szukajka__btn{width:100%}
  .swp-szukajka__ikona{top:28px}
  .swp-szukajka--duza .swp-szukajka__ikona{top:31px}
  .swp-wynik{padding:17px 19px}
}

/* Hero 404 układa treść siatką z justify-items:center, przez co każde dziecko
   zwęża się do szerokości własnej zawartości - formularz wychodził wtedy
   szeroki na tyle, ile ma domyślny input, czyli ok. 280 px. */
.swp-404__in .swp-szukajka{width:100%; justify-self:stretch}

/* =============================================================================
   OKNO ZAPYTANIA O PAKIET
   ========================================================================== */

.swp-modal{position:fixed; inset:0; z-index:1200; display:flex; align-items:center; justify-content:center; padding:20px}
.swp-modal[hidden]{display:none}
.swp-modal__tlo{
  position:absolute; inset:0; background:rgba(17,17,17,.62);
  backdrop-filter:blur(4px); -webkit-backdrop-filter:blur(4px);
  opacity:0; transition:opacity .2s ease;
}
.swp-modal__okno{
  position:relative; width:100%; max-width:520px;
  max-height:calc(100dvh - 40px); overflow-y:auto;
  padding:36px 38px 32px; background:var(--biel);
  border-radius:var(--r-karta); box-shadow:0 30px 80px rgba(17,17,17,.34);
  opacity:0; transform:translateY(16px) scale(.98);
  transition:opacity .2s ease, transform .2s ease;
}
.swp-modal.jest-otwarte .swp-modal__tlo{opacity:1}
.swp-modal.jest-otwarte .swp-modal__okno{opacity:1; transform:none}

.swp-modal__x{
  position:absolute; top:14px; right:14px;
  width:38px; height:38px; display:flex; align-items:center; justify-content:center;
  border:0; border-radius:50%; background:transparent; color:var(--szary); cursor:pointer;
  transition:background .18s, color .18s;
}
.swp-modal__x:hover{background:var(--lawenda); color:var(--indygo)}
.swp-modal__x svg{width:20px; height:20px}

.swp-modal__cena{
  display:inline-block; margin:2px 0 14px; padding:7px 16px;
  border-radius:999px; background:var(--lawenda); color:var(--indygo);
  font-weight:700; font-size:var(--small);
}
.swp-modal__lead{margin-bottom:24px; color:var(--tekst-3)}
.swp-modal .swp-form{margin:0}

/* Druga kwota na karcie integracji - koszt miesieczny pod jednorazowym. */
.swp-cen__drugakwota{
  margin:-14px 0 20px; padding-bottom:18px;
  border-bottom:1px solid var(--separator);
  font-size:var(--small); color:var(--tekst-3);
}
.swp-cen__drugakwota strong{color:var(--tekst)}

@media (max-width:560px){
  .swp-modal{padding:0; align-items:flex-end}
  /* Na telefonie okno wjezdza od dolu i trzyma sie krawedzi - kciuk
     jest bliżej dolu ekranu niż srodka. */
  .swp-modal__okno{
    max-width:none; max-height:92dvh;
    padding:30px 22px 26px;
    border-radius:var(--r-karta) var(--r-karta) 0 0;
    transform:translateY(40px);
  }
}
@media (prefers-reduced-motion:reduce){
  .swp-modal__tlo,.swp-modal__okno{transition:none}
}

/* =============================================================================
   PRZELACZNIK JEZYKA
   ========================================================================== */

.swp-jezyk{
  display:inline-flex; align-items:center; gap:8px; flex:none;
  padding:7px 13px 7px 9px; border-radius:999px;
  border:1px solid var(--separator); background:var(--biel);
  color:var(--tekst-3); text-decoration:none;
  font-size:13px; font-weight:700; letter-spacing:.04em;
  transition:border-color .18s, color .18s, background .18s;
}
.swp-jezyk:hover{border-color:var(--indygo); color:var(--indygo); background:var(--lawenda)}
.swp-flaga{
  width:22px; height:15px; flex:none; display:block;
  border-radius:2px; box-shadow:0 0 0 1px rgba(17,17,17,.08);
}

/* W menu mobilnym przelacznik ma wlasny wiersz nad przyciskami. */
@media (max-width:1080px){
  .swp-naglowek__cta .swp-jezyk{margin-right:4px}
}
@media (max-width:420px){
  /* Przy bardzo waskim ekranie zostaje sama flaga - skrot jezyka
     dubluje informacje, ktora flaga i tak niesie. */
  .swp-jezyk{padding:7px 9px}
  .swp-jezyk span{display:none}
}

/* Naglowek grupy w przegladzie cennika na stronie glownej.
   Cennik ma tam cztery bloki (strony, SEO, IT, pozostale), wiec potrzebuje
   wlasnego stopnia naglowka - inaczej karty zlewaja sie w jedna sciane. */
.swp-cennik__grupa{
  display:flex; flex-wrap:wrap; align-items:baseline; gap:6px 14px;
  margin:44px 0 20px; padding-bottom:12px;
  border-bottom:1px solid var(--separator);
}
.swp-cennik__grupa:first-of-type{margin-top:0}
.swp-cennik__grupa span{
  font-family:var(--text); font-weight:400; font-size:var(--small);
  color:var(--szary);
}

/* Lead sekcji glownej w wersji mniejszej.
   Dwa akapity, jeden stopien pisma - inaczej pod naglowkiem powstawaly
   dwa rozne rozmiary jeden pod drugim i czytalo sie to jak dwa oderwane bloki. */
.swp-hero__lead--maly{font-size:var(--small); line-height:1.7}
.swp-hero__lead--maly p + p{margin-top:14px; color:var(--tekst-3)}

/* Dol karty dosuniety do spodu - przyciski w kartach o roznej dlugosci
   opisu maja wtedy te sama wysokosc, bo siatka i tak rownoglosci karty. */
.swp-karta__dol{margin-top:auto; padding-top:20px}

/* Tytul grupy w cenniku - wiekszy stopien, zeby oddzielal bloki kart.
   Przy .swp-h4 ginal miedzy naglowkami samych pakietow. */
.swp-cennik__grupa{
  font-family:var(--font-naglowki); font-size:var(--h3); line-height:1.25;
  margin:56px 0 22px;
}
.swp-cennik__grupa span{font-size:var(--small)}
