/* Arkusz maszyny dla Adriana — LIGHT MODE, kolory 1:1 z jego pliku „E5 CZERWIEC.xlsx":
   PRZYGOTOWALNIA = #FFC000 (pomarańcz), AKCEPTACJA DRUKU = #92D050 (zieleń).
   Ma wyglądać jak jego Excel, nie jak nasza ciemna apka — decyzja Stana 27.08. */
* { box-sizing: border-box; }
body { margin: 0; background: #f6f6f4; color: #1c1c1a;
  font-family: system-ui, -apple-system, "Segoe UI", sans-serif; font-size: 13px; }
/* flex-wrap: pasek dat + przycisk priorytetów dołożyły się do nagłówka — na węższym oknie
   ma się łamać w drugą linię, a nie wypychać meta poza ekran */
.top { display: flex; align-items: center; flex-wrap: wrap; gap: 10px 14px; padding: 10px 16px;
  background: #fff; border-bottom: 2px solid #d9d9d4; position: sticky; top: 0; z-index: 5; }
.brand { font-size: 14px; white-space: nowrap; }
/* picker stanowiska (?widok=…): zieleń jak plakietka, którą zastąpił — z daleka widać,
   czyja to zakładka, a zmiana przełącza ADRES karty (pełne przeładowanie) */
.widok-sel { margin-left: 8px; padding: 3px 6px; border: 1px solid #217346; border-radius: 8px;
  background: #217346; color: #fff; font: inherit; font-size: 11px; font-weight: 800;
  text-transform: uppercase; letter-spacing: .04em; cursor: pointer; }
.widok-sel option { background: #fff; color: #1c1c1a; text-transform: none; font-weight: 600; }
.machines { display: flex; gap: 4px; }
.machines button { font: inherit; font-weight: 800; padding: 5px 12px; border: 1px solid #cfcfc8;
  background: #f1f1ec; border-radius: 6px; cursor: pointer; color: #444; }
.machines button.on { background: #217346; border-color: #217346; color: #fff; }  /* zieleń Excela */
/* maszyny cyfrowe: import z hurtowni ich nie obejmuje — zakładka ma to mówić, a nie udawać pustą */
.machines button.poza { color: #a8a8a0; border-style: dashed; }
.machines button.poza.on { background: #8a8a80; border-color: #8a8a80; color: #fff; }
.spacer { flex: 1; }
.meta { font-size: 11.5px; color: #777; white-space: nowrap; }
.meta b { color: #217346; }
.meta.err b { color: #b3261e; }
.meta .hist { color: #8a6d00; }   /* „doba historyczna" w meta — bursztyn, nie zieleń */

/* ── pasek dat (spec #5): ≤7 ostatnich dób z cache importów + kalendarz na starsze ──
   Bursztyn na aktywnej dobie historycznej — z daleka ma być widać, że to NIE jest dziś
   (zieleń zostaje dla dzisiejszej, jak na aktywnej maszynie). */
.doby { display: flex; align-items: center; gap: 3px; }
.doby button { font: inherit; font-size: 11.5px; font-weight: 700; padding: 4px 8px;
  border: 1px solid #cfcfc8; background: #f1f1ec; border-radius: 6px; cursor: pointer; color: #666; }
.doby button.on { background: #217346; border-color: #217346; color: #fff; }
.doby button.on.hist { background: #b07d00; border-color: #b07d00; }
.doby input[type=date] { font: inherit; font-size: 11.5px; font-weight: 700; color: #444;
  padding: 3px 6px; margin-left: 3px; border: 1px solid #cfcfc8; border-radius: 6px; background: #fff; }
.doba-hist { font-size: 11px; font-weight: 800; color: #8a6d00; background: #fff3d6;
  border: 1px solid #e6c96e; border-radius: 6px; padding: 3px 8px; margin-left: 4px;
  white-space: nowrap; cursor: help; }

/* ── tryb „✎ priorytety" (spec #5) ──
   Przycisk w nagłówku; włączony = bursztyn (kolor nadpisań, nie zieleń bramek) i kremowe
   komórki PRIO jak przy polach REAL — „tu się teraz pisze". */
.prio-btn { font: inherit; font-size: 11.5px; font-weight: 800; padding: 4px 10px;
  border: 1px solid #cfcfc8; background: #f1f1ec; border-radius: 6px; cursor: pointer; color: #666; }
.prio-btn.on { background: #b07d00; border-color: #b07d00; color: #fff; }
#grid.prio-edit .tabulator-row .tabulator-cell.prio-cell { background: #fffbea; cursor: text; }
#grid.prio-edit .tabulator-row.tabulator-row-even .tabulator-cell.prio-cell { background: #fdf7df; }
.prio-reczny { color: #8a6d00; font-weight: 800; }   /* nadpisanie ręczne — przeżywa import */
.prio-pen { font-size: 10px; font-weight: 900; margin-left: 2px; }
main { padding: 14px 16px 30px; }
.sheet-title { font-size: 22px; font-weight: 900; letter-spacing: .02em; margin: 2px 0 10px; }
.sheet-title small { font-size: 12px; font-weight: 700; color: #888; margin-left: 10px; }
/* godzina startu doby — tymczasowa, do czasu aż poda ją panel planisty */
.seed { font-size: 12px; font-weight: 700; color: #888; margin-left: 14px; white-space: nowrap; }
.seed input { font: inherit; font-weight: 800; color: #444; padding: 2px 6px; margin: 0 6px;
  border: 1px solid #cfcfc8; border-radius: 5px; background: #fff; }
.seed-src { font-weight: 600; color: #a8a8a0; }
.foot { margin-top: 12px; font-size: 11px; color: #999; max-width: 720px; }

/* ── Tabulator w skórze Excela ──
   Skala (3.09, prośba Kamila): tabela ma być czytelna z odległości ramienia na hali —
   pismo w komórkach 14 px, wyższe wiersze, większe ✓/✗. Szerokości kolumn w app.js
   podbite razem z pismem, żeby godziny i liczby się nie przycinały. */
#grid { background: #fff; border: 1px solid #c9c9c2;
  height: calc(100vh - 148px); min-height: 420px; }  /* min-height: viewport 0 (tło karty) nie może złożyć siatki */
.tabulator { font-size: 14px; border: none; background: #fff; }
.tabulator .tabulator-header { background: #ededе8; background: #edede8; border-bottom: 2px solid #b9b9b2; }
.tabulator .tabulator-col { background: #edede8; border-right: 1px solid #d4d4cd; }
.tabulator .tabulator-col .tabulator-col-title { font-weight: 800; white-space: normal; font-size: 12.5px; }
.tabulator .tabulator-col.tabulator-col-group { border-bottom: 1px solid #b9b9b2; }
/* granice GRUP: mocniejsza pionowa kreska (nagłówek grupy, pod-nagłówek i komórki —
   klasę grp-koniec na ostatniej kolumnie grupy nadaje app.js) + tytuł grupy na środku */
.tabulator .tabulator-col.tabulator-col-group { border-right: 2px solid #9a9a92; }
.tabulator .tabulator-col.tabulator-col-group .tabulator-col-title { text-align: center; }
.tabulator .tabulator-col.grp-koniec { border-right: 2px solid #9a9a92; }
.tabulator-row .tabulator-cell.grp-koniec { border-right: 2px solid #c9c9c0; }
/* kolory nagłówków jak w pliku Adriana */
.tabulator .tabulator-col.col-przyg { background: #FFC000 !important; }
.tabulator .tabulator-col.col-przyg .tabulator-col-title { color: #201800; }
.tabulator .tabulator-col.col-akcept { background: #92D050 !important; }
.tabulator .tabulator-col.col-akcept .tabulator-col-title { color: #10250a; }
.tabulator-row { border-bottom: 1px solid #e2e2dc; min-height: 32px; }
.tabulator-row .tabulator-cell { border-right: 1px solid #ececе6; border-right: 1px solid #ecece6; padding: 7px 8px; }
.tabulator-row.tabulator-row-even { background: #fbfbf9; }
.tabulator-row:hover { background: #f1f6ee !important; }
/* komórki-checkboxy: klikalna cała komórka, ✓/✗ jak odhaczenia w jego arkuszu */
.cellchk { display: block; text-align: center; font-weight: 900; cursor: pointer; user-select: none;
  font-size: 15px; position: relative; isolation: isolate; }
.cellchk.on { color: #217346; }
.cellchk.off { color: #c0392b; opacity: .55; }
.cellchk.na { color: #9a9a92; opacity: .6; cursor: default; }   /* nie dotyczy (np. zlecenie bez sita) */

/* ── ODHACZENIE: mikrointerakcja „stempla" ──
   Bramka odhaczona ma dać sekundę satysfakcji, a nie fajerwerki: ✓ wbija się z lekkim
   przestrzeleniem (back-out), a spod niego rozchodzi się i gaśnie zielona poświata —
   jeden gest, ten sam dla FARB, SITA, SUR. Z MAG. i AKCEPTACJI. Odznaczenie to cofnięcie,
   nie nagroda, więc jest krótsze, bez przestrzelenia i bez poświaty.
   To animacja WEJŚCIOWA: `reformat()` Tabulatora wymienia zawartość komórki, więc między
   stanami nie ma wspólnego węzła, na którym mogłoby zagrać przejście. Klasę `anim-*`
   dokleja formatter tylko po kliku człowieka (bramka `swiezyKlik` w app.js) — poll co 20 s
   i przewijanie nie mają prawa nic ruszyć.
   Wyłącznie transform/opacity (kompozytor, zero reflow) — komputery na hali są słabe. */
.cellchk.anim-on { animation: chk-stempel 220ms cubic-bezier(.34, 1.56, .64, 1) both; }
.cellchk.anim-off { animation: chk-cofniecie 160ms cubic-bezier(.2, .7, .3, 1) both; }
/* poświata: własna warstwa pod znakiem (isolation na .cellchk trzyma ją nad tłem wiersza,
   a pod ✓); pastylka mieści się w wysokości komórki, więc nic jej nie przycina */
.cellchk.anim-on::before { content: ''; position: absolute; z-index: -1; pointer-events: none;
  left: 50%; top: 50%; width: 34px; height: 22px; margin: -11px 0 0 -17px;
  border-radius: 999px; background: #217346;
  animation: chk-poswiata 300ms ease-out both; }
/* dotknięcie palcem/myszą wgniata znak jeszcze przed odpowiedzią serwera — potwierdzenie,
   że tap trafił (na tablecie w hali to jedyne, co użytkownik ma od razu) */
.cellchk.on:active, .cellchk.off:active { transform: scale(.9); transition: transform 80ms ease-out; }
/* pojedyncza klatka `from`: klatkę końcową CSS dobiera z własnego stanu elementu, więc ✗
   wraca do swojego wyblakłego .55, a nie do pełnej krycia */
@keyframes chk-stempel { from { transform: scale(.4); opacity: 0; } }
@keyframes chk-cofniecie { from { transform: scale(1.18); opacity: 0; } }
@keyframes chk-poswiata { from { opacity: .3; transform: scale(.5); }
  to { opacity: 0; transform: scale(1.15); } }
/* uszanowanie ustawienia systemowego: stan zmienia się natychmiast, bez ruchu */
@media (prefers-reduced-motion: reduce) {
  .cellchk.anim-on, .cellchk.anim-off,
  .cellchk.on:active, .cellchk.off:active { animation: none; transform: none; transition: none; }
  .cellchk.anim-on::before { content: none; }
}
.cell-num { text-align: right; font-variant-numeric: tabular-nums; display: block; }
.cell-time { text-align: center; font-variant-numeric: tabular-nums; display: block; }
.cell-real { color: #b0b0a8; font-style: italic; }
/* godzina z kolejnej doby — kolejka z hurtowni bywa dłuższa niż dzień */
.cell-jutro { color: #8a6d00; }
.cell-jutro sup { font-size: 9px; font-weight: 800; margin-left: 1px; }
.uwagi-cell { color: #333; line-height: 1.35; }
.tabulator-editing input { font: inherit !important; }
/* pola REAL — edytowalne (cyfrowy zamiennik zeszytu ze stemplem, spec #5): kremowe tło mówi
   „tu się pisze" i odróżnia je od liczonych kolumn obok (nagłówka nie barwimy — to nie bramka) */
.tabulator-row .tabulator-cell.real-cell { background: #fffbea; cursor: text; }
.tabulator-row.tabulator-row-even .tabulator-cell.real-cell { background: #fdf7df; }
.cell-zysk { color: #217346; font-weight: 800; }     /* na plus = szybciej niż plan */
.cell-strata { color: #b3261e; font-weight: 800; }
.cell-zb0 { color: #b0b0a8; }   /* „ID nadrzędnego 0" = zlecenie pojedyncze — ma nie krzyczeć */

/* ── NESTING: zlecenia lecące RAZEM (oznaczenie z panelu planisty, tylko do odczytu) ──
   Litera przy numerze mówi, KTÓRE zlecenia są ze sobą spięte; klamra po lewej spina te,
   które stoją w kolejce obok siebie, czyli realnie jadą w jednym uzbrojeniu. Granat z pasa
   nagłówkowego raportu Damiana (#004269 → #2f5f8f na jasnym tle) — świadomie NIE pomarańcz
   przygotowalni ani zieleń akceptacji: to nie jest bramka do odhaczenia, tylko informacja
   o pracy, i nie ma udawać kolumny, którą się klika. */
.idcell { display: flex; align-items: center; gap: 4px; }
.idcell .cell-num { flex: 1; min-width: 0; }
.nestslot { flex: none; width: 17px; }   /* slot jest ZAWSZE — plakietka nie przesuwa numeru */
.nestlit { display: block; border: 1px solid #2f5f8f; border-radius: 3px; background: #e7eff9;
  color: #17466f; font-size: 10px; font-weight: 900; line-height: 15px; text-align: center;
  cursor: help; }
.tabulator-row.nest-run { background: #f2f6fc; }
.tabulator-row.nest-run .tabulator-cell:first-child { box-shadow: inset 3px 0 0 #2f5f8f; }
/* ramiona klamry: górne przy pierwszym członie ciągu, dolne przy ostatnim */
.tabulator-row.nest-first .tabulator-cell:first-child::before,
.tabulator-row.nest-last .tabulator-cell:first-child::after {
  content: ''; position: absolute; left: 3px; width: 8px; height: 2px; background: #2f5f8f; }
.tabulator-row.nest-first .tabulator-cell:first-child::before { top: 2px; }
.tabulator-row.nest-last .tabulator-cell:first-child::after { bottom: 2px; }
