:root{
  --ink:#12191f;--steel:#223040;--steel-2:#2f4256;--paper:#eef1f3;--card:#fff;
  --line:#d5dce1;--line-soft:#e8edf0;--mute:#67757f;
  --amber:#f0a500;--amber-soft:#fdf2d6;--amber-ink:#7a5405;
  --green:#1b7048;--green-soft:#e5f1eb;--red:#a8241d;--red-soft:#f9ebea;
}
*{box-sizing:border-box}
body{margin:0;background:var(--paper);color:var(--ink);
  font-family:"IBM Plex Sans",system-ui,-apple-system,sans-serif;font-size:15px;line-height:1.55}
.num{font-family:"IBM Plex Mono",ui-monospace,monospace;font-variant-numeric:tabular-nums}
a{color:var(--steel-2)}

.top{background:var(--steel);color:#fff}
.top-in{max-width:1280px;margin:0 auto;padding:0 20px;display:flex;align-items:center;gap:14px;height:56px}
.logo{font-weight:600;font-size:16px;white-space:nowrap}
.logo em{font-style:normal;color:var(--amber)}
.firma{font-size:13px;color:#a9b7c3;border-left:1px solid #46586a;padding-left:14px;white-space:nowrap}
.kto{margin-left:auto;display:flex;align-items:center;gap:12px;font-size:13px;color:#b9c5cf}
.kto form{margin:0}
.kto button{font:inherit;font-size:13px;background:none;border:1px solid #46586a;color:#c9d5de;padding:4px 12px;cursor:pointer}
.kto button:hover{background:#2f4256;color:#fff}

.tabs{background:var(--steel-2);overflow-x:auto;display:flex;gap:2px;padding:0 20px}
.tabs a{color:#c0ccd6;text-decoration:none;font-size:14px;padding:10px 14px;border-bottom:3px solid transparent;white-space:nowrap}
.tabs a:hover{color:#fff;background:#3a5068}
.tabs a.on{color:#fff;border-bottom-color:var(--amber);background:#3a5068}

main{max-width:1280px;margin:0 auto;padding:22px 20px 60px}
.head{display:flex;align-items:flex-end;gap:14px;flex-wrap:wrap;margin-bottom:16px}
h1{font-size:22px;font-weight:600;margin:0;letter-spacing:-.01em}
.head p{margin:0;color:var(--mute);font-size:13.5px;flex:1 1 240px}
.head .akcje{margin-left:auto;display:flex;gap:8px}

.panel{background:var(--card);border:1px solid var(--line);margin-bottom:18px}
.panel-h{padding:11px 15px;border-bottom:1px solid var(--line);background:#f7f9fa;display:flex;gap:12px;align-items:center;flex-wrap:wrap}
.panel-h h2{margin:0;font-size:14.5px;font-weight:600}
.panel-h .right{margin-left:auto;display:flex;gap:8px;align-items:center}
.note{font-size:12.5px;color:var(--mute);padding:10px 15px;background:#f7f9fa;border-top:1px solid var(--line)}

table{width:100%;border-collapse:collapse}
th{text-align:left;font-size:12px;font-weight:500;color:var(--mute);padding:9px 14px;border-bottom:1px solid var(--line);white-space:nowrap}
td{padding:10px 14px;border-bottom:1px solid var(--line-soft);vertical-align:top;font-size:14px}
tr:last-child td{border-bottom:none}
.r{text-align:right;white-space:nowrap}
.sub{display:block;font-size:12px;color:var(--mute);margin-top:2px}
.plus{color:var(--green)}
.minus{color:var(--red)}

.tag{display:inline-block;font-size:12px;padding:2px 8px;border:1px solid;white-space:nowrap}
.t-ok{color:var(--green);border-color:#b3d7c5;background:var(--green-soft)}
.t-n{color:var(--steel);border-color:var(--line);background:#f6f8f9}
.t-w{color:var(--amber-ink);border-color:#eeda9f;background:var(--amber-soft)}
.t-r{color:var(--red);border-color:#eabfbc;background:var(--red-soft)}

.kpi{display:grid;grid-template-columns:repeat(4,1fr);border:1px solid var(--line);background:var(--card);margin-bottom:18px}
.kpi > div{padding:14px 16px;border-right:1px solid var(--line-soft)}
.kpi > div:last-child{border-right:none}
.kpi .k{font-size:12.5px;color:var(--mute)}
.kpi .v{font-size:23px;font-weight:500;margin-top:2px}
.kpi .bad .v{color:var(--red)}
.two{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);gap:18px;align-items:start}

button.b,a.b{font:inherit;font-size:13.5px;background:var(--card);border:1px solid var(--steel);color:var(--ink);
  padding:6px 13px;cursor:pointer;text-decoration:none;display:inline-block}
button.b:hover,a.b:hover{background:var(--steel);color:#fff}
button.b.go,a.b.go{background:var(--steel);color:#fff}
button.b.go:hover,a.b.go:hover{background:var(--ink)}
/* Gesperrte Knoepfe waren nicht von bedienbaren zu unterscheiden — am
   Telefon sah der gesperrte "Przyjmij na magazyn" aus wie ein normaler
   Knopf, der auf Beruehrung nicht reagiert. */
button.b[disabled],button.b.go[disabled]{background:var(--card);color:var(--muted,#8a949c);
  border-color:var(--steel);opacity:.55;cursor:not-allowed}
button.b[disabled]:hover,button.b.go[disabled]:hover{background:var(--card);color:var(--muted,#8a949c)}
input,select,textarea{font:inherit;font-size:14px;padding:7px 9px;border:1px solid var(--line);background:var(--card);width:100%}
input:focus,select:focus,textarea:focus{outline:2px solid var(--amber);outline-offset:1px}
label{display:block;font-size:13px;color:var(--mute);margin-bottom:4px}
.pole{margin-bottom:14px}
.pola{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 18px;padding:16px}
.pola .szer{grid-column:1 / -1}
.stopka{padding:14px 16px;border-top:1px solid var(--line);display:flex;gap:10px;align-items:center}
.blad{color:var(--red);font-size:12.5px;margin-top:4px}
.ok{background:var(--green-soft);border:1px solid #b3d7c5;color:var(--green);padding:10px 14px;margin-bottom:16px;font-size:14px}
.szukaj{display:flex;gap:8px;align-items:center}
.szukaj input{width:220px}
.pusto{padding:22px 15px;color:var(--mute);font-size:14px}
.strony{padding:12px 15px;border-top:1px solid var(--line);font-size:13px}
.strony a,.strony span{padding:3px 8px;margin-right:2px;text-decoration:none;border:1px solid var(--line);display:inline-block}
.strony .active span{background:var(--steel);color:#fff;border-color:var(--steel)}

.login{max-width:380px;margin:9vh auto;padding:0 20px}
.login .marka{font-size:20px;font-weight:600;margin-bottom:4px}
.login .marka em{font-style:normal;color:var(--amber-ink)}
.login p.lead{color:var(--mute);font-size:13.5px;margin:0 0 20px}
.login .panel{padding:18px}

@media (max-width:900px){
  .kpi{grid-template-columns:repeat(2,1fr)}
  .kpi > div:nth-child(2){border-right:none}
  .two{grid-template-columns:minmax(0,1fr)}
  .pola{grid-template-columns:minmax(0,1fr)}
  .firma{display:none}
  th.h,td.h{display:none}
}

/* Tło aplikacji */
body {
  background: #1a2733 url('/img/bg.jpg') center top / cover no-repeat fixed;
}
body::before {
  content: "";
  position: fixed;
  inset: 0;
  background: linear-gradient(180deg, rgba(18,25,31,.55) 0%, rgba(18,25,31,.78) 100%);
  z-index: -1;
}
main { background: transparent; }
.panel, .kpi { box-shadow: 0 10px 28px rgba(0,0,0,.18); }
.head h1 { color: #fff; text-shadow: 0 1px 4px rgba(0,0,0,.4); }
.head p, .lede { color: #d3dce3; }
.tabs { background: rgba(47,66,86,.92); backdrop-filter: blur(3px); }
.top { background: rgba(34,48,64,.94); backdrop-filter: blur(3px); }

/* --- Widok mobilny --- */
@media (max-width: 820px) {
  html, body { overflow-x: hidden; max-width: 100%; }

  .wrap, .top-in, main { padding-left: 12px; padding-right: 12px; }

  /* Tabele przewijają się same, nie ciągną całej strony */
  .panel table { display: block; overflow-x: auto; -webkit-overflow-scrolling: touch; white-space: nowrap; }
  .panel table td, .panel table th { white-space: normal; }

  /* Menu przewijane poziomo, bez wypychania treści */
  .tabs { padding: 0 8px; -webkit-overflow-scrolling: touch; }
  .tabs a, .tab { padding: 11px 12px; font-size: 13.5px; }

  /* Nagłówek: nazwa firmy schodzi do drugiej linii zamiast rozpychać pasek */
  .top-in { height: auto; padding-top: 8px; padding-bottom: 8px; flex-wrap: wrap; row-gap: 4px; }
  .kto { font-size: 12px; gap: 8px; }

  /* Nagłówki stron i przyciski akcji jeden pod drugim */
  .head { flex-direction: column; align-items: stretch; gap: 8px; }
  .head .akcje { margin-left: 0; flex-wrap: wrap; }
  .head h1 { font-size: 20px; }

  /* Formularze filtrów nie wychodzą poza ekran */
  .panel-h { flex-direction: column; align-items: stretch; }
  .panel-h .right { margin-left: 0; width: 100%; }
  .panel-h .right form, .szukaj { width: 100%; }
  .szukaj input, .szukaj select { width: 100% !important; min-width: 0; }

  /* Pola formularzy na pełną szerokość */
  .pola { grid-template-columns: minmax(0, 1fr); padding: 12px; }
  input, select, textarea { max-width: 100%; }

  /* Tło nieruchome psuje przewijanie na iOS */
  body { background-attachment: scroll; }
}

/* --- Tabele jako karty na telefonie --- */
@media (max-width: 820px) {
  .panel table { display: block; overflow: visible; white-space: normal; }
  .panel table thead { display: none; }
  .panel table tbody, .panel table tr, .panel table td { display: block; width: 100%; }

  /* Ohne eigene Polsterung am .panel klebte der Karteninhalt am
     Bildschirmrand: die Zellen bekommen unten padding: 3px 0. */
  .panel table tr {
    border-bottom: 1px solid var(--line);
    padding: 12px 16px;
  }
  .panel > table { padding: 0; }
  .panel-h { padding: 12px 16px; }

  /* Feste Breiten im Blade (width:190px, width:150px) passen nicht auf ein
     Telefon: die Auswahlliste schrumpfte auf ein Symbol, der Knopf lief
     rechts aus dem Kasten. */
  .panel-h .right form { flex-wrap: wrap; gap: 8px; }
  .panel-h select, .panel-h input[type="date"], .panel-h input[type="text"] {
    width: 100% !important; min-width: 0; flex: 1 1 140px;
  }
  .panel-h .right form button.b { flex: 1 1 100%; }
  .panel table tr:last-child { border-bottom: none; }

  .panel table td {
    border: none;
    padding: 3px 0;
    text-align: left !important;
  }

  /* pierwsza komórka to tytuł karty */
  .panel table td:first-child {
    font-weight: 600;
    font-size: 15px;
    padding-bottom: 5px;
  }

  /* przyciski w wierszu na całą szerokość */
  /* Nicht auf volle Breite: der Knopf war hoeher als der Artikel darueber. */
  .panel table td:last-child a.b,
  .panel table td:last-child button.b { display: inline-block; margin-top: 8px; }

  /* Spalten mit class="h" gehoeren auf dem Telefon nicht in die Karte.
     Sonst sind es neun Zeilen je Artikel — bei 77.766 Artikeln unbenutzbar.
     Die Werte stehen auf der Detailseite. */
  .panel table td.h, .panel table th.h { display: none; }

  .panel table td.r { text-align: left !important; }
  .strony { text-align: center; }
}

@media (max-width: 820px) {
  .head p, .head .lede { flex: none; }
  .kpi { grid-template-columns: repeat(2, 1fr); }
  .kpi .v { font-size: 20px; }
  .kpi .k { font-size: 12px; }
}


/* ekran logowania: logo poza ramka, zeby nie tworzylo szarego prostokata */
.login > img {
  display: block;
  margin-left: auto;
  margin-right: auto;
  background: none;
}
.login > .lead {
  text-align: center;
  background: none;
  padding: 0;
  color: #e8edf0;
  text-shadow: 0 1px 6px rgba(0,0,0,.6);
}


/* Pozycje faktury i oferty na telefonie: tabela zamienia sie w karty.
   Osiem kolumn nie miesci sie na 380 pikselach, a przewijanie w bok
   przy wpisywaniu ceny jest nie do zniesienia. */
@media (max-width: 720px) {
  #pozycje tr {
    display: block;
    border: 1px solid var(--line);
    padding: 10px;
    margin-bottom: 10px;
    background: #fff;
  }

  #pozycje td {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    border: none;
    padding: 5px 0;
    text-align: left !important;
  }

  /* pole wyszukiwania towaru zajmuje cala szerokosc */
  #pozycje td:first-child { display: block; padding-bottom: 8px; }
  #pozycje td:first-child input[type="search"] { width: 100%; }

  /* opisy kolumn, bo naglowek tabeli jest ukryty */
  #pozycje td:nth-child(2)::before { content: "Ilosc"; color: var(--mute); font-size: 13px; }
  #pozycje td:nth-child(3)::before { content: "Cena netto"; color: var(--mute); font-size: 13px; }
  #pozycje td:nth-child(4)::before { content: "Rabat %"; color: var(--mute); font-size: 13px; }
  #pozycje td:nth-child(6)::before { content: "VAT"; color: var(--mute); font-size: 13px; }
  #pozycje td:nth-child(7)::before { content: "Wartosc brutto"; color: var(--mute); font-size: 13px; font-weight: 600; }

  #pozycje td input, #pozycje td select { width: 130px !important; text-align: right; }
  #pozycje td:last-child { justify-content: flex-end; padding-top: 8px; }
  #pozycje td:last-child button { width: 100%; }

}

/* Naglowek tabeli pozycji ukrywamy osobno — skladnia :has() nie wszedzie dziala,
   a bledna regula w bloku unieważnia wszystko po niej. */
@media (max-width: 720px) {
  thead:has(+ #pozycje) { display: none; }
}



  .wiecej-lista {
    display: block; position: static;
    border: none; box-shadow: none; min-width: 0; background: none;
  }
}

/* ---- Menu "Wiecej" (na koncu, zeby nic tego nie nadpisalo) ---- */
.tabs .wiecej { position: relative; display: inline-block; }

.tabs .wiecej > button {
  background: none; border: none; color: inherit; font: inherit;
  padding: 12px 14px; cursor: pointer;
}
.tabs .wiecej > button::after { content: " \25BE"; font-size: .8em; opacity: .7; }
.tabs .wiecej > button.on { box-shadow: inset 0 -3px 0 var(--amber-ink, #c8892a); }

.tabs .wiecej-lista {
  display: none !important;
  position: absolute; right: 0; top: 100%;
  min-width: 220px;
  background: #1e2a35;
  border: 1px solid rgba(255,255,255,.12);
  box-shadow: 0 14px 32px rgba(0,0,0,.35);
  z-index: 60;
}
.tabs .wiecej-lista.otwarte { display: block !important; }
.tabs .wiecej-lista a {
  display: block; padding: 10px 14px; white-space: nowrap;
  border-bottom: 1px solid rgba(255,255,255,.07);
}

@media (max-width: 820px) {
  .tabs .wiecej { display: block; }
  .tabs .wiecej > button { display: none; }
  .tabs .wiecej-lista {
    display: block !important; position: static;
    border: none; box-shadow: none; min-width: 0; background: none;
  }
}
