/* TasMan TW v1.6 — rozszerzenia na bazie dokładnego styles.css TasMan Editora. */
body.is-authenticated{overflow:hidden}.tw-app{width:100%;max-width:none;margin:0;padding:0;height:calc(100dvh - var(--tasman-site-header-height,77px));min-height:0}.tw-layout{display:grid;grid-template-columns:286px minmax(0,1fr);gap:0;width:100%;height:100%;min-height:0;align-items:stretch}.tw-sidebar{position:relative!important;top:auto!important;max-height:none!important;height:100%;min-height:0;display:flex;flex-direction:column;border-radius:0;border-top:0;border-bottom:0;border-left:0;overflow:hidden}.tw-sidebar-head{flex:0 0 auto}.tw-sidebar-scroll{display:grid;gap:7px;overflow:auto;padding-right:2px;min-height:0}.tw-user{margin:2px 0 0;font-size:11px;overflow:hidden;text-overflow:ellipsis}.tw-live-card{flex:0 0 auto;margin:0 0 10px;padding:10px;border:1px solid var(--line);border-radius:12px;background:#fff}.tw-live-status{display:flex;align-items:center;gap:7px;font-size:12px;font-weight:900}.tw-live-meta{margin-top:5px;color:var(--muted);font-size:10px;line-height:1.35}.tw-refresh{margin-top:8px}.tw-switch-row{display:flex;align-items:center;justify-content:space-between;gap:10px;min-height:38px;padding:7px 8px;border:1px solid var(--line);border-radius:11px;background:#fff}.tw-switch-row label{display:flex;align-items:center;gap:9px;cursor:pointer;font-weight:800}.tw-switch-row input{accent-color:var(--red)}.tw-divider{height:1px;background:var(--line);margin:5px 0}.tw-filter-label{display:grid;gap:5px;font-size:12px;font-weight:900;color:var(--ink)}.tw-filter-label input{width:100%;min-height:42px;border:1px solid var(--line-strong);border-radius:10px;background:#fff;padding:8px 10px;outline:none}.tw-filter-label input:focus{border-color:var(--red);box-shadow:0 0 0 3px var(--red-soft)}.tw-legend-row{display:flex;align-items:center;gap:8px;font-size:11px;color:var(--muted)}.tw-sidebar-footer{flex:0 0 auto;margin-top:auto;padding-top:10px;border-top:1px solid var(--line)}.status-dot{display:inline-block;width:9px;height:9px;border-radius:999px;background:var(--amber)}.status-dot.ok{background:var(--ok)}.status-dot.error{background:var(--red)}
.tw-content{position:relative;min-width:0;min-height:0;height:100%;padding:0!important;margin:0!important;display:block;overflow:hidden}.tw-map-card{position:absolute;inset:0;min-height:0;height:auto;border:0;border-radius:0;overflow:hidden;background:#dfe4ea;box-shadow:none}#map{position:absolute;inset:0}.leaflet-control-attribution{font-size:10px}.tw-map-sidebar-toggle{display:none!important;position:absolute;z-index:900;left:12px;top:12px}
.map-clock{position:absolute;right:12px;bottom:24px;z-index:820;padding:7px 11px;border-radius:8px;background:rgba(8,15,15,.84);color:#fff;font-family:Rubik,Inter,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;font-size:30px;font-weight:700;line-height:1.1;letter-spacing:.01em;font-variant-numeric:tabular-nums;box-shadow:0 1px 5px rgba(0,0,0,.22);pointer-events:none}
.vehicle-div-icon{background:transparent!important;border:0!important}.vehicle-marker{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:0;min-width:max-content;height:25px;padding:0;border-radius:8px;background:#fff;border:2px solid var(--red);box-shadow:0 2px 7px rgba(8,15,15,.28);color:#8e0000;font-size:11px;font-weight:950;line-height:1;white-space:nowrap;transform:translate(-50%,-50%);cursor:pointer}.vehicle-marker.bus{border-color:#0969a8;color:#074a77}.marker-bearing{display:inline-flex;align-items:center;justify-content:center;width:11px;height:13px;margin:0 1px 0 2px;line-height:1;transform:rotate(var(--bearing,0deg));transform-origin:50% 50%;flex:0 0 11px}.marker-bearing svg{display:block;width:11px;height:13px;overflow:visible}.marker-bearing path{fill:#ffd92f;stroke:#d71920;stroke-width:1.55;stroke-linejoin:round;vector-effect:non-scaling-stroke}.marker-bearing.stopped-long path{fill:#fff}.marker-bearing.moving path{fill:#ffd92f}.marker-bearing.unknown{opacity:.28}.vehicle-marker .marker-brigade{font-size:7px;font-weight:850;letter-spacing:.02em;align-self:center}.vehicle-marker .marker-sep{margin:0 1px;font-size:9px;font-weight:800;opacity:.62}.vehicle-marker .marker-line{font-size:11px;font-weight:950}.vehicle-marker .marker-number{margin-left:2px;margin-right:3px;font-size:11px;font-weight:950}.vehicle-marker.on-time{background:#198754;border-color:#11693f;color:#fff}.vehicle-marker.late{background:#6f2da8;border-color:#4f1e7e;color:#fff}.vehicle-marker.early{background:#ffd92f;border-color:#c6a300;color:#b00020}.vehicle-marker.critical{background:#7a0019;border-color:#4d0010;color:#fff}.vehicle-marker.off-route{background:#f28c28;border-color:#b85f00;color:#111}.vehicle-marker.unmatched{background:#fff;border-color:var(--red);color:#8e0000}.vehicle-marker.stale{background:#737373;border-color:#525252;color:#fff;opacity:1;filter:none}.vehicle-marker.stale .marker-sep{opacity:.8}.vehicle-marker .marker-bearing{filter:drop-shadow(0 0 1px rgba(255,255,255,.9))}.vehicle-marker.stale .marker-bearing{opacity:1;filter:none}.vehicle-marker.stale .marker-bearing path{stroke:#d71920}.vehicle-marker.selected{outline:3px solid rgba(255,186,8,.8);outline-offset:2px}.leaflet-tooltip.vehicle-tooltip{font-size:12px;font-weight:750;border-radius:8px}
.sample-marker{display:inline-flex;align-items:center;gap:1px;min-width:max-content;padding:4px 7px;border-radius:9px;border:2px solid var(--red);background:#fff;color:#8e0000;font-size:10px;font-weight:900;line-height:1}.sample-marker.stale{background:#737373;border-color:#525252;color:#fff;opacity:1}.sample-bearing{display:inline-flex;width:11px;height:13px;margin-right:2px;align-items:center;justify-content:center}.sample-bearing svg{display:block;width:11px;height:13px;overflow:visible}.sample-bearing path{fill:#ffd92f;stroke:#d71920;stroke-width:1.7;stroke-linejoin:round;vector-effect:non-scaling-stroke}.sample-brigade{font-size:7px}
.detail-panel{position:absolute;z-index:850;right:14px;top:14px;width:min(390px,calc(100% - 28px));max-height:calc(100% - 58px);overflow:auto;background:rgba(255,252,249,.985);border:1px solid var(--line);border-top:5px solid var(--red);border-radius:16px;box-shadow:var(--shadow);padding:18px}.detail-close{position:absolute;right:9px;top:8px;width:36px;height:36px;border:1px solid var(--line);border-radius:10px;background:#fff;font-size:22px;cursor:pointer}.vehicle-title{display:flex;align-items:center;gap:9px;margin:0 38px 5px 0}.vehicle-number{font-size:24px;font-weight:950;color:var(--ink)}.vehicle-sub{color:var(--muted);font-size:13px;margin-bottom:14px}.detail-grid{display:grid;grid-template-columns:128px 1fr;gap:7px 10px;font-size:13px}.detail-grid dt{color:var(--muted)}.detail-grid dd{margin:0;font-weight:700;overflow-wrap:anywhere}.detail-section{margin-top:15px;padding-top:13px;border-top:1px solid var(--line)}.detail-section h3{font-size:13px;margin:0 0 9px}.schedule-state{font-size:13px;color:var(--muted)}.stale-warning{margin-top:12px;background:#fff4db;border:1px solid rgba(255,186,8,.6);color:#6b4300;border-radius:10px;padding:9px;font-size:12px}.brigade-button{margin-top:12px;width:100%}.detail-panel pre{max-height:260px;overflow:auto;font-size:10px;background:#f7f4ef;border:1px solid var(--line);border-radius:10px;padding:9px}
.delay-value{display:inline-block;width:max-content;padding:2px 6px;border-radius:6px}.delay-value.on-time{background:#198754;color:#fff}.delay-value.late{background:#6f2da8;color:#fff}.delay-value.early{background:#ffd92f;color:#b00020}.delay-value.critical{background:#7a0019;color:#fff}.delay-value.stale{background:#737373;color:#fff}.brigade-schedule-meta{margin-top:10px;font-size:10px;color:var(--muted)}.brigade-schedule-scroll{margin-top:7px;max-height:330px;overflow:auto;border:1px solid var(--line);border-radius:9px;background:#fff}.brigade-schedule-table{width:100%;border-collapse:collapse;font-size:10px;line-height:1.25}.brigade-schedule-table th,.brigade-schedule-table td{padding:5px 6px;border-bottom:1px solid var(--line);vertical-align:top;text-align:left}.brigade-schedule-table th{position:sticky;top:0;z-index:1;background:#f5f2ee;font-weight:900}.brigade-schedule-table .course-row td{background:#e9e4dc;color:var(--ink);font-weight:900;border-top:2px solid var(--line-strong)}.brigade-schedule-table small{color:var(--muted)}
@media(max-width:980px){.tw-layout{grid-template-columns:1fr}.tw-sidebar{position:fixed!important;left:-310px;top:var(--tasman-site-header-height,77px)!important;bottom:0;width:min(286px,calc(100vw - 32px));height:auto;max-height:none!important;z-index:1020;transition:left .2s;border-right:1px solid var(--line)}body.sidebar-open .tw-sidebar{left:0}.tw-map-sidebar-toggle{display:inline-flex!important}.ui-backdrop.tw-open{display:block!important}.tw-app{height:calc(100dvh - var(--tasman-site-header-height,77px))}}
@media(max-width:680px){.detail-panel{right:7px;top:7px;width:calc(100% - 14px);max-height:calc(100% - 52px)}.vehicle-marker{height:24px;padding:0;border-radius:8px}.marker-bearing{width:10px;height:12px;flex-basis:10px}.marker-bearing svg{width:10px;height:12px}.vehicle-marker .marker-brigade{font-size:6px}.vehicle-marker .marker-line,.vehicle-marker .marker-number{font-size:10px}.map-clock{right:7px;bottom:22px;font-size:26px}}
.sample-marker.on-time{background:#198754;border-color:#11693f;color:#fff}.sample-marker.late{background:#6f2da8;border-color:#4f1e7e;color:#fff}.sample-marker.early{background:#ffd92f;border-color:#c6a300;color:#b00020}.sample-marker.critical{background:#7a0019;border-color:#4d0010;color:#fff}

/* TasMan TW v1.6 — osobne okno rozkładu brygady */
.brigade-window-body{min-height:100vh;background:var(--bg,#f4f1ec);color:var(--ink,#202020);overflow:auto}
.brigade-window-header{position:sticky;top:0;z-index:50;display:flex;align-items:center;justify-content:space-between;gap:18px;padding:10px 18px}
.brigade-window-header .brand{display:flex;align-items:center;gap:10px}.brigade-window-header .brand img{width:42px;height:42px;object-fit:contain}.brigade-window-header .brand div{display:flex;flex-direction:column}.brigade-window-header .brand span{font-size:12px;opacity:.72}
.brigade-window-actions{display:flex;gap:8px;align-items:center}.brigade-window-main{padding:18px;max-width:1280px;margin:0 auto}.brigade-window-topbar{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;margin-bottom:14px}.brigade-window-topbar h1{margin:0;font-size:24px}.brigade-window-output{min-height:180px}.brigade-window-message{padding:22px;border:1px solid var(--line);border-radius:12px;background:#fff}.brigade-window-scroll{max-height:none;overflow:visible}.brigade-window-table{font-size:13px;line-height:1.35}.brigade-window-table th,.brigade-window-table td{padding:8px 10px}.brigade-window-table th{position:sticky;top:63px}.brigade-window-table .course-row td{font-size:13px;padding-top:9px;padding-bottom:9px}
@media(max-width:680px){.brigade-window-header{padding:8px 10px}.brigade-window-main{padding:10px}.brigade-window-topbar{display:block}.brigade-window-actions{margin-left:auto}.brigade-window-table{font-size:11px}.brigade-window-table th,.brigade-window-table td{padding:6px}.brigade-window-table th{top:59px}}

.brigade-schedule-table .break-row td{background:#fff6d8;color:#4d3a00;font-weight:850;text-align:center;border-top:1px dashed #c7a74a;border-bottom:1px dashed #c7a74a;padding:6px 8px}
.brigade-schedule-table tr.current-vehicle-stop td{background:#fff1a8;font-weight:900;border-top:2px solid #d71920;border-bottom:2px solid #d71920}.brigade-schedule-table tr.current-vehicle-stop td:first-child{box-shadow:inset 5px 0 0 #d71920}


/* TasMan TW v1.8.14 — zarządzanie rozkładami */
body.section-schedules .tw-layout{grid-template-columns:1fr}body.section-schedules .tw-sidebar{display:none!important}body.section-schedules .tw-map-sidebar-toggle{display:none!important}
.tw-schedules-view{position:absolute;inset:0;overflow:auto;padding:22px;background:var(--bg,#f4f1ec)}.tw-page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;margin-bottom:16px}.tw-page-head h1{margin:2px 0 4px;font-size:28px}.tw-page-head p{margin:0;color:var(--muted)}
.tw-schedule-summary{display:grid;grid-template-columns:repeat(5,minmax(130px,1fr));gap:10px;margin-bottom:14px}.tw-schedule-summary>div{background:#fff;border:1px solid var(--line);border-radius:12px;padding:12px}.tw-schedule-summary span{display:block;font-size:11px;color:var(--muted);font-weight:800;text-transform:uppercase}.tw-schedule-summary strong{display:block;margin-top:4px;font-size:18px}
.tw-schedule-actions{display:flex;align-items:end;gap:10px;flex-wrap:wrap;padding:14px;background:#fff;border:1px solid var(--line);border-radius:12px;margin-bottom:14px}.tw-schedule-actions label{display:grid;gap:5px;min-width:180px;font-size:12px;font-weight:850}.tw-schedule-actions select{min-height:40px;border:1px solid var(--line-strong);border-radius:9px;background:#fff;padding:7px 9px}.tw-schedule-actions .danger{background:#7a0019;color:#fff;border-color:#4d0010}
.tw-admin-message{padding:10px 12px;margin-bottom:12px;border-radius:10px;background:#e9f6ee;border:1px solid #8fc6a0;color:#195b31;font-weight:750}.tw-admin-message.error{background:#fff0f0;border-color:#d9a2a2;color:#8e0000}.tw-schedule-table-wrap{overflow:auto;background:#fff;border:1px solid var(--line);border-radius:12px}.tw-schedule-table{width:100%;border-collapse:collapse;font-size:12px}.tw-schedule-table th,.tw-schedule-table td{padding:8px 10px;border-bottom:1px solid var(--line);text-align:left;white-space:nowrap}.tw-schedule-table th{position:sticky;top:0;background:#f5f2ee;z-index:1}.tw-schedule-table small{color:var(--muted)}.schedule-badge{display:inline-block;padding:3px 7px;border-radius:999px;font-size:10px;font-weight:900}.schedule-badge.ok{background:#198754;color:#fff}.schedule-badge.work{background:#fff0b8;color:#6a4a00}.schedule-badge.error{background:#7a0019;color:#fff}.schedule-badge.idle{background:#e4e9ef;color:#40586d}
@media(max-width:900px){.tw-schedule-summary{grid-template-columns:repeat(2,minmax(120px,1fr))}.tw-schedules-view{padding:12px}.tw-page-head{display:block}.tw-page-head button{margin-top:10px}}


/* TasMan PERON v1.8.30 — pełnoekranowe moduły Rozkłady/Monitor punktualności */
body.section-standalone .tw-layout{grid-template-columns:1fr}
body.section-standalone .tw-sidebar{display:none!important}
body.section-standalone .tw-map-sidebar-toggle{display:none!important}
.tw-punctuality-view{position:absolute;inset:0;overflow:auto;padding:22px;background:var(--bg,#f4f1ec)}
.tw-punctuality-summary{display:grid;grid-template-columns:repeat(6,minmax(130px,1fr));gap:10px;margin-bottom:14px}
.tw-punctuality-summary>div{background:#fff;border:1px solid var(--line);border-radius:12px;padding:12px}
.tw-punctuality-summary span{display:block;font-size:11px;color:var(--muted);font-weight:800;text-transform:uppercase}
.tw-punctuality-summary strong{display:block;margin-top:4px;font-size:21px}
.tw-punctuality-summary small{display:block;margin-top:3px;color:var(--muted);font-size:10px}
.tw-punctuality-caption{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:16px 0 8px;font-size:13px}
.tw-punctuality-caption span{color:var(--muted);font-size:11px}
.tw-punctuality-table-wrap{overflow:auto;background:#fff;border:1px solid var(--line);border-radius:12px}
.tw-punctuality-table{width:100%;border-collapse:collapse;font-size:12px}
.tw-punctuality-table th,.tw-punctuality-table td{padding:9px 10px;border-bottom:1px solid var(--line);text-align:left;white-space:nowrap;vertical-align:middle}
.tw-punctuality-table th{position:sticky;top:0;z-index:1;background:#f5f2ee;font-weight:900}
.tw-punctuality-table td small{display:block;margin-top:2px;color:var(--muted);font-size:10px}
.sample-marker.off-route{background:#f28c28;border-color:#b85f00;color:#111}
@media(max-width:1100px){.tw-punctuality-summary{grid-template-columns:repeat(3,minmax(120px,1fr))}}
@media(max-width:700px){.tw-punctuality-view{padding:12px}.tw-punctuality-summary{grid-template-columns:repeat(2,minmax(110px,1fr))}.tw-punctuality-caption{display:block}.tw-punctuality-caption span{display:block;margin-top:3px}}

/* TasMan PERON v1.8.30 — Rozkłady i Monitor bez panelu modułowego.
   Desktopowy editor-base.css v68 wymusza kolumnę --tm-module-width przez selektor z #appView,
   dlatego tutaj celowo używamy selektora o wyższej specyficzności i !important. */
body.is-authenticated.section-standalone #appView.app-shell .app-layout.tw-layout {
  grid-template-columns: minmax(0, 1fr) !important;
  width: 100% !important;
}
body.is-authenticated.section-standalone #appView.app-shell #editorSidebar.tw-sidebar {
  display: none !important;
  width: 0 !important;
  min-width: 0 !important;
  max-width: 0 !important;
}
body.is-authenticated.section-standalone #appView.app-shell .content.tw-content {
  grid-column: 1 / -1 !important;
  width: 100% !important;
  max-width: none !important;
  min-width: 0 !important;
  height: 100% !important;
  padding: 0 !important;
  margin: 0 !important;
  background: var(--tm-panel, #fff) !important;
}
body.is-authenticated.section-standalone #appView.app-shell #schedulesView.tw-schedules-view,
body.is-authenticated.section-standalone #appView.app-shell #punctualityView.tw-punctuality-view {
  position: absolute !important;
  inset: 0 !important;
  width: 100% !important;
  max-width: none !important;
  min-width: 0 !important;
  height: 100% !important;
  box-sizing: border-box !important;
  overflow: auto !important;
  padding: 24px 28px 32px !important;
  background: var(--tm-canvas, #ECEFED) !important;
}
body.is-authenticated.section-standalone #appView.app-shell .tw-page-head,
body.is-authenticated.section-standalone #appView.app-shell .tw-schedule-summary,
body.is-authenticated.section-standalone #appView.app-shell .tw-schedule-actions,
body.is-authenticated.section-standalone #appView.app-shell .tw-schedule-table-wrap,
body.is-authenticated.section-standalone #appView.app-shell .tw-punctuality-summary,
body.is-authenticated.section-standalone #appView.app-shell .tw-punctuality-caption,
body.is-authenticated.section-standalone #appView.app-shell .tw-punctuality-table-wrap {
  width: 100% !important;
  max-width: none !important;
  box-sizing: border-box !important;
}
@media (max-width: 1100px) {
  body.is-authenticated.section-standalone #appView.app-shell #schedulesView.tw-schedules-view,
  body.is-authenticated.section-standalone #appView.app-shell #punctualityView.tw-punctuality-view {
    padding: 14px !important;
  }
}

/* v1.8.30 UI final: moduły administracyjne wykorzystują pełny obszar roboczy;
   znacznik pojazdu bez paddingu, mniejsza strzałka; zegar Rubik/Inter 700. */
