html { -webkit-font-smoothing: antialiased; }
  body { background:#05070B; color:#F3F0EA; overflow-x:hidden; }
  ::selection { background:#C2A05B; color:#05070B; }

  /* --- scrollbar --- */
  ::-webkit-scrollbar { width:10px; }
  ::-webkit-scrollbar-track { background:#05070B; }
  ::-webkit-scrollbar-thumb { background:#1E2A38; border-radius:9px; border:3px solid #05070B; }
  ::-webkit-scrollbar-thumb:hover { background:#9C7F42; }

  /* --- film grain --- */
  .grain::after{
    content:''; position:fixed; inset:0; pointer-events:none; z-index:60; opacity:.03; mix-blend-mode:overlay;
    background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='240' height='240'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='240' height='240' filter='url(%23n)'/%3E%3C/svg%3E");
  }

  /* --- hairline & glass --- */
  .hairline { background:linear-gradient(90deg,transparent,rgba(194,160,91,.42),transparent); height:1px; }
  /* Bez backdrop-filter: .glass siedzi na kartach, ktore sie przewijaja, a blur na duzej
     przewijanej powierzchni to ciagly repaint GPU. Na tle #05070B roznicy nie widac. */
  .glass { background:rgba(255,255,255,.028); border:1px solid rgba(255,255,255,.07); }
  /* blur zostaje wylacznie na elementach fixed: nav + menu mobilne */
  .glass-strong { background:rgba(8,12,19,.72); backdrop-filter:blur(22px) saturate(150%); -webkit-backdrop-filter:blur(22px) saturate(150%); }
  /* plakietki na kartach — ten sam efekt wizualnie, bez warstwy blura */
  .chip { background:rgba(6,9,14,.84); }

  /* --- double bezel: rdzen + zewnetrzna obudowa, ostrokatna (bez promienia) ---
     Obudowa rysowana box-shadow, nie dodatkowym divem — dzieki temu nie przycina jej
     overflow-hidden na kartach i nie trzeba ruszac struktury DOM. */
  /* Jedna cienka ramka o niskim kontrascie — podwojna obudowa zbyt mocno konkurowala ze zdjeciem. */
  .bezel {
    background:#0A0F17;
    border:1px solid rgba(255,255,255,.10);
    box-shadow:inset 0 1px 0 rgba(255,255,255,.05);
    transition:border-color .45s cubic-bezier(.22,1,.36,1);
  }
  article.bezel:hover { border-color:rgba(255,255,255,.17); }

  /* Lucide renderuje sie domyslnie na stroke-width 2 — za grubo dla tej typografii. */
  svg.lucide { stroke-width:1.35; }

  /* --- gold text --- */
  .goldtext { background:linear-gradient(100deg,#9C7F42 0%,#EBD6A3 32%,#D9BC7C 55%,#F5E9CC 78%,#C2A05B 100%); -webkit-background-clip:text; background-clip:text; color:transparent; }

  /* --- reveal on scroll --- */
  .reveal { opacity:0; transform:translateY(28px); transition:opacity .9s cubic-bezier(.22,1,.36,1), transform .9s cubic-bezier(.22,1,.36,1); }
  .reveal.in { opacity:1; transform:none; }

  /* --- underline link --- */
  .ulink { position:relative; }
  .ulink::after { content:''; position:absolute; left:0; bottom:-5px; height:1px; width:0; background:#C2A05B; transition:width .45s cubic-bezier(.22,1,.36,1); }
  .ulink:hover::after, .ulink.active::after { width:100%; }
  .ulink.active { color:#EBD6A3; }

  /* --- buttons --- */
  .btn-gold { position:relative; overflow:hidden; background:linear-gradient(115deg,#C2A05B,#EBD6A3 48%,#B08F4C); color:#05070B;
    transition:transform .35s cubic-bezier(.22,1,.36,1); }
  .btn-gold:active { transform:scale(.985); }
  .btn-gold::before { content:''; position:absolute; inset:0; transform:translateX(-120%); background:linear-gradient(100deg,transparent,rgba(255,255,255,.65),transparent); transition:transform .8s cubic-bezier(.22,1,.36,1); }
  .btn-gold:hover::before { transform:translateX(120%); }

  /* --- form --- */
  .field { background:rgba(255,255,255,.03); border:1px solid rgba(255,255,255,.09); transition:border-color .3s, box-shadow .3s, background .3s; }
  .field:focus { outline:none; border-color:rgba(194,160,91,.7); box-shadow:0 0 0 3px rgba(194,160,91,.12); background:rgba(255,255,255,.05); }
  .field::placeholder { color:#5D6675; }
  select.field option { background:#0B111A; color:#F3F0EA; }

  /* --- smart header: chowa sie przy przewijaniu w dol, wraca przy ruchu w gore --- */
  /* transition podany jawnie, bo #nav (1,0,0) wygralby z Tailwindowym .transition-all */
  #nav { transition:transform .45s cubic-bezier(.22,1,.36,1),
                    background-color .5s cubic-bezier(.22,1,.36,1),
                    border-color .5s cubic-bezier(.22,1,.36,1);
         will-change:transform; }
  #nav.nav-hidden { transform:translateY(-100%); }

  /* --- menu mobilne: pelnoekranowa nakladka --- */
  #mobileMenu { position:fixed; inset:0; z-index:70; display:none; flex-direction:column; justify-content:center;
    padding:max(92px,calc(env(safe-area-inset-top) + 92px)) 28px max(40px,env(safe-area-inset-bottom));
    background:#080C13; overflow-y:auto; overscroll-behavior:contain; }
  #mobileMenu.open { display:flex; animation:menu-in .3s cubic-bezier(.22,1,.36,1); }
  /* nakladka nie ma racji bytu na desktopie — Tailwindowy lg:hidden (0,1,0) przegrywa z #mobileMenu.open */
  @media (min-width:1024px) { #mobileMenu.open { display:none; } }
  @keyframes menu-in  { from { opacity:0 } to { opacity:1 } }
  @keyframes menu-row { from { opacity:0; transform:translateY(16px) } to { opacity:1; transform:none } }
  #mobileMenu.open .mob-row { animation:menu-row .5s cubic-bezier(.22,1,.36,1) both; }
  #mobileMenu.open .mob-row:nth-child(1) { animation-delay:.04s }
  #mobileMenu.open .mob-row:nth-child(2) { animation-delay:.09s }
  #mobileMenu.open .mob-row:nth-child(3) { animation-delay:.14s }
  #mobileMenu.open .mob-row:nth-child(4) { animation-delay:.19s }
  #mobileMenu.open .mob-row:nth-child(5) { animation-delay:.26s }

  /* Przy otwartym menu naglowek nie moze byc containing blockiem dla position:fixed —
     transform, will-change i backdrop-filter uwiezilyby nakladke w wysokosci paska.
     Nakladka jest dzieckiem <header id="nav">, wiec to realne ryzyko, nie teoria. */
  body.menu-open #nav, body.menu-open #nav.nav-hidden {
    /* transition:none jest tu kluczowe. Bez tego powrot paska z translateY(-100%) trwa 450 ms,
       a przez caly ten czas naglowek pozostaje containing blockiem i nakladka menu jest w nim
       uwieziona — zamiast pelnego ekranu widac pasek o wysokosci ok. 130 px. */
    transform:none; transition:none; will-change:auto;
    backdrop-filter:none; -webkit-backdrop-filter:none; }

  /* --- kotwice: offset z realnie zmierzonej wysokosci paska --- */
  section[id] { scroll-margin-top:var(--anchor-offset, 6rem); }

  @keyframes floaty { 0%,100%{ transform:translateY(0) } 50%{ transform:translateY(-9px) } }
  .floaty { animation:floaty 4.5s ease-in-out infinite; }

  @media (prefers-reduced-motion: reduce) {
    * { animation:none !important; transition-duration:.01ms !important; }
    .reveal { opacity:1; transform:none; }
  }

  /* --- przelacznik jezyka (wzorzec Velosanta: <details>, ale ostrokatny) --- */
  .lang-picker summary { list-style:none; }
  .lang-picker summary::-webkit-details-marker { display:none; }
  .lang-picker summary::marker { content:''; }
  .lang-picker[open] summary .chev { transform:rotate(180deg); }
  .lang-picker .chev { transition:transform .35s cubic-bezier(.22,1,.36,1); }
  .lang-picker[open] .lang-panel { animation:lang-in .25s cubic-bezier(.22,1,.36,1); }
  @keyframes lang-in { from { opacity:0; transform:translateY(-6px) } to { opacity:1; transform:none } }

  /* ═══════════ hierarchia tekstu (wytyczne §16) ═══════════
     1 naglowek — bardzo jasny | 2 wazny tekst — jasny | 3 body — sredni szary
     4 metadata/status — przygaszony | 5 zloto — tylko akcent                        */
  .t-body { color:#B4BCC9; font-size:16px; line-height:1.65; font-weight:300; }
  .t-meta { color:#8C95A5; }
  @media (min-width:1024px) { .t-body { font-size:17.5px; line-height:1.68; } }

  /* naglowek sekcji */
  .h2 { font-family:'Cormorant Garamond',Georgia,serif; font-weight:300; color:#F3F0EA;
        font-size:clamp(2rem,4.2vw,3.4rem); line-height:1.08; letter-spacing:-.01em; }

  /* eyebrow: cienka kreska + wersaliki, bez pigulki */
  .eyebrow { display:flex; align-items:center; gap:1rem; font-size:10px; letter-spacing:.32em;
             text-transform:uppercase; color:#D9BC7C; }
  .eyebrow > span { width:2.5rem; height:1px; background:rgba(194,160,91,.6); flex:none; }
  .eyebrow-sage { color:#9CB9A0; }
  .eyebrow-sage > span { background:rgba(122,154,126,.6); }

  /* cienki separator zamiast pelnej ramki (§15) */
  .hairline-top { border-top:1px solid rgba(255,255,255,.08); }

  /* ═══════════ CTA: dokladnie dwa style (§23) ═══════════ */
  .btn-ghost { color:#F3F0EA; border:1px solid rgba(255,255,255,.18);
               transition:border-color .4s cubic-bezier(.22,1,.36,1), background-color .4s cubic-bezier(.22,1,.36,1), transform .35s cubic-bezier(.22,1,.36,1); }
  .btn-ghost:hover { border-color:rgba(194,160,91,.6); background:rgba(194,160,91,.07); }
  .btn-ghost:active { transform:scale(.985); }

  .cta-link { display:inline-flex; align-items:center; gap:.5rem; font-size:10px; letter-spacing:.32em;
              text-transform:uppercase; color:#EBD6A3; padding-bottom:.35rem;
              border-bottom:1px solid rgba(194,160,91,.4); transition:color .3s, border-color .3s; }
  .cta-link:hover { color:#F5E9CC; border-color:rgba(235,214,163,.85); }

  /* ═══════════ proces modelu operatorskiego (§11) ═══════════ */
  .proces { list-style:none; display:grid; gap:0; }
  .proces-krok { position:relative; padding:1.75rem 0 1.75rem 3.25rem; border-top:1px solid rgba(255,255,255,.08); }
  .proces-krok:last-child { border-bottom:1px solid rgba(255,255,255,.08); }
  .proces-nr { position:absolute; left:0; top:1.75rem; font-family:'Cormorant Garamond',Georgia,serif;
               font-size:1rem; color:rgba(194,160,91,.75); letter-spacing:.1em; }
  .proces-tytul { font-family:'Cormorant Garamond',Georgia,serif; font-size:1.5rem; color:#F3F0EA; line-height:1.2; }
  .proces-opis { margin-top:.4rem; color:#8C95A5; font-size:14px; font-weight:300; line-height:1.6; }

  @media (min-width:1024px) {
    /* poziomo: piec kolumn, strzalka jako cienka kreska miedzy krokami */
    .proces { grid-template-columns:repeat(5,1fr); gap:0; border-top:1px solid rgba(255,255,255,.08); }
    .proces-krok { padding:2.25rem 1.75rem 0 0; border-top:0; }
    .proces-krok:last-child { border-bottom:0; }
    .proces-nr { position:static; display:block; margin-bottom:1.1rem; }
    .proces-krok::after { content:''; position:absolute; left:0; top:-1px; width:100%; height:1px; background:transparent; }
    .proces-krok:not(:last-child)::before { content:''; position:absolute; right:1rem; top:2.5rem;
      width:.5rem; height:.5rem; border-top:1px solid rgba(194,160,91,.5); border-right:1px solid rgba(194,160,91,.5);
      transform:rotate(45deg); }
  }

  /* lacznik w schemacie grupy — cienka pionowa kreska zamiast ramki */
  .schemat-lacznik { display:flex; justify-content:center; padding:1.5rem 0; }
  .schemat-lacznik > span { width:1px; height:2.5rem; background:linear-gradient(to bottom,rgba(194,160,91,.5),rgba(122,154,126,.4)); }

  /* etykieta pola formularza */
  .lbl-form { display:block; font-size:10px; letter-spacing:.18em; text-transform:uppercase;
              color:#8C95A5; margin-bottom:.75rem; }

  /* kotwice: nie chowaj naglowkow pod paskiem */
  .anchor-safe, section[id] { scroll-margin-top:var(--anchor-offset, 6rem); }

  /* Cormorant domyslnie daje cyfry nautyczne — „101" czyta sie jak „IOI".
     Liczby maja byc jednej wysokosci, bo to KPI, nie tekst ciagly. */
  .font-display, .h2, .proces-nr, .proces-tytul { font-variant-numeric:lining-nums; font-feature-settings:'lnum' 1; }

  /* ═══════════ stopka pelnoekranowa (wytyczne §35) ═══════════ */
  .stopka { position:relative; min-height:100vh; display:flex; align-items:center; overflow:hidden; }
  .stopka-tlo { position:absolute; inset:-2%; width:104%; height:104%; object-fit:cover; object-position:center;
                filter:blur(2px); }
  /* zdjecie zostaje widoczne, ale nie konkuruje z tekstem */
  .stopka-zaslona { position:absolute; inset:0;
    background:
      radial-gradient(75% 60% at 50% 45%, rgba(26,44,38,.42), transparent 72%),
      linear-gradient(180deg, rgba(5,7,11,.88) 0%, rgba(10,20,17,.62) 32%, rgba(10,20,17,.66) 68%, rgba(5,7,11,.93) 100%); }
  .stopka-sep { height:1px; width:78%; margin-inline:auto;
                background:linear-gradient(90deg,transparent,rgba(255,255,255,.14),transparent); }
  .stopka-tel { font-family:'Cormorant Garamond',Georgia,serif; font-variant-numeric:lining-nums;
                font-size:clamp(1.9rem,4vw,2.3rem); line-height:1.1; color:#EBD6A3; letter-spacing:.01em; }
  .stopka-tel:hover { color:#F5E9CC; }
  .stopka-mail { font-family:'Cormorant Garamond',Georgia,serif; font-size:clamp(1.3rem,2.6vw,1.6rem);
                 color:#EBD6A3; }
  .stopka-mail:hover { color:#F5E9CC; }
  .stopka-nav a { font-size:14px; color:#CBD2DC; transition:color .3s; }
  .stopka-nav a:hover { color:#F3F0EA; }
  .stopka-dane { font-size:12.5px; line-height:1.9; color:#A2AAB8; }
  .soc { display:grid; place-items:center; width:46px; height:46px; border-radius:50%;
         border:1px solid rgba(194,160,91,.45); color:#D9BC7C; background:transparent;
         transition:border-color .35s, color .35s, background-color .35s; }
  .soc:hover { border-color:rgba(235,214,163,.9); color:#F5E9CC; background:rgba(194,160,91,.08); }
  @media (max-width:1023px) { .stopka { min-height:0; padding-block:5rem; align-items:flex-start; } }

  /* Tlo stopki jest jasniejsze od reszty strony, wiec te same szarosci traca kontrast.
     Podniesione o ok. 12%, zeby zmiescic sie w WCAG AA (4.5:1). */
  .stopka .t-meta { color:#A8AFBC; }
  .stopka-nota { color:#99A1AF; font-size:11.5px; line-height:1.7; }

  /* <picture> nie ma tworzyc wlasnego pudelka — obraz w srodku jest pozycjonowany absolutnie */
  .pic { display:contents; }

  /* Na dotyku samodzielne linki stopki musza miec co najmniej 24 px wysokosci celu
     (WCAG 2.5.8). Linki wewnatrz zdan sa z tego wymogu zwolnione. */
  @media (max-width:1023px) {
    .stopka-nav a,
    .stopka nav[aria-label="Informacje prawne"] a,
    .stopka nav[aria-label="Legal information"] a,
    .stopka .mt-4 a { display:inline-block; padding-block:.4rem; }
  }
