/* UX fix (UX audit, "punkty na rysunku są za małe na telefonie"): measured live
   at the app's default "Fit" zoom on a 390px phone viewport (~26%), even a
   default-sized point (width_percent 1.5 / height_percent 1.0) rendered at
   exactly the old .point floor of 8x6px -- far below a usable tap target. At
   100% zoom a default point is already ~21x20px naturally (1417*1.5%,
   2004*1.0%), so this floor only ever applies on zoomed-out views; raising it
   to 20x18px restores that "as-designed" size instead of letting it keep
   shrinking, with no change at normal zoom. */
:root{font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:#17202a;background:#eef1f4}*{box-sizing:border-box}body{margin:0}
/* Patch83 follow-up ("upewnij się że nigdzie nie ma żadnych obwódek dookoła
   tekstu i wszystko jest spójne"): buttons/summary/links across the app had
   no shared focus-state reset, so a plain click or tap could leave the
   browser's default focus ring sitting around a menu label after the click
   was already done -- inconsistent from item to item depending on the
   browser. :focus-visible (keyboard/assistive-tech navigation) keeps a
   visible ring for accessibility; a mouse/touch click no longer leaves one
   behind. */
button:focus:not(:focus-visible),summary:focus:not(:focus-visible),a:focus:not(:focus-visible){outline:none}
.topbar{min-height:72px;background:#111827;color:#fff;display:flex;align-items:center;justify-content:space-between;padding:10px 18px;position:sticky;top:0;z-index:30;box-shadow:0 2px 10px #0003}.brand{display:flex;flex-direction:column}.brand strong{font-size:27px;line-height:1.05}.brand span{opacity:.72;font-size:14px;margin-top:5px}.overall{width:min(390px,45vw);display:grid;grid-template-columns:1fr auto;gap:3px 12px;align-items:center}.overall span{font-size:12px;opacity:.72}.overall strong{font-size:22px}.progress-track{grid-column:1/-1;height:8px;border-radius:999px;background:#ffffff2c;overflow:hidden}.progress-track div{width:0;height:100%;background:#3976f6;border-radius:inherit;transition:width .25s}.floors{display:flex;background:#fff;border-bottom:1px solid #d8dee6;padding:9px 14px;gap:8px;position:sticky;top:72px;z-index:25}.tab{border:0;background:#e8edf2;padding:10px 17px;border-radius:8px;cursor:pointer;font-weight:650}.tab.active{background:#2563eb;color:#fff}.tab.disabled{opacity:.42;cursor:not-allowed}.toolbar{background:#fff;padding:10px 14px;display:flex;align-items:end;gap:14px;flex-wrap:wrap;border-bottom:1px solid #d8dee6;position:sticky;top:127px;z-index:20}.worker-field{font-size:12px;color:#52606d;font-weight:650}.worker-field input{display:block;margin-top:5px;padding:9px 10px;border:1px solid #c7d0da;border-radius:8px;min-width:220px;background:#fff;font:inherit;outline:none}.worker-field input:focus{border-color:#2563eb;box-shadow:0 0 0 3px #2563eb1f}.statuses{display:flex;gap:7px;flex-wrap:wrap}.status{border:2px solid transparent;padding:9px 12px;border-radius:8px;background:#f2f4f7;cursor:pointer;font:inherit;font-weight:650}.status.active{border-color:#111827;box-shadow:0 0 0 2px #fff inset}.pulled{background:#ffe66b}.terminated{background:#6ee7a0}.tested{background:#c4a1ff}.issue{background:#ff8a8a}.clear{background:#e5e7eb}#summary{font-size:13px;margin-left:auto;white-space:nowrap;padding-bottom:9px}main{padding:12px 12px 4px}#viewport{width:100%;height:calc(100vh - 242px);overflow:auto;background:#7f8892;border-radius:10px;touch-action:pan-x pan-y;box-shadow:0 2px 8px #0002}#drawing{position:relative;width:1417px;height:2004px;transform-origin:top left;background:#fff}#drawing img{display:block;width:100%;height:100%;user-select:none}#overlay{position:absolute;inset:0}.point{position:absolute;border-radius:3px;background:transparent;border:1px solid transparent;cursor:pointer;min-width:20px;min-height:18px;padding:0}.point:hover,.point:focus-visible{border-color:#111827;background:#fff6;outline:none}.point.pulled{background:#ffe1009e}.point.terminated{background:#11cc5d9e}.point.tested{background:#8d46e89e}.point.issue{background:#ff3030a8}.point.flash{outline:3px solid #fff;outline-offset:1px}.instruction{text-align:center;color:#65717e;font-size:13px;margin:6px 8px 12px}#toast{position:fixed;bottom:18px;left:50%;transform:translateX(-50%);background:#111827;color:#fff;padding:10px 16px;border-radius:9px;opacity:0;pointer-events:none;transition:.2s;z-index:50;box-shadow:0 4px 18px #0004}#toast.show{opacity:1}@media(max-width:760px){.topbar{min-height:64px;padding:9px 12px}.brand strong{font-size:23px}.overall{width:44vw}.overall span{display:none}.overall strong{font-size:18px;margin-left:auto}.floors{top:64px;overflow-x:auto}.toolbar{top:117px;align-items:stretch}.worker-field{width:100%}.worker-field input{width:100%}.statuses{overflow-x:auto;flex-wrap:nowrap;width:100%;padding-bottom:2px}.status{white-space:nowrap}#summary{margin-left:0;padding-bottom:0}#viewport{height:calc(100vh - 300px)}main{padding:6px}.instruction{font-size:12px}}
.access-gate{position:fixed;inset:0;z-index:100;background:linear-gradient(145deg,#111827,#263342);display:grid;place-items:center;padding:20px}.access-gate[hidden]{display:none}.access-card{width:min(420px,100%);background:#fff;border-radius:16px;padding:26px;box-shadow:0 20px 60px #0006}.access-card>strong{display:block;font-size:32px}.access-card>span{display:block;color:#65717e;margin:4px 0 22px}.access-card label{display:block;font-size:13px;font-weight:700;color:#52606d;margin-top:14px}.access-card input{width:100%;margin-top:6px;padding:12px;border:1px solid #c7d0da;border-radius:9px;font:inherit;outline:none}.access-card input:focus{border-color:#2563eb;box-shadow:0 0 0 3px #2563eb1f}.access-card button{width:100%;margin-top:20px;border:0;border-radius:9px;background:#2563eb;color:#fff;padding:12px;font:inherit;font-weight:750;cursor:pointer}.access-card button:disabled{opacity:.55}.access-card p{min-height:20px;margin:12px 0 0;color:#c62828;font-size:13px}.locked header,.locked nav,.locked section,.locked main,.locked .instruction{visibility:hidden}.session-worker{display:flex;align-items:center;gap:9px;margin-left:auto;margin-right:22px}.session-worker span{font-weight:700;font-size:13px}.session-worker button{border:1px solid #ffffff45;background:#ffffff14;color:#fff;border-radius:7px;padding:7px 9px;cursor:pointer;font:inherit;font-size:12px}@media(max-width:760px){.session-worker{order:3;width:100%;margin:2px 0 0;justify-content:flex-end}.topbar{flex-wrap:wrap}.overall{margin-left:auto}.floors{top:92px}.toolbar{top:145px}#viewport{height:calc(100vh - 328px)}}
.modal{position:fixed;inset:0;z-index:60;background:rgba(15,23,42,.72);display:grid;place-items:center;padding:16px}.modal[hidden]{display:none}.modal-card{width:min(520px,100%);background:#fff;border-radius:18px;padding:20px;box-shadow:0 24px 70px rgba(0,0,0,.35)}.modal-head{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:16px}.modal-head strong{display:block;font-size:20px}.modal-head span{display:block;color:#6b7280;margin-top:3px}.modal-head>button{border:0;background:transparent;font-size:30px;line-height:1;cursor:pointer;color:#4b5563}.modal-card label{display:block;font-weight:700;margin:14px 0}.modal-card textarea,.modal-card input[type=file]{display:block;width:100%;margin-top:7px}.modal-card textarea{box-sizing:border-box;border:1px solid #cbd5e1;border-radius:10px;padding:11px;font:inherit;resize:vertical}.modal-card small{font-weight:400;color:#6b7280}.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:18px}.modal-actions button{border:0;border-radius:10px;padding:11px 16px;font-weight:800;cursor:pointer;background:#111827;color:#fff}.modal-actions .secondary{background:#e5e7eb;color:#111827}.form-error{min-height:20px;color:#b91c1c;margin:10px 0 0}.photo-preview{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.photo-preview img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:9px;border:1px solid #d1d5db}


/* v1.5 drawing zoom and free-position issues */
.zoom-controls{display:flex;align-items:center;gap:6px;margin-left:auto}
.zoom-controls button{border:1px solid #cbd5e1;background:#fff;border-radius:8px;min-width:38px;height:38px;padding:0 10px;font:inherit;font-weight:800;cursor:pointer}
.zoom-controls button:hover{background:#f1f5f9}
.zoom-controls span{min-width:48px;text-align:center;font-size:12px;font-weight:800;color:#475569}
#viewport{overscroll-behavior:contain;scroll-behavior:auto}
#drawing{transition:width .12s ease,height .12s ease}
#overlay{cursor:crosshair}
#overlay:not(.issue-mode){cursor:default}
.free-issue-pin{position:absolute;width:22px;height:22px;transform:translate(-50%,-50%);border:3px solid #fff;border-radius:50% 50% 50% 0;background:#dc2626;box-shadow:0 2px 7px #0006;rotate:-45deg;z-index:5;cursor:pointer}
.free-issue-pin::after{content:"";position:absolute;width:6px;height:6px;border-radius:50%;background:#fff;left:5px;top:5px}
.free-issue-pin span{display:none}
.modal-head .locationHint{font-size:12px;color:#64748b;margin-top:4px}
@media(max-width:760px){
  .zoom-controls{order:3;width:100%;justify-content:center;margin-left:0}
  .zoom-controls button{height:42px;min-width:52px}
  #summary{width:100%;text-align:center}
}

/* v2.1.1 pending approval */
.status.in-progress{background:#f5b942;color:#302200}
.point.in_progress{background:#f5b942cc}
.point.pending{opacity:.48;filter:saturate(.8);outline:2px dashed #c46b00;outline-offset:1px}
.point.pending::after{content:"";position:absolute;inset:0;background:repeating-linear-gradient(135deg,transparent 0 5px,#fff8 5px 8px);pointer-events:none}
.submissionStatusLine{display:flex;justify-content:space-between;gap:12px;padding:12px;border:1px solid #dbe3ef;border-radius:10px;background:#f8fafc}
.submissionStatusLine span{font-size:12px;color:#64748b}
.submissionStatusLine b{font-size:13px}
.pendingLegend{color:#a04d00;font-weight:800}


/* v2.1.2 rejected worker feedback */
.point.rejected{outline:3px dashed #dc2626!important;outline-offset:2px;animation:rejectedPulse 1.8s ease-in-out infinite}
.rejectedLegend{font-weight:800;color:#b42318}
@keyframes rejectedPulse{0%,100%{filter:saturate(.75)}50%{filter:saturate(1.2) brightness(1.04)}}


/* v2.4.1 Worker planning */
#todayTasksButton{display:flex;align-items:center;gap:7px}
#todayTaskCount{display:grid;place-items:center;min-width:22px;height:22px;padding:0 6px;border-radius:999px;background:#2563eb;color:#fff;font-size:11px}
.tasksModalCard{width:min(720px,calc(100% - 24px));max-height:88vh;overflow:auto}
.todayTasksList{display:grid;gap:11px;margin-top:14px}
.emptyTaskList{padding:24px;border:1px dashed #cbd5e1;border-radius:10px;color:#64748b;text-align:center}
.todayTaskCard{padding:14px;border:1px solid #dbe3ef;border-left:5px solid #94a3b8;border-radius:11px;background:#fff}
.todayTaskCard.priority-low{border-left-color:#16a34a}
.todayTaskCard.priority-medium{border-left-color:#eab308}
.todayTaskCard.priority-high{border-left-color:#f97316}
.todayTaskCard.priority-critical{border-left-color:#dc2626}
.todayTaskTop{display:flex;justify-content:space-between;gap:10px}
.todayTaskTop span{font-size:10px;text-transform:uppercase;color:#64748b;font-weight:900}
.todayTaskTop h3{margin:4px 0;font-size:18px}
.todayTaskTop p{margin:0;color:#64748b}
.todayTaskPriority{height:max-content;padding:6px 9px;border-radius:999px;background:#eef2f6;font-size:11px}
.todayTaskDescription{white-space:pre-wrap;padding:10px;border-radius:8px;background:#f8fafc}
.todayTaskPoints{font-size:12px;color:#475569}
.todayTaskTeam{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
.todayTaskTeam span{padding:6px 8px;border-radius:999px;background:#eef4ff;color:#2458a6;font-size:11px;font-weight:800}
.todayTaskMeta{display:flex;flex-wrap:wrap;gap:10px;color:#64748b;font-size:11px}
.todayTaskActions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.todayTaskActions button{min-height:42px}
.taskCompleteButton{background:#15803d}
.taskCompletedPill{display:inline-flex;align-items:center;padding:8px 10px;border-radius:999px;background:#dcfce7;color:#166534;font-size:12px;font-weight:900}
.point.taskHighlight{z-index:9!important;outline:5px solid #2563eb!important;outline-offset:3px!important;box-shadow:0 0 0 4px #fff,0 0 0 8px #2563eb!important;animation:taskHighlightPulse 1.5s ease-in-out infinite}
@keyframes taskHighlightPulse{0%,100%{filter:brightness(1)}50%{filter:brightness(1.25)}}

@media(max-width:760px){
  .session-worker{display:flex;flex-wrap:wrap;gap:6px}
  #todayTasksButton{order:3;width:100%;justify-content:center;min-height:44px}
  .todayTaskActions{display:grid;grid-template-columns:1fr 1fr}
  .todayTaskActions button{min-height:48px}
}


/* v2.5.1 Worker account login */
#accountProjectField[hidden]{display:none!important}
.access-card input[inputmode="numeric"]{letter-spacing:.18em;font-size:18px}


/* v2.5.2 Worker profile */
.workerProfileCard{width:min(620px,calc(100% - 24px));max-height:90vh;overflow:auto}
.workerProfileContent{margin-top:14px}
.workerProfileHero{display:flex;align-items:center;gap:14px;padding:14px;border:1px solid #dbe3ef;border-radius:12px;background:#f8fafc}
.workerProfileAvatar{display:grid;place-items:center;width:58px;height:58px;border-radius:50%;background:#e8f0ff;color:#2458a6;font-size:24px;font-weight:900}
.workerProfileHero h2{margin:0 0 4px}
.workerProfileHero p{margin:0;color:#64748b}
.workerProfileDetails{display:grid;gap:9px;margin:14px 0}
.workerProfileDetails div{display:grid;grid-template-columns:130px minmax(0,1fr);gap:10px;padding:9px 0;border-bottom:1px solid #e5eaf1}
.workerProfileDetails dt{color:#64748b}
.workerProfileDetails dd{margin:0;font-weight:800;overflow-wrap:anywhere}
.workerProfileSection{display:grid;gap:10px;margin-top:16px;padding-top:16px;border-top:1px solid #dbe3ef}
.workerProfileSection h3{margin:0}
.workerPinMessage{min-height:20px;font-weight:800}
.workerPinMessage.success{color:#166534}
.workerPinMessage.error{color:#b42318}

@media(max-width:760px){
  #workerProfileButton{order:4;width:100%;min-height:44px}
  .workerProfileDetails div{grid-template-columns:105px minmax(0,1fr)}
}


/* v2.6.3 Worker Today's Assignment */
.todayAssignmentOverview{
  display:grid;
  gap:12px;
  margin-bottom:16px;
}

.todayAssignmentHero{
  display:flex;
  justify-content:space-between;
  align-items:flex-start;
  gap:12px;
  padding:14px;
  border-radius:12px;
  background:#111827;
  color:#fff;
}

.todayAssignmentHero span{
  color:#9ca3af;
  font-size:11px;
  font-weight:800;
}

.todayAssignmentHero h2{
  margin:4px 0;
}

.todayAssignmentHero p{
  margin:0;
  color:#d1d5db;
}

.assignmentLoadPill{
  padding:7px 10px;
  border-radius:999px;
  background:#e5e7eb;
  color:#374151;
  font-size:11px;
  white-space:nowrap;
}

.assignmentLoadPill.light{background:#dcfce7;color:#166534}
.assignmentLoadPill.normal{background:#fef3c7;color:#92400e}
.assignmentLoadPill.heavy{background:#fee2e2;color:#991b1b}
.assignmentLoadPill.none{background:#e5e7eb;color:#4b5563}

.todayAssignmentMetrics{
  display:grid;
  grid-template-columns:repeat(4,minmax(0,1fr));
  gap:8px;
}

.todayAssignmentMetrics div{
  padding:11px 7px;
  border:1px solid #dbe3ef;
  border-radius:9px;
  background:#f8fafc;
  text-align:center;
}

.todayAssignmentMetrics span{
  color:#64748b;
  font-size:10px;
}

.todayAssignmentMetrics b{
  display:block;
  margin-top:4px;
  font-size:18px;
}

.todayAssignmentPeople{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:10px;
}

.todayAssignmentPeople section{
  padding:12px;
  border:1px solid #dbe3ef;
  border-radius:10px;
  background:#fff;
}

.todayAssignmentPeople h3{
  margin:0 0 8px;
  font-size:13px;
}

.assignmentPeopleChips{
  display:flex;
  flex-wrap:wrap;
  gap:6px;
}

.assignmentPeopleChips span{
  display:grid;
  gap:2px;
  padding:7px 9px;
  border-radius:999px;
  background:#eef4ff;
  color:#2458a6;
  font-size:11px;
}

.assignmentPeopleChips.supervisors span{
  background:#f3e8ff;
  color:#6b21a8;
}

.assignmentPeopleChips small{
  opacity:.75;
}

.assignmentPeopleChips em{
  color:#64748b;
  font-size:11px;
}

.todayAssignmentSectionHead{
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:10px;
  margin:5px 0 10px;
}

.todayAssignmentSectionHead span{
  color:#64748b;
  font-size:11px;
}

.todayTaskTeam{
  align-items:center;
}

.todayTaskTeam>b{
  color:#64748b;
  font-size:11px;
}

.todayTaskTeam .ownWorker{
  background:#dcfce7;
  color:#166534;
}

@media(max-width:760px){
  .todayAssignmentHero{
    display:grid;
  }

  .todayAssignmentMetrics{
    grid-template-columns:repeat(2,1fr);
  }

  .todayAssignmentPeople{
    grid-template-columns:1fr;
  }

  .tasksModalCard{
    width:min(100%,100vw);
    max-height:94vh;
  }
}


/* v2.6.3.1 separate Today Tasks and Today Assignment buttons */
.workerTodayButtons{
  display:grid;
  gap:6px;
}

.workerTodayButtons button{
  width:100%;
}

#todayAssignmentButton{
  border:1px solid #bfdbfe;
  background:#eef4ff;
  color:#2458a6;
}

#todayAssignmentButton:hover{
  background:#dbeafe;
}

.assignmentModalCard{
  width:min(760px,calc(100% - 24px));
}

@media(max-width:760px){
  .workerTodayButtons{
    order:3;
    width:100%;
    grid-template-columns:1fr;
  }

  .workerTodayButtons button{
    min-height:46px;
  }

  .assignmentModalCard{
    width:100%;
    max-height:94vh;
  }
}


/* v2.6.4 Worker Drawing Task Navigator */
.taskDrawingNavigator{
  display:grid;
  grid-template-columns:minmax(190px,1fr) auto auto;
  align-items:center;
  gap:12px;
  margin:10px 12px 0;
  padding:11px 13px;
  border:1px solid #bfdbfe;
  border-radius:10px;
  background:#eff6ff;
  box-shadow:0 3px 12px #1d4ed817;
}

.taskDrawingNavigator[hidden]{
  display:none;
}

.taskNavigatorInfo{
  display:grid;
  gap:2px;
}

.taskNavigatorInfo span{
  color:#2563eb;
  font-size:10px;
  font-weight:900;
  text-transform:uppercase;
}

.taskNavigatorInfo strong{
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}

.taskNavigatorInfo small{
  color:#64748b;
}

.taskNavigatorProgress{
  display:grid;
  min-width:140px;
  text-align:center;
}

.taskNavigatorProgress b{
  font-size:16px;
}

.taskNavigatorProgress span{
  max-width:190px;
  overflow:hidden;
  color:#475569;
  font-size:11px;
  text-overflow:ellipsis;
  white-space:nowrap;
}

.taskNavigatorActions{
  display:flex;
  gap:6px;
  flex-wrap:wrap;
  justify-content:flex-end;
}

.taskNavigatorActions button{
  min-height:38px;
  border:0;
  border-radius:8px;
  padding:8px 11px;
  background:#2563eb;
  color:#fff;
  font:inherit;
  font-size:12px;
  font-weight:800;
  cursor:pointer;
}

.taskNavigatorActions button.secondary{
  background:#fff;
  color:#334155;
  border:1px solid #cbd5e1;
}

.taskNavigatorActions button:disabled{
  opacity:.45;
  cursor:not-allowed;
}

.point.taskHighlight{
  z-index:8!important;
  outline:4px solid #60a5fa!important;
  outline-offset:3px!important;
  box-shadow:0 0 0 3px #fff,0 0 0 7px #60a5fa!important;
  animation:none!important;
}

.point.taskActivePoint{
  z-index:12!important;
  outline:6px solid #1d4ed8!important;
  outline-offset:4px!important;
  box-shadow:
    0 0 0 4px #fff,
    0 0 0 10px #1d4ed8,
    0 0 26px 14px #2563eb70!important;
  animation:taskActivePointPulse 1.25s ease-in-out infinite;
}

@keyframes taskActivePointPulse{
  0%,100%{filter:brightness(1)}
  50%{filter:brightness(1.35)}
}

@media(max-width:900px){
  .taskDrawingNavigator{
    grid-template-columns:1fr auto;
  }

  .taskNavigatorActions{
    grid-column:1/-1;
    justify-content:stretch;
  }

  .taskNavigatorActions button{
    flex:1;
  }
}

@media(max-width:600px){
  .taskDrawingNavigator{
    grid-template-columns:1fr;
    margin:7px 6px 0;
  }

  .taskNavigatorProgress{
    text-align:left;
  }

  .taskNavigatorActions{
    display:grid;
    grid-template-columns:1fr 1fr;
  }

  .taskNavigatorActions button{
    min-height:44px;
  }
}


/* ==================================================================
   RELEASE UI 1.0 — WORKER
   ================================================================== */
:root{
  --ui-navy:#0f1a2c;
  --ui-navy-2:#162238;
  --ui-blue:#2563eb;
  --ui-border:#d8e1ed;
  --ui-bg:#f4f7fb;
}

body:not(.locked){
  padding-top:64px;
  background:var(--ui-bg);
}

.workerAppHeader{
  position:fixed;
  inset:0 0 auto 0;
  z-index:900;
  height:64px;
  display:flex;
  align-items:center;
  gap:12px;
  padding:8px 12px;
  background:var(--ui-navy);
  color:#fff;
  box-shadow:0 3px 14px #02061738;
}

.appMenuButton{
  width:46px;
  height:46px;
  padding:0;
  border:0;
  background:transparent;
  color:#fff;
  font-size:28px;
}

.appHeaderProject{
  display:grid;
  min-width:0;
}
/* Patch83: the project name used to be short enough ("AMS11") that it
   never needed truncation of its own -- the floor-row span below it
   already had ellipsis/nowrap. Once #workerHeaderDrawingButton also
   carries the full project name (e.g. "AMS11 - Data Center Fitout"), it
   wraps across multiple lines inside the header's fixed 64px height on
   narrow viewports without this, breaking the "compact header, maximum
   drawing space" requirement. */
.appHeaderProject strong{
  display:block;
  overflow:hidden;
  min-width:0;
  font-size:17px;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.appHeaderProject span{
  overflow:hidden;
  color:#b7c3d6;
  font-size:12px;
  text-overflow:ellipsis;
  white-space:nowrap;
}

.appOnline{
  display:flex;
  align-items:center;
  gap:6px;
  margin-left:auto;
  font-size:12px;
  font-weight:800;
}
.appOnline i{
  width:9px;height:9px;border-radius:50%;background:#22c55e;
  box-shadow:0 0 0 3px #22c55e20;
}
.appOnline.offline i{background:#ef4444}
.appOnline.offline .appOnlineLabel{color:#fecaca}

.legacyWorkerHeader{
  display:none!important;
}

.appDrawerBackdrop{
  position:fixed;
  inset:0;
  z-index:1090;
  background:#020617a8;
  backdrop-filter:blur(2px);
}

.appDrawer{
  position:fixed;
  inset:0 auto 0 0;
  z-index:1100;
  width:min(82vw,330px);
  display:flex;
  flex-direction:column;
  padding:14px;
  background:linear-gradient(180deg,var(--ui-navy),#0b1424);
  color:#fff;
  box-shadow:18px 0 50px #02061770;
  transform:translateX(-104%);
  transition:transform .2s ease;
}
.appDrawer.open{transform:translateX(0)}
.appDrawerHead{
  display:flex;justify-content:space-between;align-items:flex-start;
  gap:12px;padding:8px 4px 18px;border-bottom:1px solid #ffffff20;
}
.appDrawerHead>div{display:grid}
.appDrawerHead span{color:#aab7cb;font-size:12px}
.appDrawerHead button{
  width:40px;height:40px;padding:0;border:0;border-radius:9px;
  background:#ffffff12;color:#fff;font-size:24px;
}
.appDrawerNav{display:grid;gap:5px;padding:14px 0}
.appDrawerNav>button,.drawerSection>button,.drawerSubmenu button,.appDrawerLogout{
  width:100%;display:flex;align-items:center;gap:11px;min-height:48px;
  padding:10px 12px;border:0;border-radius:10px;background:transparent;
  color:#e5edf8;text-align:left;font:inherit;font-weight:750;
}
.appDrawerNav button:hover,.appDrawerNav button:focus{background:#ffffff12}
.appDrawerNav button span{width:24px;text-align:center}
.appDrawerNav button b{
  margin-left:auto;padding:3px 8px;border-radius:999px;background:var(--ui-blue);
}
.appDrawerNav button small{margin-left:auto}
.drawerSubmenu{display:grid;gap:3px;padding:3px 0 5px 35px}
.drawerSubmenu button{min-height:40px;color:#b9c7da;font-size:13px}
.appDrawerLogout{margin-top:auto;color:#fca5a5}
.drawerOpen{overflow:hidden}

.floors{
  display:none!important;
}

.toolbar{
  position:sticky;
  top:64px;
  z-index:120;
  display:flex;
  align-items:center;
  gap:8px;
  min-height:58px;
  padding:7px 10px;
  background:#fff;
  border-bottom:1px solid var(--ui-border);
  box-shadow:0 2px 8px #0f172a0d;
}
.statuses{display:none!important}
.zoom-controls{
  display:flex;align-items:center;gap:4px;order:1;
}
.zoom-controls button{
  min-width:46px;min-height:42px;border-radius:9px;
}
#zoomValue{
  min-width:50px;text-align:center;font-size:12px;font-weight:900;
}

.workerLegend{
  position:relative;
  order:2;
  margin-left:auto;
}
.workerLegend>summary{
  list-style:none;min-height:42px;display:flex;align-items:center;
  padding:9px 12px;border:1px solid var(--ui-border);border-radius:9px;
  background:#fff;color:#334155;font-weight:850;cursor:pointer;
}
.workerLegend>summary::-webkit-details-marker{display:none}
.workerLegend[open]>summary{background:#eff6ff;color:#1d4ed8}
.workerLegend>div{
  position:absolute;
  top:calc(100% + 7px);
  right:0;
  min-width:250px;
  padding:10px;
  border:1px solid var(--ui-border);
  border-radius:10px;
  background:#fff;
  box-shadow:0 14px 32px #0f172a20;
}
.workerLegend #summary{
  position:static!important;
  display:block!important;
  min-width:0!important;
  padding:0!important;
  border:0!important;
  box-shadow:none!important;
  white-space:nowrap;
}
.legendLabels{
  display:grid!important;
  grid-template-columns:1fr 1fr;
  gap:7px!important;
  margin-top:9px;
  color:#475569;
  font-size:11px;
}

main{
  padding:8px!important;
}
#viewport{
  border-radius:12px!important;
  background:#e9eef5;
}
.instruction{display:none!important}

.taskDrawingNavigator{
  margin:8px!important;
  border-radius:11px!important;
}

.pointActionBackdrop{
  position:fixed;inset:0;z-index:1190;background:#02061770;
}
.pointActionSheet{
  position:fixed;
  inset:auto 0 0 0;
  z-index:1200;
  max-height:72dvh;
  overflow:auto;
  padding:8px 14px max(18px,env(safe-area-inset-bottom));
  border-radius:20px 20px 0 0;
  background:#fff;
  box-shadow:0 -18px 55px #02061745;
  transform:translateY(105%);
  transition:transform .2s ease;
}
.pointActionSheet.open{transform:translateY(0)}
.sheetHandle{
  display:block;width:72px;height:18px;min-height:18px;margin:0 auto 7px;padding:0;border:0;border-radius:999px;background:transparent;cursor:ns-resize;touch-action:none;
}
.sheetHandle::after{content:"";display:block;width:52px;height:5px;margin:auto;border-radius:999px;background:#94a3b8;transition:background .18s,transform .18s}.sheetHandle:hover::after,.sheetHandle:focus-visible::after{background:#2563eb}.pointActionSheet.collapsed{transform:translateY(calc(100% - 86px));overflow:hidden}.pointActionSheet.collapsed .sheetHandle::after{background:#2563eb;transform:scaleX(1.12)}.pointActionSheet.collapsed .pointSheetHead{border-bottom:0}.pointActionSheet.dragging{transition:none!important;user-select:none}.pointActionSheet.collapsed .pointSheetHead span::after{content:" · Tap the bar to restore";color:#64748b;font-weight:700;text-transform:none}.pointActionSheet.collapsed .pointSheetHead strong{max-width:calc(100vw - 95px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
body.pointSheetOpen{overflow:hidden!important;overscroll-behavior:none}.pointActionSheet{overscroll-behavior:contain}.pointActionSheet.dragging,.pointActionSheet.dragging *{touch-action:none!important;-webkit-user-select:none!important;user-select:none!important}body.pointSheetOpen #viewport{overscroll-behavior:contain}
body.pointSheetOpen{position:fixed;inset-inline:0;width:100%}.pointActionSheet .pointSheetHead{touch-action:none;cursor:ns-resize}.pointActionSheet .pointSheetHead #pointSheetClose{touch-action:manipulation;cursor:pointer}
.pointSheetHead{
  display:flex;justify-content:space-between;align-items:center;gap:12px;
  padding-bottom:12px;border-bottom:1px solid #e2e8f0;
}
.pointSheetHead>div{display:grid}
.pointSheetHead span{color:#2563eb;font-size:11px;font-weight:900;text-transform:uppercase}
.pointSheetHead strong{font-size:28px}
.pointSheetHead button{
  width:42px;height:42px;padding:0;border-radius:10px;
}
.pointCurrentStatus{
  display:flex;justify-content:space-between;align-items:center;
  gap:12px;padding:13px 0;
}
.pointCurrentStatus span{color:#64748b}
.pointCurrentStatus b{
  padding:7px 10px;border-radius:999px;background:#eef2ff;color:#4338ca;
}
.pointActionSheet h3{margin:5px 0 10px}
.pointStatusGrid{
  display:grid;grid-template-columns:1fr 1fr;gap:9px;
}
.pointStatusGrid button{
  display:flex;align-items:center;gap:10px;min-height:58px;
  padding:10px;border:1px solid var(--ui-border);border-radius:11px;
  background:#fff;color:#172033;text-align:left;font:inherit;font-weight:850;
}
.pointStatusGrid .issueAction{grid-column:1/-1}
.statusIcon{width:25px;height:25px;border-radius:7px;display:inline-block}
.statusIcon.pulled{background:#facc15}
.statusIcon.terminated{background:#22c55e}
.statusIcon.tested{background:#a855f7}
.statusIcon.inProgress{background:#2563eb}
.statusIcon.issue{background:#dc2626}

.overall{display:none!important}

@media(min-width:900px){
  .appDrawer{width:320px}
  .pointActionSheet{
    left:auto;right:18px;bottom:18px;width:430px;border-radius:18px;
  }
  .pointActionBackdrop{background:#02061735}
}


/* v2.7.0 mandatory task evidence */
.taskEvidenceModalCard{
  width:min(560px,calc(100% - 20px));
}

.taskEvidenceForm{
  display:grid;
  gap:13px;
}

.taskEvidencePhotoPicker{
  display:grid;
  gap:5px;
  padding:16px;
  border:2px dashed #93c5fd;
  border-radius:12px;
  background:#eff6ff;
  color:#1d4ed8;
  cursor:pointer;
}

.taskEvidencePhotoPicker input{
  margin-top:8px;
}

.taskEvidencePreview{
  display:grid;
  grid-template-columns:repeat(3,minmax(0,1fr));
  gap:8px;
}

.taskEvidencePreview>div{
  display:grid;
  gap:4px;
}

.taskEvidencePreview img{
  width:100%;
  aspect-ratio:4/3;
  object-fit:cover;
  border-radius:8px;
  background:#e2e8f0;
}

.taskEvidencePreview span{
  overflow:hidden;
  color:#64748b;
  font-size:10px;
  text-overflow:ellipsis;
  white-space:nowrap;
}

/* =====================================================================
   Paczka 186: krzyzyk do usuwania zdjecia z koszyka.

   Zdjecia sie teraz DOKLADAJA (patrz createPhotoBasket() w app.js), wiec
   "wybierz jeszcze raz" przestalo byc sposobem na odklikniecie zlego
   ujecia -- musi byc czym je usunac.

   .photoBasketItem jest zwyklym <div>, wiec pasuje i do
   `.taskEvidencePreview>div` powyzej, i do siatki `.photo-preview`
   (okno postepu oraz zgloszenia usterki) -- oba dotychczasowe uklady
   zostaja nietkniete. Przycisk 44x44 px z zapasem na palec: to jest
   ekran telefonu w rekawicy roboczej.
   ===================================================================== */
.photoBasketItem{position:relative}
.photoBasketRemove{
  position:absolute;
  top:2px;
  right:2px;
  width:30px;
  height:30px;
  display:grid;
  place-items:center;
  border:0;
  border-radius:50%;
  background:rgba(15,23,42,.78);
  color:#fff;
  font-size:19px;
  line-height:1;
  cursor:pointer;
  padding:0;
}
.photoBasketRemove:hover{background:#b91c1c}
.photoBasketRemove:focus-visible{outline:3px solid #60a5fa;outline-offset:2px}

.taskEvidenceForm textarea{
  width:100%;
  resize:vertical;
}

#taskEvidenceSubmit{
  min-height:48px;
}

@media(max-width:600px){
  .taskEvidenceModalCard{
    width:100%;
    max-height:94dvh;
    border-radius:18px 18px 0 0;
  }

  .taskEvidencePreview{
    grid-template-columns:repeat(2,minmax(0,1fr));
  }
}


/* UI 2.0 — compact Worker content spacing */
.workerAppHeader + .legacyWorkerHeader{
  display:none!important;
}

main{
  margin-top:0!important;
}


/* UI 2.2 — compact Inbox and right-aligned zoom */
.workerLegend,#workerLegend,.legendLabels{
  display:none!important;
}

.toolbar{
  display:flex!important;
  align-items:center!important;
  justify-content:space-between!important;
  gap:8px!important;
  min-height:54px!important;
  padding:6px 9px!important;
}

.workerInboxButton{
  position:relative;
  flex:0 0 auto;
  width:44px;
  height:42px;
  display:grid;
  place-items:center;
  padding:0;
  border:1px solid #bfdbfe;
  border-radius:9px;
  background:#eff6ff;
  color:#1d4ed8;
  font-size:18px;
}

.workerInboxButton b{
  position:absolute;
  top:-5px;
  right:-5px;
  min-width:19px;
  height:19px;
  display:grid;
  place-items:center;
  padding:0 5px;
  border-radius:999px;
  background:#dc2626;
  color:#fff;
  font-size:10px;
}

.zoom-controls{
  margin-left:auto!important;
  justify-content:flex-end!important;
}

.workerInboxBackdrop{
  position:fixed;
  inset:0;
  z-index:1290;
  background:#02061799;
  backdrop-filter:blur(2px);
}

.workerInboxPanel{
  position:fixed;
  inset:64px auto 0 0;
  z-index:1300;
  width:min(88vw,380px);
  display:flex;
  flex-direction:column;
  background:#f4f7fb;
  box-shadow:18px 0 55px #02061755;
  transform:translateX(-105%);
  transition:transform .2s ease;
}

.workerInboxPanel.open{
  transform:translateX(0);
}

.workerInboxHead{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  padding:14px;
  background:#0f1a2c;
  color:#fff;
}

.workerInboxHead>div{
  display:grid;
}

.workerInboxHead span{
  color:#b7c3d6;
  font-size:11px;
}

.workerInboxHead button{
  width:40px;
  height:40px;
  padding:0;
  border:0;
  border-radius:9px;
  background:#ffffff12;
  color:#fff;
  font-size:24px;
}

.workerInboxTabs{
  display:grid;
  grid-template-columns:repeat(3,1fr);
  gap:5px;
  padding:8px;
  background:#fff;
  border-bottom:1px solid #d8e1ed;
}

.workerInboxTabs button{
  min-height:40px;
  padding:7px 6px;
  border:0;
  border-radius:8px;
  background:#eef2f6;
  color:#475569;
  font:inherit;
  font-size:11px;
  font-weight:850;
}

.workerInboxTabs button.active{
  background:#2563eb;
  color:#fff;
}

.workerInboxTabs b{
  margin-left:3px;
  padding:2px 5px;
  border-radius:999px;
  background:#dc2626;
  color:#fff;
  font-size:9px;
}

.workerInboxPane{
  flex:1;
  display:grid;
  align-content:start;
  gap:9px;
  padding:10px;
  overflow:auto;
}

.inboxTaskCard,.inboxMessageCard,.inboxNotificationCard{
  padding:12px;
  border:1px solid #d8e1ed;
  border-radius:10px;
  background:#fff;
  box-shadow:0 4px 14px #0f172a09;
}

.inboxTaskCard h3,.inboxMessageCard h3{
  margin:4px 0;
}

.inboxTaskCard p,.inboxMessageCard p{
  margin:0;
  color:#475569;
}

.inboxTaskCard>div:first-child>span,
.inboxMessageTop span{
  color:#64748b;
  font-size:10px;
  font-weight:850;
  text-transform:uppercase;
}

.inboxTaskMeta{
  display:flex;
  flex-wrap:wrap;
  gap:5px;
  margin:10px 0;
}

.inboxTaskMeta span{
  padding:5px 7px;
  border-radius:999px;
  background:#f1f5f9;
  color:#475569;
  font-size:10px;
  font-weight:800;
}

.inboxTaskActions{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:7px;
}

.inboxTaskActions button{
  min-height:40px;
}

.inboxMessageTop{
  display:flex;
  justify-content:space-between;
  gap:10px;
}

.inboxMessageTop b{
  height:max-content;
  padding:4px 7px;
  border-radius:999px;
  background:#dc2626;
  color:#fff;
  font-size:9px;
}

.inboxMessageCard.unread{
  border-left:4px solid #2563eb;
}

.inboxMessageCard.priority-important{
  border-color:#f59e0b;
}

.inboxMessageCard.priority-urgent{
  border-color:#dc2626;
  background:#fff7f7;
}

.inboxMessageCard small{
  display:block;
  margin-top:9px;
  color:#64748b;
}

.inboxNotificationCard{
  display:grid;
  gap:5px;
}

.inboxNotificationCard span{
  color:#64748b;
}

.inboxNotificationCard.urgent{
  border-color:#fecaca;
  background:#fff7f7;
}

.workerInboxEmpty{
  padding:25px;
  border:1px dashed #cbd5e1;
  border-radius:10px;
  background:#fff;
  color:#64748b;
  text-align:center;
}

.workerInboxOpen{
  overflow:hidden;
}

@media(max-width:600px){
  .workerInboxPanel{
    width:94vw;
  }

  .workerInboxTabs{
    grid-template-columns:1fr 1fr 1fr;
  }
}


/* ================================================================
   UI 2.2.1 — compact toolbar and Inbox close fix
   ================================================================ */

.toolbar{
  display:flex!important;
  align-items:center!important;
  justify-content:space-between!important;
  gap:6px!important;
  min-height:48px!important;
  padding:4px 8px!important;
}

.workerInboxButton{
  width:40px!important;
  height:38px!important;
  border-radius:8px!important;
  font-size:16px!important;
}

.workerInboxButton b{
  top:-4px!important;
  right:-4px!important;
  min-width:18px!important;
  height:18px!important;
  font-size:9px!important;
}

.zoom-controls{
  width:auto!important;
  display:flex!important;
  flex:0 0 auto!important;
  align-items:center!important;
  justify-content:flex-end!important;
  gap:3px!important;
  margin:0 0 0 auto!important;
}

.zoom-controls button{
  min-width:40px!important;
  width:auto!important;
  height:38px!important;
  padding:0 9px!important;
  border-radius:8px!important;
}

.zoom-controls span{
  min-width:42px!important;
  margin-left:2px!important;
  font-size:11px!important;
}

.workerInboxPanel{
  width:min(76vw,330px)!important;
}

.workerInboxHead{
  min-height:62px!important;
  padding:10px 12px!important;
}

.workerInboxHead button{
  position:relative!important;
  z-index:4!important;
  width:38px!important;
  height:38px!important;
  display:grid!important;
  place-items:center!important;
  pointer-events:auto!important;
  touch-action:manipulation!important;
  cursor:pointer!important;
}

.workerInboxBackdrop{
  pointer-events:auto;
}

.workerInboxBackdrop[hidden]{
  display:none!important;
  pointer-events:none!important;
}

.workerInboxTabs{
  grid-template-columns:repeat(3,minmax(0,1fr))!important;
  gap:3px!important;
  padding:5px!important;
}

.workerInboxTabs button{
  position:relative;
  min-width:0!important;
  min-height:42px!important;
  display:flex!important;
  align-items:center!important;
  justify-content:center!important;
  gap:4px!important;
  padding:5px 3px!important;
  font-size:10px!important;
}

.workerInboxTabs button>span{
  font-size:14px;
}

.workerInboxTabs .inboxTabLabel{
  overflow:hidden;
  font-size:9px;
  text-overflow:ellipsis;
  white-space:nowrap;
}

.workerInboxTabs i{
  position:absolute;
  top:1px;
  right:2px;
  min-width:16px;
  height:16px;
  display:grid;
  place-items:center;
  padding:0 4px;
  border-radius:999px;
  background:#dc2626;
  color:#fff;
  font-size:8px;
  font-style:normal;
}

.workerInboxPane{
  gap:7px!important;
  padding:7px!important;
}

.inboxTaskCard,
.inboxMessageCard,
.inboxNotificationCard{
  padding:9px!important;
}

.inboxTaskCard h3,
.inboxMessageCard h3{
  margin:2px 0!important;
  font-size:16px!important;
}

.inboxTaskCard p,
.inboxMessageCard p{
  font-size:12px!important;
}

.inboxTaskMeta{
  margin:7px 0!important;
}

.inboxTaskActions{
  gap:5px!important;
}

.inboxTaskActions button{
  min-height:36px!important;
  padding:7px 8px!important;
  font-size:11px!important;
}

/* Patch83 (menu Workera Faza 1): #viewport's reserved-height math used to
   be split across 3 duplicate, unconditional rules (added one at a time as
   header/toolbar chrome shrank in earlier patches) plus the one narrow-
   viewport override further down -- easy to lose track of which one was
   actually winning. Consolidated to just this rule (desktop/tablet) and
   the single @media(max-width:600px) override below it. Effective values
   are unchanged (120px reserved above 600px, 116px at/under it) -- this
   batch's header/toolbar restyle did not change their height. */
#viewport{
  min-height:calc(100dvh - 120px)!important;
  height:calc(100dvh - 120px)!important;
}

@media(max-width:600px){
  .workerInboxPanel{
    width:76vw!important;
    min-width:280px;
  }

  .toolbar{
    min-height:46px!important;
    padding:4px 6px!important;
  }

  .zoom-controls{
    width:auto!important;
    justify-content:flex-end!important;
  }

  .zoom-controls button{
    min-width:38px!important;
    height:36px!important;
    padding:0 8px!important;
  }

  .workerInboxTabs .inboxTabLabel{
    display:none;
  }

  .workerInboxTabs button>span{
    font-size:17px;
  }

  #viewport{
    min-height:calc(100dvh - 116px)!important;
    height:calc(100dvh - 116px)!important;
  }
}


/* ================================================================
   UI 2.2.2 — Inbox task links and actions
   ================================================================ */

.inboxTaskActionBackdrop{
  position:fixed;
  inset:0;
  z-index:1390;
  background:#02061780;
  backdrop-filter:blur(2px);
}

.inboxTaskActionSheet{
  position:fixed;
  inset:auto 0 0 0;
  z-index:1400;
  max-height:78dvh;
  overflow:auto;
  padding:8px 14px max(18px,env(safe-area-inset-bottom));
  border-radius:20px 20px 0 0;
  background:#fff;
  box-shadow:0 -18px 55px #02061745;
  transform:translateY(105%);
  transition:transform .2s ease;
}

.inboxTaskActionSheet.open{
  transform:translateY(0);
}

.inboxTaskActionHead{
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:12px;
  padding-bottom:12px;
  border-bottom:1px solid #e2e8f0;
}

.inboxTaskActionHead>div{
  display:grid;
  gap:2px;
}

.inboxTaskActionHead span{
  color:#2563eb;
  font-size:10px;
  font-weight:900;
  text-transform:uppercase;
}

.inboxTaskActionHead strong{
  font-size:22px;
}

.inboxTaskActionHead small{
  color:#64748b;
}

.inboxTaskActionHead button{
  width:40px;
  height:40px;
  padding:0;
  border-radius:9px;
  font-size:23px;
}

.inboxTaskActionMeta{
  display:flex;
  flex-wrap:wrap;
  gap:6px;
  padding:12px 0;
}

.inboxTaskActionMeta span{
  padding:6px 8px;
  border-radius:999px;
  background:#f1f5f9;
  color:#475569;
  font-size:10px;
  font-weight:850;
  text-transform:capitalize;
}

.inboxTaskActionPoints{
  margin-bottom:12px;
  padding:10px;
  border:1px solid #d8e1ed;
  border-radius:10px;
  background:#f8fafc;
}

.inboxTaskActionPoints b{
  font-size:12px;
}

.inboxTaskActionPoints p{
  margin:5px 0 0;
  color:#475569;
  font-size:12px;
}

.inboxTaskActionButtons{
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:8px;
}

.inboxTaskActionButtons button{
  min-height:48px;
}

.inboxTaskActionButtons #inboxActionComplete{
  grid-column:1/-1;
}

.inboxTaskActionButtons.completed{
  grid-template-columns:1fr;
}

.inboxTaskActionOpen{
  overflow:hidden;
}

@media(min-width:760px){
  .inboxTaskActionSheet{
    left:auto;
    right:18px;
    bottom:18px;
    width:430px;
    border-radius:18px;
  }
}

@media(max-width:430px){
  .inboxTaskActionButtons{
    grid-template-columns:1fr;
  }

  .inboxTaskActionButtons #inboxActionComplete{
    grid-column:auto;
  }
}


/* ================================================================
   UI 2.2.3 — Inbox pane visibility and click fix
   ================================================================ */

/*
 * The hidden Messages and Notifications panes still had display:grid
 * from .workerInboxPane, so they physically covered the Tasks pane.
 * That blocked Open drawing and Task actions.
 */
.workerInboxPane[hidden]{
  display:none!important;
  pointer-events:none!important;
}

.workerInboxPane:not([hidden]){
  display:grid!important;
  pointer-events:auto!important;
}

#workerInboxTasks{
  position:relative;
  z-index:3;
}

.inboxTaskCard,
.inboxTaskActions,
.inboxTaskActions button{
  position:relative;
  z-index:4;
  pointer-events:auto!important;
  touch-action:manipulation;
}

#workerInboxMessages,
#workerInboxNotifications{
  position:relative;
  z-index:2;
}

.inboxTaskActionBackdrop[hidden],
.inboxTaskActionSheet[hidden]{
  display:none!important;
}

.inboxTaskActionSheet:not([hidden]){
  display:block;
}


/* UI 2.2.4 — Inbox controls event fix */
.workerInboxTabs{
  position:relative;
  z-index:20!important;
}

.workerInboxTabs button{
  position:relative;
  z-index:21!important;
  pointer-events:auto!important;
  touch-action:manipulation!important;
}

.inboxTaskActions{
  position:relative;
  z-index:20!important;
}

.inboxTaskActions button{
  position:relative;
  z-index:21!important;
  pointer-events:auto!important;
  touch-action:manipulation!important;
}


/* Messaging 1.1 — Worker replies */
.messageReplyThread{
  display:grid;
  gap:6px;
  margin-top:10px;
}

.messageReply{
  padding:8px 9px;
  border-radius:9px;
  background:#f1f5f9;
}

.messageReply.mine{
  margin-left:18px;
  background:#eff6ff;
  border:1px solid #bfdbfe;
}

.messageReply.staff{
  margin-right:18px;
  background:#f8fafc;
  border:1px solid #e2e8f0;
}

.messageReply b{
  font-size:10px;
}

.messageReply p{
  margin:3px 0!important;
  white-space:pre-wrap;
}

.messageReply small{
  margin:0!important;
  font-size:9px;
}

.messageReplyForm{
  display:grid;
  grid-template-columns:minmax(0,1fr) auto;
  gap:6px;
  margin-top:9px;
}

.messageReplyForm textarea{
  width:100%;
  min-height:42px;
  resize:vertical;
}

.messageReplyForm button{
  min-height:42px;
  padding:7px 10px;
}

@media(max-width:420px){
  .messageReplyForm{
    grid-template-columns:1fr;
  }
}


/* Messaging 1.2 — Worker new conversation */
.workerStartConversation{
  width:100%;
  min-height:42px;
  margin-bottom:7px;
  border:1px solid #bfdbfe;
  border-radius:9px;
  background:#eff6ff;
  color:#1d4ed8;
  font-weight:900;
}

.workerNewConversation{
  position:absolute;
  inset:0;
  z-index:30;
  padding:12px;
  overflow:auto;
  background:#f4f7fb;
}

.workerNewConversation[hidden]{
  display:none!important;
}

.workerNewConversationHead{
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:10px;
  margin-bottom:12px;
}

.workerNewConversationHead>div{
  display:grid;
}

.workerNewConversationHead span{
  color:#64748b;
  font-size:11px;
}

.workerNewConversationHead button{
  width:38px;
  height:38px;
  padding:0;
  border-radius:9px;
  font-size:22px;
}

#workerNewConversationForm{
  display:grid;
  gap:10px;
}

#workerNewConversationForm textarea{
  width:100%;
  resize:vertical;
}

.workerConversationStatus{
  color:#b91c1c;
  font-size:12px;
}


/* Messaging 1.3 — unread replies */
.inboxMessageCard.unread,
.inboxMessageCard:has(.inboxMessageTop>b){
  border-left:4px solid #2563eb;
}

.inboxMessageTop>b{
  white-space:nowrap;
}


/* Messaging 1.4 — Worker message tools */
.workerMessageTools{
  display:grid;
  grid-template-columns:minmax(0,1fr) auto;
  gap:6px;
  margin-bottom:7px;
}

.workerMessageTools input,
.workerMessageTools select{
  min-height:40px;
  min-width:0;
}

@media(max-width:420px){
  .workerMessageTools{
    grid-template-columns:1fr;
  }
}


/* ================================================================
   UI 2.3 — Worker menu view switching
   ================================================================ */

#tasksModal[hidden],
#assignmentModal[hidden],
#workerProfileModal[hidden],
#progressModal[hidden],
#issueModal[hidden],
#taskEvidenceModal[hidden],
#workerInboxPanel[hidden],
#workerInboxBackdrop[hidden],
#pointActionSheet[hidden],
#pointActionBackdrop[hidden],
#inboxTaskActionSheet[hidden],
#inboxTaskActionBackdrop[hidden],
#workerNewConversation[hidden]{
  display:none!important;
  pointer-events:none!important;
}

#tasksModal:not([hidden]),
#assignmentModal:not([hidden]),
#workerProfileModal:not([hidden]),
#progressModal:not([hidden]),
#issueModal:not([hidden]),
#taskEvidenceModal:not([hidden]){
  pointer-events:auto!important;
}

.workerInboxPanel:not(.open){
  pointer-events:none!important;
}

.workerInboxPanel.open{
  pointer-events:auto!important;
}
.locked #workerInboxPanel,.locked #workerInboxBackdrop,.locked #inboxTaskActionSheet,.locked #inboxTaskActionBackdrop,.locked #taskCrewSheet,.locked #taskCrewBackdrop{display:none!important;visibility:hidden!important;pointer-events:none!important}.access-gate{z-index:10000!important}


/* ================================================================
   Notifications 1.0 — Worker Activity Feed
   ================================================================ */

.notificationTabBadge{
  position:absolute;
  top:1px;
  right:2px;
  min-width:16px;
  height:16px;
  display:grid;
  place-items:center;
  padding:0 4px;
  border-radius:999px;
  background:#dc2626;
  color:#fff;
  font-size:8px;
  font-style:normal;
}

.notificationFeedHead{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:8px;
  margin-bottom:2px;
  padding:4px 2px;
}

.notificationFeedHead>div{
  display:grid;
}

.notificationFeedHead span{
  color:#64748b;
  font-size:10px;
}

.notificationFeedHead button{
  min-height:34px;
  padding:6px 8px;
  font-size:10px;
}

.activityNotificationCard{
  width:100%;
  display:grid;
  grid-template-columns:auto minmax(0,1fr) auto;
  align-items:start;
  gap:9px;
  padding:10px;
  border:1px solid #d8e1ed;
  border-radius:10px;
  background:#fff;
  color:#172033;
  text-align:left;
  font:inherit;
  cursor:pointer;
}

.activityNotificationCard.unseen{
  border-left:4px solid #2563eb;
  background:#f8fbff;
}

.activityNotificationCard.priority-urgent{
  border-color:#dc2626;
  background:#fff7f7;
}

.activityNotificationIcon{
  width:30px;
  height:30px;
  display:grid;
  place-items:center;
  border-radius:8px;
  background:#eef2f6;
}

.activityNotificationText{
  min-width:0;
  display:grid;
  gap:2px;
}

.activityNotificationText b{
  color:#2563eb;
  font-size:10px;
  text-transform:uppercase;
}

.activityNotificationText strong{
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
  font-size:13px;
}

.activityNotificationText small{
  overflow:hidden;
  color:#64748b;
  text-overflow:ellipsis;
  white-space:nowrap;
  font-size:10px;
}

.activityNotificationCard>i{
  padding:3px 6px;
  border-radius:999px;
  background:#dc2626;
  color:#fff;
  font-size:8px;
  font-style:normal;
  font-weight:900;
}

.inboxMessageCard.notificationFocus{
  outline:3px solid #60a5fa;
  outline-offset:2px;
}

/* Smart Navigator 1.0 */
.smartNavigatorTarget{position:relative!important;z-index:80!important;outline:4px solid #2563eb!important;outline-offset:4px!important;box-shadow:0 0 0 8px #93c5fd88,0 0 30px 12px #2563eb55!important;animation:smartNavigatorPulse .72s ease-in-out infinite alternate!important}
@keyframes smartNavigatorPulse{from{transform:scale(1);filter:brightness(1)}to{transform:scale(1.12);filter:brightness(1.22)}}
@media(prefers-reduced-motion:reduce){.smartNavigatorTarget{animation:none!important}}


/* Smart Navigator 1.0.2 overlay safety */
#taskDetailsModal[hidden],
#taskPhotoModal[hidden],
#staffActivityBackdrop[hidden]{
  display:none!important;
  pointer-events:none!important;
}


/* ================================================================
   Universal Search 1.0
   ================================================================ */

.workerGlobalSearchButton,
.staffGlobalSearchButton{
  flex:0 0 auto;
  width:40px!important;
  height:38px!important;
  display:grid!important;
  place-items:center!important;
  padding:0!important;
  border:1px solid #d8e1ed!important;
  border-radius:8px!important;
  background:#fff!important;
  color:#172033!important;
  font-size:16px!important;
}

.staffGlobalSearchButton{
  border:0!important;
  background:#ffffff12!important;
  color:#fff!important;
}

.globalSearchBackdrop{
  position:fixed;
  inset:0;
  z-index:1490;
  background:#02061790;
  backdrop-filter:blur(2px);
}

.globalSearchBackdrop[hidden],
.globalSearchPanel[hidden]{
  display:none!important;
}

.globalSearchPanel{
  position:fixed;
  top:76px;
  left:50%;
  z-index:1500;
  width:min(720px,calc(100vw - 24px));
  max-height:78dvh;
  display:flex;
  flex-direction:column;
  overflow:hidden;
  border-radius:16px;
  background:#f4f7fb;
  box-shadow:0 24px 80px #02061755;
  transform:translateX(-50%);
}

.globalSearchHead{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  padding:14px;
  background:#0f1a2c;
  color:#fff;
}

.globalSearchHead>div{
  display:grid;
}

.globalSearchHead span{
  color:#b7c3d6;
  font-size:11px;
}

.globalSearchHead button{
  width:40px;
  height:40px;
  padding:0;
  border:0;
  border-radius:9px;
  background:#ffffff12;
  color:#fff;
  font-size:24px;
}

.globalSearchInputWrap{
  padding:10px;
  border-bottom:1px solid #d8e1ed;
  background:#fff;
}

.globalSearchInputWrap input{
  width:100%;
  min-height:46px;
  padding:10px 12px;
  border:1px solid #cbd5e1;
  border-radius:10px;
  font:inherit;
}

.globalSearchResults{
  display:grid;
  align-content:start;
  gap:7px;
  padding:9px;
  overflow:auto;
}

.globalSearchResult{
  width:100%;
  display:grid;
  grid-template-columns:auto minmax(0,1fr);
  align-items:start;
  gap:10px;
  padding:11px;
  border:1px solid #d8e1ed;
  border-radius:10px;
  background:#fff;
  color:#172033;
  text-align:left;
  font:inherit;
  cursor:pointer;
}

.globalSearchResult>span:first-child{
  width:34px;
  height:34px;
  display:grid;
  place-items:center;
  border-radius:9px;
  background:#eef2f6;
}

.globalSearchResult>span:nth-child(2){
  min-width:0;
  display:grid;
  gap:2px;
}

.globalSearchResult b,
.globalSearchResult small,
.globalSearchResult em{
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}

.globalSearchResult small{
  color:#475569;
}

.globalSearchResult em{
  color:#64748b;
  font-size:10px;
  font-style:normal;
}

.globalSearchEmpty{
  padding:28px;
  border:1px dashed #cbd5e1;
  border-radius:10px;
  background:#fff;
  color:#64748b;
  text-align:center;
}

.globalSearchOpen{
  overflow:hidden;
}

@media(max-width:600px){
  .globalSearchPanel{
    top:64px;
    width:calc(100vw - 12px);
    max-height:84dvh;
    border-radius:14px;
  }
}


/* Universal Search 1.0.2 — click routing safety */
.globalSearchResults{
  position:relative;
  z-index:3;
}

.globalSearchResult{
  position:relative;
  z-index:4;
  pointer-events:auto!important;
  touch-action:manipulation;
}

.globalSearchResult *{
  pointer-events:none;
}
.issueClassification{display:grid;grid-template-columns:1fr 1fr;gap:12px}.issueClassification label{min-width:0}@media(max-width:560px){.issueClassification{grid-template-columns:1fr}}
.myIssuesCard{width:min(820px,calc(100vw - 24px));max-width:100%;max-height:calc(100dvh - 24px);overflow-x:hidden;overflow-y:auto}.myIssuesList,.myIssueItem,.myIssueHead>div{min-width:0}.myIssuesList{display:grid;gap:12px}.myIssueItem{width:100%;max-width:100%;overflow:hidden;border:1px solid #dbe3ef;border-radius:13px;padding:14px}.myIssueHead{display:flex;justify-content:space-between;gap:12px;min-width:0}.myIssueHead b,.myIssueHead span,.myIssueItem p{display:block;max-width:100%;overflow-wrap:anywhere;word-break:break-word}.myIssueHead span{font-size:12px;color:#64748b;margin-top:4px}.myIssueStatus{flex:0 0 auto;font-size:11px;text-transform:uppercase}.myIssueMeta{display:flex;gap:7px;flex-wrap:wrap;margin-top:10px}.myIssueMeta span{max-width:100%;overflow-wrap:anywhere;background:#eef2f7;border-radius:999px;padding:5px 8px;font-size:11px}.myIssuePhotos{display:flex;gap:8px;max-width:100%;overflow-x:auto}.myIssuePhotos img{width:90px;height:70px;object-fit:cover;border-radius:8px}.myIssueTimeline{margin:12px 0}.myIssueTimeline>div{min-width:0;border-left:3px solid #2563eb;padding:3px 0 8px 10px}.myIssueTimeline b,.myIssueTimeline span{display:block;overflow-wrap:anywhere}.myIssueTimeline span{font-size:11px;color:#64748b}.myIssueTimeline p{margin:4px 0}.myIssueActions{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:8px}.myIssueActions input{width:100%;min-width:0}@media(max-width:600px){#myIssuesModal{place-items:start center;padding:6px;overflow-y:auto}.myIssuesCard{width:calc(100vw - 12px);max-height:calc(100dvh - 12px);padding:14px;border-radius:14px}.myIssueHead{display:block}.myIssueStatus{display:inline-block;margin-top:7px}.myIssueActions{grid-template-columns:minmax(0,1fr)}.myIssueActions button{width:100%}}
.todayTaskCard.status-planned{background:#fff1f4!important;border-color:#f7c8d2!important}.todayTaskDrawingRef{margin:10px 0;padding:10px 12px;border-left:4px solid #2563eb;border-radius:8px;background:#f8fafc;color:#334155}.todayTaskDrawingRef b{color:#0f172a}
.taskEvidenceDrawingRef{padding:11px 13px;border:1px solid #bfdbfe;border-radius:10px;background:#eff6ff;color:#1e3a5f}.taskEvidenceDrawingRef b{display:block;color:#172238}.taskEvidenceDrawingRef small{display:block;margin-top:3px}.taskEvidenceForm select{width:100%;min-height:44px;padding:9px;border:1px solid #cbd5e1;border-radius:9px;background:#fff}
.taskWorkActivity{background:#dbeafe!important;color:#1d4ed8!important;font-weight:850;text-transform:capitalize}#workerInboxTasks .todayTaskCard{margin:0 0 10px}#workerInboxTasks .taskReadinessError{margin-bottom:10px}
.point.networkPoint{z-index:7!important;border:2px solid #fff!important;border-radius:999px!important;background:#10213a!important;color:#fff!important;box-shadow:0 2px 9px #0f172a88!important}.pointNetworkFibers{margin:10px 0;padding:10px;border:1px solid #bfd3ef;border-radius:13px;background:#f4f8ff}.pointNetworkFibers>header{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.pointNetworkFibers>header div{display:grid}.pointNetworkFibers>header small,.pointNetworkFibers>header span{color:#64748b;font-size:10px}.networkFiberList{display:grid;gap:7px}.networkFiberStatus{display:grid;grid-template-columns:6px minmax(0,1fr) auto auto;gap:8px;align-items:center;width:100%;min-height:58px;padding:8px;border:1px solid #d7e2f0;border-radius:10px;background:#fff;color:#17233a;text-align:left}.networkFiberStatus>i{align-self:stretch;border-radius:5px}.route-blue{background:#2563eb!important}.route-red{background:#dc2626!important}.route-yellow{background:#eab308!important}.route-green{background:#22c55e!important}.route-orange{background:#f97316!important}.route-black{background:#1f2937!important}.route-purple{background:#8b5cf6!important}.route-white{background:#cbd5e1!important}.networkFiberStatus div{display:grid}.networkFiberStatus div span{color:#64748b;font-size:9px}.networkFiberStatus>strong,.networkFiberDetailHead>strong{padding:5px 7px;border-radius:999px;background:#edf2f7;font-size:9px;text-transform:capitalize}.networkFiberStatus>em{color:#2563eb;font-size:22px;font-style:normal}.networkFiberStatus.status-issue{border-left-color:#dc2626}.networkFiberStatus.status-issue>strong,.networkFiberDetail.status-issue .networkFiberDetailHead>strong{background:#fee2e2;color:#b91c1c}.networkFiberStatus.status-in_progress>strong,.networkFiberDetail.status-in_progress .networkFiberDetailHead>strong{background:#dbeafe;color:#1d4ed8}.networkFiberStatus.status-pulled>strong,.networkFiberDetail.status-pulled .networkFiberDetailHead>strong{background:#fff6c7;color:#806000}.networkFiberStatus.status-dressed>strong,.networkFiberDetail.status-dressed .networkFiberDetailHead>strong{background:#ffedd5;color:#9a4a00}.networkFiberStatus.status-terminated>strong,.networkFiberDetail.status-terminated .networkFiberDetailHead>strong{background:#dcfce7;color:#166534}.networkFiberStatus.status-tested>strong,.networkFiberDetail.status-tested .networkFiberDetailHead>strong{background:#f0e8ff;color:#6c2bbd}.networkFiberStatus.status-patched>strong,.networkFiberDetail.status-patched .networkFiberDetailHead>strong{background:#d9f8fc;color:#08758a}.networkFiberDetail{display:grid;gap:10px}.networkFiberDetail[hidden],.networkFiberList[hidden]{display:none!important}.networkFiberBack{justify-self:start;min-height:34px;padding:6px 9px;border:1px solid #cbd8e8;background:#fff;color:#245ca8}.networkFiberDetailHead{display:grid;grid-template-columns:8px minmax(0,1fr) auto;gap:9px;align-items:center;padding:11px;border:1px solid #d6e1ee;border-radius:11px;background:#fff}.networkFiberDetailHead>i{align-self:stretch;border-radius:5px}.networkFiberDetailHead small{color:#2563eb;font-size:8px;font-weight:900}.networkFiberDetailHead h3{margin:1px 0!important;font-size:15px!important;color:#17233a!important}.networkFiberDetailHead p{margin:0;color:#64748b;font-size:9px}.networkFiberNotes,.networkFiberNoTask{margin:0;padding:9px;border-radius:9px;background:#fff;color:#5f6f84;font-size:10px}.networkFiberTask{width:100%;min-height:42px;background:#2563eb;color:#fff}
.networkFiberStatus.status-spliced>strong,.networkFiberDetail.status-spliced .networkFiberDetailHead>strong{background:#dcfce7;color:#166534}

/* UX fix (open UX question, "onboarding"): simple, one-time, 3-step
   coachmark for a Worker's first login (see startWorkerOnboarding() in
   app.js). .workerOnboardingHighlight's huge box-shadow spread is the
   standard "spotlight cutout" trick -- the box itself stays transparent
   so the real, live control shows through unobscured, while its shadow
   dims everything outside it. */
.workerOnboarding{position:fixed;inset:0;z-index:1600;pointer-events:none}
.workerOnboardingHighlight{position:fixed;border-radius:10px;box-shadow:0 0 0 9999px rgba(15,23,42,.6);transition:top .25s ease,left .25s ease,width .25s ease,height .25s ease;pointer-events:none}
.workerOnboardingCard{position:fixed;z-index:1601;width:260px;max-width:calc(100vw - 24px);background:#fff;border-radius:12px;padding:14px 16px;box-shadow:0 12px 32px #0004;pointer-events:auto}
.workerOnboardingCard b{display:block;font-size:15px;margin-bottom:4px;color:#111827}
.workerOnboardingCard p{margin:0 0 10px;font-size:13px;color:#4b5563;line-height:1.4}
.workerOnboardingActions{display:flex;justify-content:space-between;gap:8px}
.workerOnboardingActions button{border:0;border-radius:8px;padding:8px 14px;font:inherit;font-weight:700;cursor:pointer;min-height:36px}
.workerOnboardingActions [data-onboarding-skip]{background:#e5e7eb;color:#111827}
.workerOnboardingActions [data-onboarding-next]{background:#2563eb;color:#fff}
.workerOnboardingCard small{display:block;margin-top:8px;color:#9ca3af;font-size:11px;text-align:right}
.networkFiberStatus{background:#fff!important}.networkFiberStatus div span{display:inline-flex;justify-self:start;margin-top:3px;padding:3px 6px;border-radius:6px;background:#eef3f8;color:#26364a!important;font-weight:800}.workerNetworkCableConnection{position:absolute;z-index:6;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none}.workerNetworkCableConnection line{stroke-width:4;stroke-linecap:round;vector-effect:non-scaling-stroke;filter:drop-shadow(0 0 2px #fff) drop-shadow(0 0 4px #fff)}.point.networkCableEndSelected{z-index:8!important;outline:4px solid #fff;outline-offset:2px;box-shadow:0 0 0 7px #2563ebaa,0 4px 15px #0f172a88!important}

/* =====================================================================
   Paczka 249 -- WSPOLNY EKRAN LOGOWANIA.

   Te drzwi przyjmuja teraz pracownika i kadre (patrz
   siteos_front_door_redirect() w core/StaffGate.php), wiec musza wygladac
   jak reszta aplikacji, a nie jak osobny program.

   Wartosci sa przepisane z assets/siteos-ui.css (#loginForm) -- tego
   arkusza aplikacja pracownika nie laduje, a nie ma powodu dokladac jej
   80 KB stylow kadry dla jednego ekranu. Gdyby tamten wyglad kiedys sie
   zmienil, trzeba poprawic oba miejsca -- i dlatego to tu pisze.
   ===================================================================== */

/* Ciemny gradient szedl z czasow, gdy to byl ekran wylacznie dla
   robotnika na budowie. Kadra loguje sie na jasnym tle na kazdym innym
   ekranie -- niech tu bedzie tak samo. */
.access-gate{background:#f4f6f9}

.access-card{
  width:min(400px,100%);
  display:grid;
  gap:12px;
  padding:28px 26px 26px;
  border:1px solid #e2e8f0;
  border-radius:16px;
  box-shadow:0 20px 52px rgba(17,24,32,.10);
}
.access-card .sosGateMark{width:104px;height:auto;display:block;margin-bottom:2px}
.access-card .sosGateEyebrow{
  font-size:11px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;
  color:#1a5fc4;
}
.access-card .sosGateTitle{margin:0;font-size:24px;font-weight:700;letter-spacing:-.02em;line-height:1.15}
.access-card .sosGateLead{margin:-6px 0 4px;color:#5b6c81;font-size:14px}
.access-card .sosGateFoot{
  margin-top:6px;padding-top:13px;border-top:1px solid #e2e8f0;
  display:flex;justify-content:center;
}
.access-card .sosGateFoot img{width:128px;height:auto;display:block;opacity:.7}
