Wszystkie kursy
Szkolenie z Polityki wykorzystania sztucznej inteligencji oraz zgodności z AI ACT
<title>Jak prowadzimy projekty w Gourmet Foods — szkolenie</title>
<meta name="description" content="Szkolenie z firmowej metodyki prowadzenia projektów: Fundation → Realizacja → Service Transition → Adoption → RUN. Deck z drill-down i wyszukiwarką. Offline.">
<style>
/* ===== TOKENY (motyw corporate-blue, offline) ===== */
:root{
--bg:#0A0F1D; --bg2:#0d1526; --panel:rgba(14,25,43,.82); --panel2:#101c31;
--accent:#3B82F6; --accent-2:#60a5fa; --accent-dim:rgba(59,130,246,.14);
--ok:#10B981; --ok-dim:rgba(16,185,129,.14); --warn:#F59E0B; --warn-dim:rgba(245,158,11,.14);
--bad:#EF4444; --bad-dim:rgba(239,68,68,.14); --gold:#e7c66b;
--ink:#F1F5F9; --muted:#9db0c7; --dim:#64748B;
--line:rgba(255,255,255,.08); --line-2:rgba(255,255,255,.15);
--radius:16px;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{
background:radial-gradient(1200px 700px at 50% -12%, #12233d 0%, var(--bg) 62%);
color:var(--ink); font:16px/1.55 system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif;
display:flex; flex-direction:column; min-height:100vh;
}
h1,h2,h3,h4{line-height:1.2;font-weight:800}
a{color:var(--accent-2)}
mark{background:var(--warn);color:#111;border-radius:3px;padding:0 2px}
/* ===== TOP BAR ===== */
.bar{position:sticky;top:0;z-index:30;display:flex;gap:12px;align-items:center;
padding:10px 16px;background:linear-gradient(180deg,rgba(10,15,29,.96),rgba(10,15,29,.7));
backdrop-filter:blur(10px);border-bottom:1px solid var(--line)}
.bar .logo{font-weight:800;letter-spacing:.2px;white-space:nowrap}
.bar .logo small{display:block;font-weight:500;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.5px}
.search{flex:1;max-width:420px;position:relative}
.search input{width:100%;background:#0b1424;border:1px solid var(--line-2);color:var(--ink);
border-radius:10px;padding:9px 12px 9px 34px;font:inherit}
.search input:focus{outline:none;border-color:var(--accent)}
.search::before{content:"🔍";position:absolute;left:10px;top:8px;opacity:.7;font-size:13px}
.tools{display:flex;gap:6px;margin-left:auto;flex-wrap:wrap}
button.tool{cursor:pointer;font:inherit;font-size:13px;color:var(--ink);background:#0d1a2e;
border:1px solid var(--line-2);border-radius:9px;padding:8px 11px;white-space:nowrap;transition:.15s}
button.tool:hover{border-color:var(--accent);background:#12233d}
button.tool.on{background:var(--accent-dim);border-color:var(--accent);color:var(--accent-2)}
.count{font-size:13px;color:var(--muted);white-space:nowrap;padding:0 4px}
/* ===== PROGRESS ===== */
.prog{height:3px;background:#0b1424}
.prog > i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--accent),var(--accent-2));transition:width .4s}
/* ===== STAGE / SLIDE ===== */
.stage{flex:1;display:flex;align-items:flex-start;justify-content:center;padding:26px 18px 90px}
.slide{width:100%;margin:0 auto;display:none;animation:fade .35s ease}
.slide.active{display:block}
.slide-main{min-width:0}
.slide-aside{min-width:0}
.slide-aside:empty{display:none}
/* ===== UKŁADY — przełączane przez body[data-layout].
DODANIE NOWEGO UKŁADU = 1 blok CSS tutaj + 1 wpis w LAYOUTS (JS). ===== */
/* flow — klasyczny, 1 kolumna */
body[data-layout='flow'] .slide{max-width:980px}
/* wide — szerszy, 1 kolumna, większe fonty */
body[data-layout='wide'] .slide{max-width:1140px}
body[data-layout='wide'] .slide h2{font-size:34px}
body[data-layout='wide'] .lead{font-size:19px}
/* two — 2 kolumny: teza+punkty | przykład+drill-down */
body[data-layout='two'] .slide{max-width:1280px}
body[data-layout='two'] .slide:not(.cover).active{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);gap:26px;align-items:start}
body[data-layout='two'] .slide.no-aside:not(.cover).active{grid-template-columns:1fr}
body[data-layout='two'] .notes{grid-column:1/-1}
body[data-layout='two'] .slide-aside .box:first-child{margin-top:0}
/* stage — pełny ekran, duże fonty (pod rzutnik) */
body[data-layout='stage'] .slide{max-width:1580px}
body[data-layout='stage'] .slide h2{font-size:42px}
body[data-layout='stage'] .lead{font-size:23px}
body[data-layout='stage'] .pts li{font-size:19px;padding:14px 18px}
/* wsp. dla select układu */
select.tool{appearance:auto;-webkit-appearance:auto}
select.tool option{background:#0d1a2e;color:var(--ink)}
@keyframes fade{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
.kicker{display:inline-block;font-size:12px;font-weight:700;letter-spacing:.7px;text-transform:uppercase;
color:var(--accent-2);background:var(--accent-dim);border:1px solid rgba(59,130,246,.3);
padding:4px 10px;border-radius:20px;margin-bottom:14px}
.slide h2{font-size:30px;margin-bottom:10px}
.lead{font-size:18px;color:var(--ink);opacity:.95;margin-bottom:18px}
.pts{list-style:none;display:flex;flex-direction:column;gap:10px;margin:0 0 6px}
.pts li{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:12px 14px;
border-left:3px solid var(--accent)}
.pts li b{color:var(--accent-2)}
.two{display:grid;grid-template-columns:1fr 1fr;gap:10px}
@media (max-width:680px){.two{grid-template-columns:1fr}.slide h2{font-size:24px}}
/* callouts */
.box{border-radius:12px;padding:13px 15px;margin-top:14px;border:1px solid var(--line)}
.box .t{font-weight:700;font-size:12px;text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px;display:flex;gap:8px;align-items:center}
.box.ex{background:var(--ok-dim);border-color:#1f6a4f} .box.ex .t{color:var(--ok)}
.box.rule{background:var(--accent-dim);border-color:#2a5aa0} .box.rule .t{color:var(--accent-2)}
.box.warn{background:var(--warn-dim);border-color:#7a5f1e} .box.warn .t{color:var(--warn)}
.box.tip{background:rgba(231,198,107,.10);border-color:rgba(231,198,107,.45)} .box.tip .t{color:var(--gold)}
/* drill-down */
details.dd{margin-top:16px;border:1px solid var(--line-2);border-radius:12px;background:var(--panel2);overflow:hidden}
details.dd > summary{cursor:pointer;list-style:none;padding:12px 15px;font-weight:600;color:var(--accent-2);
display:flex;align-items:center;gap:10px;user-select:none}
details.dd > summary::-webkit-details-marker{display:none}
details.dd > summary::before{content:"▸";transition:.2s;color:var(--accent)}
details.dd[open] > summary::before{transform:rotate(90deg)}
details.dd > summary:hover{background:#132339}
.dd .inner{padding:4px 16px 16px;border-top:1px solid var(--line)}
.dd .inner h4{margin:14px 0 6px;color:var(--ink)}
.dd .inner p{margin:6px 0;color:var(--muted)}
.dd .inner ul{margin:6px 0 6px 18px;color:var(--muted)}
.dd .inner li{margin:3px 0}
.dd .inner code,.formula{font-family:"JetBrains Mono",ui-monospace,Consolas,monospace}
.formula{display:block;background:#0b1424;border:1px solid var(--line);border-radius:8px;padding:10px 12px;margin:8px 0;color:var(--accent-2);font-size:14px;overflow-x:auto}
table.tbl{width:100%;border-collapse:collapse;margin:10px 0;font-size:14px}
table.tbl th,table.tbl td{border:1px solid var(--line);padding:7px 9px;text-align:left;vertical-align:top}
table.tbl th{background:#0e1a2e;color:var(--ink)}
table.tbl td{color:var(--muted)}
.flow{display:flex;flex-wrap:wrap;gap:8px;align-items:stretch;margin:6px 0}
.flow .st{flex:1;min-width:120px;background:var(--panel);border:1px solid var(--line);border-top:3px solid var(--accent);border-radius:10px;padding:10px 12px}
.flow .st b{display:block;color:var(--accent-2);font-size:14px}
.flow .st span{font-size:12px;color:var(--muted)}
/* mini-quiz sprawdzający — ZAKRYTY domyślnie (details), odsłaniany kliknięciem */
.quiz{margin-top:16px;border:1px solid rgba(59,130,246,.35);border-radius:12px;overflow:hidden;
background:linear-gradient(180deg,var(--accent-dim),rgba(59,130,246,.03))}
.quiz > summary{cursor:pointer;list-style:none;padding:11px 14px;font-weight:700;color:var(--accent-2);
font-size:12px;text-transform:uppercase;letter-spacing:.6px;display:flex;gap:8px;align-items:center;user-select:none}
.quiz > summary::-webkit-details-marker{display:none}
.quiz > summary::before{content:"▸";transition:.2s;color:var(--accent)}
.quiz[open] > summary::before{transform:rotate(90deg)}
.quiz > summary:hover{background:rgba(59,130,246,.08)}
.quiz .qbody{padding:4px 14px 14px}
.quiz .qq{font-weight:600;margin-bottom:10px;color:var(--ink)}
.quiz .qopts{display:flex;flex-direction:column;gap:8px}
.qhint{font-size:13px;color:var(--warn);margin-bottom:10px}
.quiz.done .qhint{display:none}
/* rozmycie TREŚCI GŁÓWNEJ slajdu, gdy panel pytania jest otwarty i bez odpowiedzi —
użytkownik nie „podgląda” odpowiedzi ze slajdu, musi wybrać sam */
.slide-main{transition:filter .25s}
.slide.quiz-open .slide-main{filter:blur(7px);user-select:none}
.quiz-opt{text-align:left;cursor:pointer;font:inherit;color:var(--ink);background:#0d1a2e;
border:1px solid var(--line-2);border-radius:9px;padding:9px 12px;transition:.15s;line-height:1.4}
.quiz-opt:hover:not(:disabled){border-color:var(--accent);background:#12233d}
.quiz-opt:disabled{cursor:default;opacity:.85}
.quiz-opt.ok{border-color:var(--ok);background:var(--ok-dim)}
.quiz-opt.bad{border-color:var(--bad);background:var(--bad-dim)}
.quiz-opt .mk{float:right;font-weight:800}
.quiz .why{margin-top:11px;font-size:14px;color:var(--muted);border-top:1px solid var(--line);
padding-top:9px;display:none}
.quiz .why.show{display:block}
.quiz .why b{color:var(--ink)}
@media print{.quiz{background:#f6f8fb!important}.quiz .why{display:block!important;color:#333!important}.quiz-opt{background:#fff!important;color:#111!important}.slide.quiz-open .slide-main{filter:none!important}.qhint{display:none!important}}
/* test końcowy */
.exam{display:flex;flex-direction:column;gap:14px;margin-top:6px}
.exam-q{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:14px 16px;border-left:3px solid var(--accent)}
.exam-q .n{font-size:12px;color:var(--accent-2);font-weight:700;text-transform:uppercase;letter-spacing:.5px}
.exam-q .q{font-weight:600;margin:4px 0 10px;color:var(--ink)}
.exam-opts{display:flex;flex-direction:column;gap:8px}
.exam-opt{text-align:left;cursor:pointer;font:inherit;color:var(--ink);background:#0d1a2e;border:1px solid var(--line-2);
border-radius:9px;padding:9px 12px;transition:.15s;line-height:1.4}
.exam-opt:hover:not(:disabled){border-color:var(--accent);background:#12233d}
.exam-opt:disabled{cursor:default;opacity:.9}
.exam-opt.ok{border-color:var(--ok);background:var(--ok-dim)}
.exam-opt.bad{border-color:var(--bad);background:var(--bad-dim)}
.exam-opt .mk{float:right;font-weight:800}
.exam-why{display:none;margin-top:9px;font-size:14px;color:var(--muted);border-top:1px solid var(--line);padding-top:8px}
.exam-why.show{display:block}
.exam-actions{display:flex;gap:12px;align-items:center;margin-top:16px;flex-wrap:wrap}
.cta-exam{cursor:pointer;font:inherit;font-weight:700;color:#06121e;background:linear-gradient(90deg,var(--accent),var(--accent-2));
border:0;border-radius:10px;padding:11px 20px;transition:.15s}
.cta-exam:hover{filter:brightness(1.06)}
.cta-exam.ghost{background:transparent;color:var(--ink);border:1px solid var(--line-2)}
.exam-progress{color:var(--muted);font-size:14px}
.main-cta{margin-top:18px}
.exam-result{margin-top:16px}
.exam-result .big{font-size:32px;font-weight:800}
@media print{.exam-why{display:block!important;color:#333!important}.exam-opt{background:#fff!important;color:#111!important}.exam-actions{display:none!important}}
/* presenter notes */
.notes{display:none;margin-top:16px;border:1px dashed var(--line-2);border-radius:10px;padding:12px 14px;background:rgba(59,130,246,.05)}
.notes .t{font-size:11px;text-transform:uppercase;letter-spacing:.6px;color:var(--dim);margin-bottom:5px}
.notes p{color:var(--muted);font-size:14px}
body.presenter .notes{display:block}
/* cover / slajd startowy */
.slide.cover{max-width:960px;text-align:center;padding-top:22px}
.slide.cover .badge{display:inline-block;font-size:12px;font-weight:700;letter-spacing:1px;text-transform:uppercase;
color:var(--accent-2);background:var(--accent-dim);border:1px solid rgba(59,130,246,.35);padding:6px 14px;border-radius:20px}
.slide.cover .brand-mark{width:64px;height:64px;margin:22px auto 6px;border-radius:16px;
background:linear-gradient(135deg,var(--accent),#1e40af);display:flex;align-items:center;justify-content:center;
font-weight:800;font-size:26px;color:#fff;box-shadow:0 12px 40px rgba(59,130,246,.35)}
.slide.cover h1{font-size:44px;line-height:1.1;margin:14px 0 8px;letter-spacing:-.5px}
.slide.cover .sub{font-size:20px;color:var(--muted);margin-bottom:8px}
.slide.cover .life{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;margin:26px auto 22px;max-width:760px}
.slide.cover .life span{font-size:13px;font-weight:600;color:var(--ink);background:var(--panel);border:1px solid var(--line);
border-top:3px solid var(--accent);border-radius:10px;padding:9px 14px}
.slide.cover .life i{color:var(--dim);align-self:center;font-style:normal}
.slide.cover .meta{display:inline-flex;gap:26px;flex-wrap:wrap;justify-content:center;margin-top:8px;
border-top:1px solid var(--line);padding-top:16px;color:var(--muted);font-size:15px}
.slide.cover .meta b{color:var(--ink)}
.slide.cover .hint{margin-top:22px;color:var(--dim);font-size:13px}
@media (max-width:680px){.slide.cover h1{font-size:30px}}
@media print{.slide.cover h1{color:#12324f}.slide.cover .brand-mark{box-shadow:none}}
/* nav buttons */
.nav{position:fixed;bottom:18px;left:0;right:0;display:flex;justify-content:center;gap:10px;z-index:25;pointer-events:none}
.nav button{pointer-events:auto;cursor:pointer;font:inherit;font-weight:600;background:#0d1a2e;color:var(--ink);
border:1px solid var(--line-2);border-radius:10px;padding:9px 16px;transition:.15s}
.nav button:hover{border-color:var(--accent);background:#12233d}
.nav button:disabled{opacity:.4;cursor:default}
/* overlay (spis / szukaj) */
.overlay{position:fixed;inset:0;z-index:40;background:rgba(6,10,20,.86);backdrop-filter:blur(4px);
display:none;padding:40px 18px;overflow:auto}
.overlay.show{display:block}
.overlay .panel{max-width:900px;margin:0 auto;background:var(--bg2);border:1px solid var(--line-2);border-radius:16px;padding:22px}
.overlay h3{margin-bottom:4px}
.overlay .close{float:right;cursor:pointer;background:none;border:1px solid var(--line-2);color:var(--ink);border-radius:8px;padding:6px 10px;font:inherit}
.toc-sec{margin-top:16px}
.toc-sec .h{font-size:12px;text-transform:uppercase;letter-spacing:.6px;color:var(--accent-2);margin-bottom:8px}
.toc-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:8px}
.toc-item{text-align:left;cursor:pointer;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:10px 12px;color:var(--ink);font:inherit}
.toc-item:hover{border-color:var(--accent);background:#12233d}
.toc-item small{display:block;color:var(--dim)}
.res{display:flex;flex-direction:column;gap:8px;margin-top:14px}
.res button{text-align:left;cursor:pointer;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:11px 13px;color:var(--ink);font:inherit}
.res button:hover{border-color:var(--accent)}
.res .rt{font-weight:600}
.res .rs{font-size:13px;color:var(--muted);margin-top:3px}
.res .rk{font-size:11px;color:var(--accent-2);text-transform:uppercase;letter-spacing:.5px}
.empty{color:var(--muted);margin-top:14px}
/* ===== PRINT / PDF ===== */
@media print{
.bar,.nav,.prog,.overlay,.notes{display:none!important}
body{background:#fff;color:#111;display:block}
.stage{display:block;padding:0}
.slide{display:block!important;max-width:none;page-break-after:always;padding:24px 8px;border-bottom:2px solid #ddd}
.slide h2{color:#12324f} .kicker{color:#12324f;background:#eef}
.pts li,.box,details.dd,.formula,table.tbl th{background:#f6f8fb!important;color:#111!important}
.pts li b,.dd summary{color:#12324f!important}
details.dd .inner{display:block!important}
.lead,.pts li,.dd .inner p,.dd .inner ul,table.tbl td{color:#333!important}
}
</style>
</head>
<body>
<div class="bar">
<div class="logo">Akademia Projektów GF<small>Jak prowadzimy projekty · szkolenie</small></div>
<div class="search"><input id="q" type="text" placeholder="Szukaj w treści… (np. „próg 10h”, „Gemba”, „adoption”)" autocomplete="off"></div>
<div class="tools">
<button class="tool" id="btnToc">☰ Spis</button>
<button class="tool" id="btnPres" title="Notatki prelegenta">🎤 Prelegent</button>
<button class="tool" id="btnTest" title="Przejdź do testu końcowego">📝 Test</button>
<select class="tool" id="lay" title="Układ slajdu (przełącz na żywo)"></select>
<button class="tool" id="btnPrint">⬇ PDF</button>
<span class="count qscore" id="qscore" title="Quiz: poprawne / odpowiedziane">✓ <b id="qc">0</b>/<span id="qa">0</span></span>
<span class="count"><b id="cur">1</b>/<span id="tot">0</span></span>
</div>
</div>
<div class="prog"><i id="progfill"></i></div>
<div class="stage"><div id="deck"></div></div>
<div class="nav">
<button id="prev">← Poprzedni</button>
<button id="next">Następny →</button>
</div>
<div class="overlay" id="overlay"><div class="panel">
<button class="close" id="ovClose">✕ Zamknij</button>
<div id="ovBody"></div>
</div></div>
<script>
/* =====================================================================
Szkolenie „Jak prowadzimy projekty w Gourmet Foods”
Silnik: deck + drill-down (<details>) + wyszukiwarka. Offline, 1 plik.
Zgodny z kanonem WZORCE.md: tokeny :root, esc() anty-XSS, presenter-mode,
@media print (PDF), drill-down <details> dla hierarchii.
Treść w data-trap DECK (edytuj tu, UI się przerenderuje).
Źródła: Standard Ogólny Projektu, 4 Filary Analizy, Etap Adoption/CoE,
Zmiany ad-hoc i projekty strategiczne, Projekt_template.docx.
===================================================================== */
function esc(s){return String(s).replace(/[&<>"']/g,c=>({'&':'&','<':'<','>':'>','"':'"',"'":'''}[c]));}
const DECK = [
{ cover:true, sec:"Szkolenie wewnętrzne",
title:"Jak prowadzimy projekty w Gourmet Foods",
subtitle:"Firmowy standard — od uruchomienia do utrzymania i realnych korzyści",
notes:"Slajd startowy. Przywitaj uczestników, przedstaw prowadzącego i cel. Powiedz, że materiał ma wyszukiwarkę i szczegóły do samodzielnego zgłębienia po szkoleniu. Naciśnij → aby zacząć." },
{ sec:"Wprowadzenie", title:"Jak prowadzimy projekty w Gourmet Foods",
lead:"Jeden spójny standard: od pomysłu, przez realizację, po utrzymanie i realne korzyści biznesowe.",
points:[
"Cykl życia: <b>Fundation → Realizacja → Service Transition → Adoption → RUN</b>.",
"Dotyczy projektów IT i transformacji procesów (Odoo, Power BI, integracje Azure/M365, automatyzacje).",
"Ta prezentacja: przewiń strzałkami, rozwiń <b>„Szczegóły i przykłady”</b> albo <b>wyszukaj</b> temat u góry."],
example:"Przykładowa ścieżka: pomysł „nowy proces reklamacji” → Fundation (analiza i dane) → realizacja w Odoo → Service Transition → RUN → Adoption mierzona wskaźnikiem 1–5.",
practice:"Klikając „✓ Pytanie sprawdzające” na dole slajdu, zobaczysz, jak działa mechanika: treść się rozmywa, a Ty wybierasz odpowiedź samodzielnie.",
notes:"Powitanie. Cel szkolenia: każdy w firmie rozumie, jak uruchamiamy i prowadzimy projekty oraz jaka jest jego rola. Czas ~45–60 min + Q&A." },
{ sec:"Wprowadzenie", title:"Plan szkolenia",
lead:"Przejdziemy całą ścieżkę projektu — od „po co standard” do utrzymania i adopcji.",
points:[
"<b>Fundamenty:</b> po co standard, czym jest projekt, role.",
"<b>Cykl życia:</b> uruchomienie, tryby (ad-hoc / projekt / automatyzacja), Fundation i 4 filary analizy.",
"<b>Prowadzenie:</b> karta projektu, kamienie milowe, KPI, spotkania, rejestry.",
"<b>Domknięcie:</b> Service Transition, RUN, Adoption i Center of Excellence, zmiany ad-hoc vs strategiczne."],
example:"Na końcu czeka <b>test końcowy</b> (10 pytań, próg 70%) — sprawdzenie wiedzy z całości przed certyfikacją.",
practice:"Po szkoleniu wróć do dowolnego tematu przez wyszukiwarkę u góry — np. wpisz „próg 10h” albo „adoption”.",
notes:"Zapowiedz, że po każdym bloku jest miejsce na pytania. Wskaż wyszukiwarkę jako materiał referencyjny po szkoleniu." },
{ sec:"Fundamenty", title:"Po co nam standard prowadzenia projektów?",
lead:"Żeby zbierać, analizować i przekazywać wymagania w jeden sposób — mniej błędów, niższe koszty wdrożeń, większa wartość.",
points:[
"Spójny sposób <b>uruchamiania, prowadzenia, dokumentowania, przekazywania i domykania</b> projektów.",
"Eliminacja najczęstszych strat: praca bez analizy problemu, decyzje „z góry”, brak odniesienia do standardu."],
example:"Bez standardu: dwa działy zamawiają w IT „to samo” inaczej → podwójna praca, sprzeczne raporty. Ze standardem: jeden opis problemu, jedne User Stories, jedno wdrożenie.",
details:`<h4>Zakres standardu</h4><ul>
<li>projekty IT,</li><li>projekty transformacji procesów biznesowych,</li>
<li>projekty prowadzone w rytmie cyklicznych przeglądów i sprintów.</li></ul>
<h4>Czego standard NIE narzuca</h4><ul>
<li>pełnej metodyki (PMI, PRINCE2),</li>
<li>jednego narzędzia do zadań (Planner/Jira/Odoo),</li>
<li>małych automatyzacji — te mają odrębną procedurę.</li></ul>`,
notes:"Podkreśl korzyść: standard to nie biurokracja, tylko mniej marnotrawstwa i szybsze wdrożenia." },
{ sec:"Fundamenty", title:"Czym jest projekt — a co nim NIE jest",
lead:"Projekt to inicjatywa wymagająca planowania, koordynacji wielu osób i wdrożenia zmiany w procesie, systemie lub organizacji.",
points:[
"<b>Projekt:</b> szersza zmiana, wiele osób/działów, potrzebne kamienie milowe i etapy.",
"<b>Automatyzacja (nie-projekt):</b> wąski zakres, niskie ryzyko, jeden obszar — odrębna, szybka ścieżka."],
example:"„Nowy proces reklamacji w 4 działach” = projekt. „Dodaj filtr w jednym raporcie” = automatyzacja/zmiana ad-hoc.",
details:`<h4>Jako automatyzację traktujemy tematy</h4><ul>
<li>o ograniczonym zakresie i niskim ryzyku,</li>
<li>niewymagające szerokiej zmiany organizacyjnej,</li>
<li>realizowane w jednym obszarze biznesowym,</li>
<li>niewymagające pełnego Fundation, Service Transition i Adoption.</li></ul>
<p>Rozróżnienie robimy już na starcie (uruchomienie projektu) — decyduje o całej dalszej ścieżce.</p>`,
notes:"To rozróżnienie wraca w module o progu 10h. Zapowiedz je." },
{ sec:"Fundamenty", title:"Role w projekcie",
lead:"Cztery role decydują o projekcie; piąta (CoE) dba o standard i adopcję w całej firmie.",
points:[
"<b>Sponsor Projektu</b> — kluczowe decyzje biznesowe (start, priorytet, zamknięcie).",
"<b>Beneficjent / Process Owner</b> — potrzebuje efektu i odpowiada za cel biznesowy.",
"<b>Kierownik Projektu</b> — organizacja pracy, postęp, koordynacja, komunikacja.",
"<b>Zespół realizujący</b> + <b>Center of Excellence</b> — standardy, wsparcie, adopcja."],
details:`<table class="tbl"><tr><th>Rola</th><th>Odpowiada za</th><th>Przykład decyzji</th></tr>
<tr><td>Sponsor</td><td>decyzje biznesowe, zasoby</td><td>„Realizujemy / odkładamy / odrzucamy”</td></tr>
<tr><td>Beneficjent / Process Owner</td><td>cel biznesowy, odbiór</td><td>„Ten efekt rozwiązuje mój problem”</td></tr>
<tr><td>Kierownik Projektu</td><td>plan, kamienie, status</td><td>„Kolejny sprint: te 3 zadania”</td></tr>
<tr><td>Zespół / IT</td><td>realizacja uzgodnionego zakresu</td><td>„Wdrażamy wg User Stories”</td></tr>
<tr><td>CoE</td><td>standard, adopcja, ROI</td><td>„Poziom adopcji za niski — plan naprawczy”</td></tr></table>`,
notes:"Zapytaj uczestników, którą rolę pełnią najczęściej. Podkreśl: bez Sponsora projekt nie rusza." },
{ sec:"Cykl życia", title:"Cykl życia projektu — mapa",
lead:"Każdy projekt przechodzi te same etapy. Znać je = wiedzieć, gdzie właśnie jesteśmy i co jest następne.",
points:["Etap decyduje o tym, jakie pytania zadajemy i jakie decyzje podejmujemy."],
details:`<div class="flow">
<div class="st"><b>Fundation</b><span>analiza, dane, rekomendacja</span></div>
<div class="st"><b>Realizacja</b><span>zadania, kamienie, KPI</span></div>
<div class="st"><b>Service Transition</b><span>przekazanie do utrzymania</span></div>
<div class="st"><b>Adoption</b><span>realne użycie + korzyści</span></div>
<div class="st"><b>RUN</b><span>utrzymanie bieżące</span></div></div>
<h4>Zasada</h4><p>Projekt nie jest „zrobiony” po Go-Live — jest zrobiony, gdy użytkownicy korzystają, stare metody znikają, a korzyści są osiągnięte (etap Adoption).</p>`,
notes:"To slajd-kotwica. Wracaj do tej mapy przy każdym etapie — mów „jesteśmy TU”." },
{ sec:"Cykl życia", title:"Uruchomienie projektu",
lead:"Projekt zaczyna się od potrzeby biznesowej i wskazania, kto za co odpowiada.",
points:[
"Wskazujemy: <b>Sponsora, Beneficjenta/Process Ownera, Kierownika Projektu</b> i obszar zmiany.",
"Decydujemy o trybie: pełny projekt / przez Fundation / mała automatyzacja (odrębna procedura)."],
details:`<h4>Pytania na starcie</h4><ul>
<li>Jaki jest realny problem biznesowy (nie rozwiązanie)?</li>
<li>Wpływ na przychód lub koszty?</li>
<li>Czy temat wymaga analizy przedwdrożeniowej (Fundation)?</li></ul>`,
notes:"Najczęstszy błąd: start od rozwiązania, nie od problemu. Egzekwuj pytanie „jaki problem?”." },
{ sec:"Cykl życia", title:"Trzy tryby zgłoszenia — i próg 10h",
lead:"Nie każda zmiana to projekt. Tryb dobieramy do skali, a kluczowy próg to 10 godzin pracy.",
points:[
"<b>Zmiana ad-hoc</b> — wąski zakres, jeden obszar. <b>≤10h</b> → tygodniowy limit ad-hoc; <b>>10h</b> → zgoda zarządu.",
"<b>Projekt strategiczny</b> — cross-obszar, zmiana organizacyjna → Fundation, roadmapa, dedykowane zasoby.",
"<b>Automatyzacja</b> — odrębna, szybka procedura."],
example:"Zmiana ~12h w jednym module = ad-hoc, ale wymaga zgody zarządu (bo >10h). Nie każdy temat >10h to od razu projekt!",
details:`<h4>Trzy złote zasady</h4><ul>
<li><b>Zasada 1 — próg 10h:</b> zmiana >10h wymaga zgody zarządu.</li>
<li><b>Zasada 2 — priorytet strategii:</b> ad-hoc nie może blokować projektów strategicznych.</li>
<li><b>Zasada 3 — bez specyfikacji nie ruszamy:</b> niekompletne zgłoszenia są wstrzymywane.</li></ul>
<div class="box rule"><div class="t">▶ Trening praktyczny</div>
Ten temat masz jako <b>grę „Próg 10h”</b> (<code>05_Gra_Szkoleniowa\\Prog_10h.html</code>) — 4 zgłoszenia, decyzje i certyfikat.</div>`,
notes:"Odeślij do gry po tym slajdzie. To najczęściej mylona decyzja w firmie." },
{ sec:"Fundation + analiza", title:"Etap Fundation — analiza przedwdrożeniowa",
lead:"Zanim coś zbudujemy: rozumiemy proces, mierzymy go i rekomendujemy, co zrobić.",
points:[
"Cel: zrozumieć proces, zidentyfikować problem, zebrać dane ilościowe, ocenić potencjał usprawnienia.",
"Wyjście: <b>opis procesu, dane, rekomendacja</b> + decyzja Sponsora: <b>realizować / odłożyć / odrzucić</b>."],
details:`<h4>Po co osobny etap?</h4>
<p>Fundation chroni przed budowaniem rozwiązań do nieznanego problemu. Bez danych i rekomendacji Sponsor nie ma na czym oprzeć decyzji.</p>
<h4>Narzędzia analizy</h4><p>Na tym etapie pracujemy <b>4 filarami analizy</b> (kolejne slajdy) — dobieranymi do problemu, nie wszystkimi naraz.</p>`,
notes:"Fundation kończy się DECYZJĄ sponsora, nie dokumentem dla dokumentu." },
{ sec:"Fundation + analiza", title:"4 Filary Analizy — przegląd",
lead:"Cztery metody rozumienia procesu. Dobieramy je do problemu — można użyć jednej lub kilku.",
points:[
"<b>1. Modelowanie referencyjne</b> — startuj od standardu (best practice), nie od „jak robimy teraz”.",
"<b>2. Gemba Walk</b> — idź i zobacz, jak proces działa naprawdę.",
"<b>3. Event Storming</b> — zmapuj proces end-to-end jako ciąg zdarzeń.",
"<b>4. User Stories</b> — zamień analizę na jednoznaczne wymagania dla IT."],
example:"ZASADA KLUCZOWA: jedyną dopuszczalną formą przekazania wymagań do IT są User Stories + kryteria akceptacji. IT nie startuje bez nich.",
details:`<p>Metody służą wyłącznie do analizy i zrozumienia procesu. Nie ma obowiązku używać wszystkich — dobór zależy od problemu.</p>
<p>Wspólny mianownik: najpierw <b>problem i proces</b>, dopiero potem rozwiązanie i zakres dla IT.</p>`,
notes:"To rozdział o dyscyplinie analitycznej. Powtórz: bez User Stories IT nie zaczyna." },
{ sec:"Fundation + analiza", title:"Filar 1 — Modelowanie referencyjne",
lead:"Wykorzystaj sprawdzone rozwiązania rynkowe zamiast tworzyć proces od zera.",
points:[
"Punkt startu to <b>standard</b> (np. Odoo), a nie „jak robimy teraz”.",
"Biznes dopasowuje się do standardu; <b>customizacja musi być uzasadniona finansowo</b> (koszt vs wartość)."],
example:"Zamiast odwzorować papierowy obieg 1:1 w systemie — użyj standardowego workflowu Odoo; customizuj tylko tam, gdzie daje realną wartość.",
details:`<h4>Po co</h4><ul>
<li>unikasz długu technologicznego,</li>
<li>skracasz czas wdrożenia,</li>
<li>korzystasz z rozwiązań sprawdzonych przez inne firmy.</li></ul>`,
notes:"Najczęstszy opór: „u nas jest inaczej”. Odpowiedź: czy ta różnica jest warta swojej ceny?" },
{ sec:"Fundation + analiza", title:"Filar 2 — Gemba Walk",
lead:"Zobacz, jak proces działa naprawdę — a nie jak jest opisywany.",
points:[
"Analityk idzie „na dół” (magazyn, biuro) i <b>obserwuje</b> pracę krok po kroku.",
"Nie pyta „jak robicie?”, tylko patrzy, co faktycznie się dzieje.",
"<b>Oceniamy proces, nie pracownika.</b>"],
example:"Muda (marnotrawstwo) do wyłapania: zbędne kliknięcia, przepisywanie danych, chodzenie do drukarki, ręczne przenoszenie informacji między systemami.",
details:`<h4>Po co</h4><ul>
<li>identyfikacja realnych problemów,</li>
<li>eliminacja decyzji opartych wyłącznie na opiniach.</li></ul>
<p>Gemba ujawnia to, czego nie widać w opisach procesu i w spotkaniach przy stole.</p>`,
notes:"Podkreśl kulturę bez obwiniania — inaczej ludzie „grają” pod obserwatora." },
{ sec:"Fundation + analiza", title:"Filar 3 — Event Storming",
lead:"Zrozum proces end-to-end i zależności między działami oraz systemami.",
points:[
"Warsztat biznes + IT: budujemy proces jako <b>ciąg zdarzeń</b>.",
"Zdarzenia opisujemy w <b>czasie przeszłym</b> („Zamówienie opłacone”), bez języka technicznego."],
example:"Ciąg zdarzeń: „Zamówienie złożone” → „Zamówienie opłacone” → „Towar wydany” → „Faktura wystawiona”. Widać, gdzie proces się rwie.",
details:`<h4>Po co</h4><ul>
<li>ujawnienie braków w procesie,</li>
<li>zrozumienie integracji między systemami,</li>
<li>usunięcie „silosów wiedzy”.</li></ul>`,
notes:"Świetne, gdy nikt nie zna całego procesu end-to-end — a tak jest najczęściej." },
{ sec:"Fundation + analiza", title:"Filar 4 — User Stories + kryteria akceptacji",
lead:"Zamień analizę na jednoznaczne wymagania, których IT nie zinterpretuje po swojemu.",
points:[
"Format: <b>„Jako [kto], chcę [co], aby [wartość]”</b>.",
"Każda historyjka ma <b>kryteria akceptacji (Definition of Done)</b>."],
example:"„Jako księgowa chcę automatyczny e-mail do klienta, gdy faktura jest 14 dni po terminie, aby skrócić czas odzyskiwania należności.” Kryterium: e-mail wychodzi w dniu 14., z poprawną kwotą i numerem faktury.",
details:`<h4>Po co</h4><ul>
<li>brak nieporozumień z IT,</li>
<li>jasne kryterium odbioru pracy,</li>
<li>kontrola zakresu i kosztów.</li></ul>
<div class="box rule"><div class="t">▶ Zasada operacyjna</div>IT nie rozpoczyna prac bez zatwierdzonych User Stories i kryteriów akceptacji.</div>`,
notes:"To „umowa” z IT. Niejasna historyjka = pewny spór przy odbiorze." },
{ sec:"Prowadzenie", title:"Karta projektu (Projekt_template)",
lead:"Każdy projekt ma minimalny, firmowy opis — wg jednego wzoru.",
points:[
"Nagłówek: <b>Projekt · Właściciel/Sponsor · Project Manager · Zespół realizujący</b>.",
"Sekcje: <b>Kontekst → Problemy do rozwiązania → Cele i miary sukcesu → Stan docelowy (założenia)</b>.",
"Wzór: <code>Projekt_template.docx</code> — wklejany też do opisu projektu w Odoo."],
example:"Cel + miernik: „Skrócić czas obsługi reklamacji o 30% do końca Q3” · miernik: średni czas od zgłoszenia do zamknięcia.",
details:`<h4>Dlaczego „cel + miara”</h4>
<p>Cel bez miernika jest życzeniem. Każdy cel opisujemy: <b>co poprawiamy + ile + do kiedy</b> oraz <b>po czym poznamy sukces</b>.</p>
<h4>Obszary/wpływ</h4><p>Przy projektach cross-firmowych opisujemy, czego dotykają: systemy (Odoo, AD, Power BI), działy (sprzedaż, KIA, IT), dane (klientów, finansowe).</p>`,
notes:"Pokaż fizyczny szablon. Podkreśl: nowe karty mają wyglądać podobnie do wzoru." },
{ sec:"Prowadzenie", title:"Minimalny opis projektu",
lead:"Zanim projekt ruszy, musi mieć komplet minimalnych informacji.",
points:[
"cel projektu · zakres/opis problemu · beneficjent · uzasadnienie biznesowe · priorytety lub główne kamienie milowe."],
details:`<p>Beneficjent opisuje projekt od strony potrzeby: <b>kto</b> potrzebuje rozwiązania, <b>po co</b> jest realizowane, <b>jaki efekt</b> biznesowy ma dać.</p>
<p>Do projektu dołączamy formularz <code>Projekt_template.docx</code>.</p>`,
notes:"Jeśli brakuje uzasadnienia biznesowego — to sygnał, że projekt nie jest gotowy do startu." },
{ sec:"Prowadzenie", title:"Narzędzie — moduł Projekty w Odoo",
lead:"Projekt prowadzimy w uzgodnionym narzędziu; domyślnie w Odoo.",
points:[
"W narzędziu widoczne minimum: lista zadań, osoby odpowiedzialne, terminy, <b>kamienie milowe</b>, status, zgłoszone blokady."],
details:`<p>Jeżeli istnieje osobna instrukcja prowadzenia projektu w Odoo — stosujemy ją równolegle ze standardem. Jeśli jej nie ma, rekomendowane jest jej opracowanie jako osobnego standardu operacyjnego.</p>`,
notes:"Narzędzie to nie cel — celem jest widoczność postępu i blokad." },
{ sec:"Prowadzenie", title:"Kamienie milowe",
lead:"Kamień milowy to punkt kontrolny potwierdzający rezultat — nie zwykłe zadanie.",
points:[
"Opisuje <b>osiągnięty rezultat</b> i pozwala ocenić realny postęp.",
"Przykłady: zakończenie analizy, akceptacja zakresu, zakończenie testów, Go-Live, przekazanie do RUN, wymagany poziom adoption."],
details:`<p>Każdy projekt ma zdefiniowane kamienie milowe odpowiadające jego skali i celowi. To po nich, a nie po liczbie „zrobionych tasków”, oceniamy, czy projekt jest na dobrych torach.</p>`,
notes:"Rozróżnij zadanie od kamienia: kamień = rezultat/decyzja, nie czynność." },
{ sec:"Prowadzenie", title:"Ocena postępu — KPI i skala 1–5",
lead:"Postęp mierzymy realizacją kamieni milowych zgodnie z planem.",
points:[
"Podstawą oceny jest terminowa realizacja kamieni milowych, brak długotrwałych blokad krytycznych."],
details:`<h4>Wzór — stopień realizacji kamienia</h4>
<span class="formula">Stopień realizacji KM = zadania zakończone / zadania zaplanowane w KM × 100%</span>
<h4>Skala oceny postępu (1–5)</h4>
<table class="tbl"><tr><th>Ocena</th><th>Realizacja KM</th><th>Interpretacja</th></tr>
<tr><td>5</td><td>≥ 85%</td><td>Zgodnie z planem, brak istotnych blokad</td></tr>
<tr><td>4</td><td>70–84%</td><td>Niewielkie opóźnienia, bez istotnego wpływu</td></tr>
<tr><td>3</td><td>55–69%</td><td>Wymaga korekt planu / działań zarządczych</td></tr>
<tr><td>2</td><td>35–54%</td><td>Istotne opóźnienia lub blokady</td></tr>
<tr><td>1</td><td>< 35%</td><td>Realizacja zagrożona — brak postępu</td></tr></table>
<p>W projektach sprintowych pomocniczo można stosować <b>burn-down chart</b> (nieobowiązkowy).</p>`,
notes:"Skala 1–5 to wspólny język statusu na Project Review. Powtarzalna i obiektywna." },
{ sec:"Prowadzenie", title:"Spotkania projektowe",
lead:"Trzy typy spotkań — każde ma inny cel i inny czas trwania.",
points:[
"<b>Statusowe</b> (15–30 min) — synchronizacja: zrobione, w toku, blokady, następne kroki.",
"<b>Robocze / warsztat</b> (30–90 min) — analiza problemu, wypracowanie decyzji.",
"<b>Project Review</b> (30–60 min, co 6–8 tyg.) — postęp, ryzyka, decyzje Sponsora."],
example:"Nie mieszaj typów: statusowe NIE służy do warsztatu ani projektowania rozwiązania.",
details:`<table class="tbl"><tr><th>Spotkanie</th><th>Cel</th><th>Czas</th></tr>
<tr><td>Statusowe</td><td>krótka synchronizacja operacyjna</td><td>15–30 min</td></tr>
<tr><td>Robocze/warsztat</td><td>analiza, decyzje robocze</td><td>30–90 min</td></tr>
<tr><td>Project Review</td><td>ocena vs cel, ryzyka, decyzje sponsorskie</td><td>30–60 min</td></tr></table>`,
notes:"Częsty błąd: status trwa 90 min, bo wchodzi w warsztat. Pilnuj typu i czasu." },
{ sec:"Prowadzenie", title:"Planowanie kolejnego okresu",
lead:"Planujemy rytmicznie — domyślnie najbliższe 3 tygodnie.",
points:[
"Ustal priorytety, zaplanuj usunięcie blokad, wskaż kamienie do osiągnięcia.",
"Upewnij się, że planowane działania realnie prowadzą do celu projektu."],
details:`<p>Krótki horyzont (3 tygodnie) utrzymuje projekt w ruchu i szybko ujawnia odchylenia od planu kamieni milowych.</p>`,
notes:"3 tygodnie to domyślny rytm — dostosuj do skali projektu." },
{ sec:"Prowadzenie", title:"Rejestry i repozytorium",
lead:"Decyzje, zmiany systemowe i dokumenty mają swoje stałe miejsca.",
points:[
"<b>Rejestr decyzji</b> — wszystkie istotne decyzje biznesowe i projektowe (SharePoint INTRANET).",
"<b>Rejestr zmian systemowych</b> — każda zmiana wpływająca na system/proces/użytkowników.",
"<b>Repozytorium projektów</b> — SharePoint „PROJEKTY GF”; zakończone → folder OLD."],
details:`<h4>SharePoint „PROJEKTY GF”</h4>
<p>Adres: <code>gourmetfoods.sharepoint.com/sites/sfa_crm/</code>. Nowy folder = nazwa projektu + rok (np. „Projekt X 2025”). Domyślnie dostęp: Zespół Managerski i Zarząd; dostęp nadaje się przez „Zarządzaj dostępem”.</p>
<h4>Archiwizacja</h4><p>Po zakończeniu/porzuceniu projektu osoba nadzorująca przenosi folder do katalogu <b>OLD</b>.</p>`,
notes:"Rejestr decyzji ratuje projekt, gdy ktoś pyta „kto i kiedy to ustalił”." },
{ sec:"Domknięcie i utrzymanie", title:"Service Transition — przekazanie do RUN",
lead:"Uporządkowane przekazanie rozwiązania z projektu do bieżącego utrzymania.",
points:[
"Przekazujemy: odpowiedzialność, dokumentację, wiedzę, zasady obsługi zgłoszeń i dostępów.",
"Decyzję o zakończeniu podejmuje <b>Sponsor / Process Owner</b>."],
details:`<h4>Etap można zamknąć, gdy</h4><ul>
<li>dokumentacja przekazana,</li>
<li>zespół RUN potwierdził gotowość,</li>
<li>ustalono obsługę zgłoszeń, dostępy i odpowiedzialności,</li>
<li>określono, czy potrzebny monitoring/SLA,</li>
<li>właściciel biznesowy akceptuje przejście do RUN.</li></ul>
<p>Jeśli rozwiązanie dotyczy danych/raportów/integracji — sposób opisu konsultujemy z Data Governance.</p>`,
notes:"Bez Service Transition wiedza zostaje „w głowie” projektu — i znika po jego zakończeniu." },
{ sec:"Domknięcie i utrzymanie", title:"RUN — utrzymanie bieżące",
lead:"Po przekazaniu rozwiązanie żyje w trybie RUN.",
points:[
"RUN to: obsługa zgłoszeń, usuwanie błędów, monitoring, drobne usprawnienia, utrzymanie integracji, zarządzanie dostępami."],
details:`<p>RUN zapewnia ciągłość działania rozwiązania po zakończeniu wdrożenia projektowego. Duże nowe potrzeby wracają jako zmiany ad-hoc lub nowe projekty — nie „doklejamy” ich do RUN bez trybu.</p>`,
notes:"Granica RUN vs nowy projekt bywa płynna — pilnuj progu 10h i skali zmiany." },
{ sec:"Adoption", title:"Adoption — po co i kto (Center of Excellence)",
lead:"Wdrożenie liczy się dopiero, gdy ludzie realnie korzystają i pojawiają się korzyści.",
points:[
"Cel: potwierdzić realne użycie, wyeliminować stare metody, ocenić korzyści biznesowe.",
"Za adopcję przy podejściu scentralizowanym odpowiada <b>Center of Excellence (CoE)</b>."],
example:"Oczekiwania definiujemy konkretnie: „100% faktur w EOD”, „wszystkie zgłoszenia IT w Helpdesku”, „brak raportów w Excelu poza systemem”, „wszystkie działania sprzedażowe w CRM”.",
details:`<div class="box rule"><div class="t">▶ Zasada kluczowa</div>
Wdrożenie nie jest zakończone, dopóki: użytkownicy nie korzystają z systemu w codziennej pracy, stare metody nie zostały wyeliminowane, a korzyści nie zostały osiągnięte. Dlatego członek CoE w etapie transition nie jest angażowany w kolejne projekty.</div>`,
notes:"To zmienia myślenie: Go-Live to nie koniec, to początek adopcji." },
{ sec:"Adoption", title:"Adoption — mierniki i wskaźnik (1–5)",
lead:"Adopcję mierzymy liczbami; wskaźnik to średnia z trzech miar.",
points:[
"<b>% wykorzystania systemu</b> · <b>% eliminacji starych narzędzi</b> · <b>% realizacji ROI</b> → średnia = wskaźnik adopcji."],
details:`<h4>Wzory</h4>
<span class="formula">% Wykorzystania = użytkownicy aktywni / objęci transformacją × 100%</span>
<span class="formula">% Realizacji ROI = rzeczywiste oszczędności czasu / planowane × 100%</span>
<h4>Przykład</h4>
<p>Wykorzystanie 80% · eliminacja starych narzędzi 70% · ROI 65% → (80+70+65)/3 = <b>71,7% → ocena 4</b>.</p>
<h4>Skala 1–5</h4>
<table class="tbl"><tr><th>Ocena</th><th>Poziom adopcji</th></tr>
<tr><td>5</td><td>≥ 75%</td></tr><tr><td>4</td><td>60–74%</td></tr><tr><td>3</td><td>45–59%</td></tr>
<tr><td>2</td><td>30–44%</td></tr><tr><td>1</td><td>< 30%</td></tr></table>
<div class="box warn"><div class="t">▶ Warunek minimalny dla oceny 5</div>
wykorzystanie ≥ 70% · stare narzędzia ≤ 25% · ROI ≥ 60% — żeby wysoka średnia nie maskowała problemów.</div>`,
notes:"Pokaż przykład obliczenia na tablicy. Podkreśl warunek minimalny dla „5”." },
{ sec:"Adoption", title:"Adoption — szkolenia i certyfikacja",
lead:"Adopcję wspierają szkolenia z pełną rejestracją wyników (traceability).",
points:[
"Materiały i wyniki w e-learningu; zdana certyfikacja trafia na kartę pracownika w Odoo.",
"Test certyfikacyjny: do <b>5 dni roboczych</b> po szkoleniu."],
details:`<h4>Ścieżka certyfikacji</h4><ul>
<li>brak wykonania testu → manager zapewnia wykonanie w ciągu 2 dni roboczych,</li>
<li>niezdany test → ponowne zapoznanie z instrukcją i podejście w ciągu 4 dni roboczych,</li>
<li>jeśli <b>≥ 55% uczestników nie zda</b> → szkolenie uznaje się za nieskuteczne i powtarza.</li></ul>
<div class="box rule"><div class="t">▶ Nasze narzędzie</div>Grywalizacja (np. gra „Próg 10h”) jest częścią tej warstwy — z natychmiastowym feedbackiem i certyfikatem modułu.</div>`,
notes:"Połącz z grą i przyszłą Akademią Projektów. Traceability = dowód kompetencji." },
{ sec:"Adoption", title:"Center of Excellence — skład i zadania",
lead:"CoE to zespół kompetencyjny: standardy, wsparcie transformacji, adopcja, weryfikacja ROI.",
points:[
"Skład: liderzy transformacji, analitycy biznesowi, Data Governance, jakość danych, HR (zmiana), specjaliści kluczowych działów.",
"Zadania: standardy wdrożeń, projektowanie procesów, wsparcie managerów, monitoring adopcji, eskalacja barier."],
details:`<table class="tbl"><tr><th>Rola</th><th>Odpowiedzialność</th></tr>
<tr><td>Manager</td><td>operacyjna adopcja w zespole, egzekwowanie użycia i certyfikacji</td></tr>
<tr><td>CoE</td><td>model docelowy, plan adoption, analiza poziomu, działania naprawcze</td></tr></table>
<p>Właściciel treści etapu: Dyrektor IT + Dyrektor HR.</p>`,
notes:"CoE to „katalizator” zmiany — nie policja. Wspiera managerów, nie zastępuje ich." },
{ sec:"Zmiany i decyzje", title:"Zmiany ad-hoc vs projekty strategiczne",
lead:"Chronimy zasoby na inicjatywy kluczowe — bez blokowania drobnych, sensownych zmian.",
points:[
"Zmiany <b>>10h</b> wymagają zgody zarządu; <b>≤10h</b> w tygodniowym limicie ad-hoc.",
"Ad-hoc <b>nie może blokować</b> projektów strategicznych; wszystko na wspólnej roadmapie.",
"Tematy bez pełnej specyfikacji — wstrzymane do uzupełnienia."],
details:`<h4>RACI (skrót)</h4>
<table class="tbl"><tr><th>Kto</th><th>Rola</th></tr>
<tr><td>Właściciel biznesowy</td><td>inicjuje zgłoszenie, dostarcza dane, weryfikuje i zamyka</td></tr>
<tr><td>Zespół IT</td><td>ocena, estymacja, realizacja, dokumentacja i szkolenie</td></tr>
<tr><td>Dyrektor IT</td><td>nadzór nad procesem i tryb procedowania</td></tr>
<tr><td>Zarząd</td><td>zatwierdza tematy >10h i projekty strategiczne</td></tr></table>
<p>Zgłoszenia wpływają przez Help Desk; do specyfikacji można użyć agenta Copilot z pytaniami kontrolnymi.</p>`,
notes:"To ten sam temat, co gra „Próg 10h”. Możesz tu zrobić szybki quiz na sali." },
{ sec:"Podsumowanie", title:"Najczęstsze błędy — czego unikamy",
lead:"Kilka pułapek powtarza się w większości projektów.",
points:[
"Zbieranie „wymagań” bez analizy problemu.",
"Decydowanie „z góry”, z pominięciem Gemba.",
"Brak odniesienia do standardu (wszystko od zera).",
"Nieprecyzyjne User Stories → spór przy odbiorze.",
"Traktowanie Go-Live jako końca projektu (pominięta Adoption)."],
details:`<p>Antidotum jest w standardzie: problem przed rozwiązaniem, dane przed opinią, standard przed customizacją, User Stories przed startem IT, adopcja przed uznaniem projektu za zamknięty.</p>`,
notes:"Zapytaj uczestników, który błąd widzą u siebie najczęściej." },
{ sec:"Podsumowanie", title:"Złote zasady i gdzie szukać",
lead:"Pięć zasad do zapamiętania — i mapa materiałów po szkoleniu.",
cta:'<button class="cta-exam" data-goto-test>→ Przejdź do testu końcowego</button>',
points:[
"1. Najpierw <b>problem</b>, nie rozwiązanie. 2. <b>User Stories</b> to jedyna forma przekazania do IT.",
"3. <b>Próg 10h</b> i priorytet strategii. 4. Postęp mierzymy <b>kamieniami milowymi</b> (1–5).",
"5. Projekt kończy się <b>adopcją i korzyściami</b>, nie Go-Live."],
details:`<h4>Materiały</h4><ul>
<li>Kompendium: folder <code>Prowadzenie projektów\\</code> (Metodyka, Karta, KPI, Szkolenia).</li>
<li>Wzór karty: <code>01_Karta_Projektu\\Projekt_template.docx</code>.</li>
<li>Gra „Próg 10h”: <code>05_Gra_Szkoleniowa\\Prog_10h.html</code>.</li>
<li>Repozytorium projektów: SharePoint „PROJEKTY GF”.</li></ul>
<div class="box ex"><div class="t">▶ Wskazówka</div>Ta prezentacja jest też materiałem referencyjnym — użyj <b>wyszukiwarki</b> u góry, żeby szybko znaleźć temat (np. „adoption”, „Event Storming”, „Service Transition”).</div>`,
notes:"Zamknięcie + Q&A. Odeślij do gry i kompendium. Podziękuj." },
{ finalTest:true, sec:"Test końcowy", title:"Test końcowy — sprawdź wiedzę",
lead:"10 pytań z całego szkolenia. Odpowiedz na wszystkie, a potem kliknij „Pokaż wynik”. Próg zaliczenia: 70%.",
notes:"Test podsumowujący. Możesz zrobić go na sali (głosowanie) lub zadać jako samodzielny. Wynik przygotowuje do certyfikacji.",
test:[
{ q:"Zmiana ~12h w jednym module. Poprawny tryb?",
opts:[{t:">10h → zgoda zarządu (nadal ad-hoc)",ok:true},{t:"Ad-hoc w limicie, bez zarządu"},{t:"Projekt strategiczny (Fundation)"}],
why:"12h > 10h → zarząd; wąski zakres → wciąż ad-hoc. Nie każdy temat >10h to projekt." },
{ q:"Jedyna dopuszczalna forma przekazania wymagań do IT?",
opts:[{t:"User Stories + kryteria akceptacji",ok:true},{t:"E-mail z opisem"},{t:"Ustalenia na korytarzu"}],
why:"IT nie startuje bez User Stories i kryteriów akceptacji (Definition of Done)." },
{ q:"Zrealizowano 6 z 8 kamieni zgodnie z planem (75%). Ocena postępu?",
opts:[{t:"4 (70–84%)",ok:true},{t:"5 (≥85%)"},{t:"3 (55–69%)"}],
why:"Skala: 5=≥85%, 4=70–84%, 3=55–69%, 2=35–54%, 1=<35%." },
{ q:"Wykorzystanie 80%, eliminacja starych narzędzi 70%, ROI 65%. Wskaźnik adopcji?",
opts:[{t:"≈71,7% → ocena 4",ok:true},{t:"80% → ocena 5"},{t:"65% → ocena 3"}],
why:"(80+70+65)/3 = 71,7% → ocena 4. Wskaźnik to średnia z trzech miar." },
{ q:"Gemba Walk to:",
opts:[{t:"Obserwacja realnej pracy w miejscu jej wykonywania",ok:true},{t:"Ankieta wśród pracowników"},{t:"Analiza dokumentacji procesu"}],
why:"Patrzymy, co ludzie faktycznie robią (Muda) — oceniamy proces, nie pracownika." },
{ q:"Kiedy projekt jest naprawdę zakończony?",
opts:[{t:"Gdy jest realna adopcja i osiągnięte korzyści",ok:true},{t:"W momencie Go-Live"},{t:"Po przekazaniu do RUN"}],
why:"Go-Live i RUN to etapy — projekt kończy adopcja i korzyści biznesowe." },
{ q:"Kto decyduje o zakończeniu etapu Service Transition?",
opts:[{t:"Sponsor / Process Owner",ok:true},{t:"Zespół RUN"},{t:"Data Governance"}],
why:"Zespół RUN potwierdza gotowość, ale formalną decyzję podejmuje właściciel biznesowy." },
{ q:"Test certyfikacyjny po szkoleniu należy wykonać w ciągu:",
opts:[{t:"5 dni roboczych",ok:true},{t:"14 dni"},{t:"tego samego dnia"}],
why:"Do 5 dni roboczych; brak testu → manager zapewnia wykonanie w 2 dni." },
{ q:"Pilna zmiana ad-hoc koliduje z projektem strategicznym. Priorytet?",
opts:[{t:"Projekt strategiczny — ad-hoc go nie blokuje",ok:true},{t:"Ad-hoc, bo pilne i <10h"},{t:"To, co zgłoszono wcześniej"}],
why:"Zasada 2: ad-hoc nie może blokować strategii; wszystko na wspólnej roadmapie." },
{ q:"W Event Stormingu zdarzenia opisujemy:",
opts:[{t:"W czasie przeszłym, bez języka technicznego",ok:true},{t:"Jako listę zadań do zrobienia"},{t:"Nazwami tabel w bazie"}],
why:"Np. „Zamówienie opłacone”. Ciąg zdarzeń ujawnia braki i integracje między systemami." }
] }
];
/* ===== PYTANIA SPRAWDZAJĄCE (mini-quiz) — klucz = dokładny tytuł slajdu.
Dodanie pytania: dopisz wpis { "Tytuł slajdu": {q, opts:[{t,ok?}], why} }. ===== */
const QUIZ = {
"Czym jest projekt — a co nim NIE jest":{
q:"Zmiana filtra w jednym raporcie, jeden obszar, niskie ryzyko — to:",
opts:[{t:"Automatyzacja / zmiana ad-hoc",ok:true},{t:"Projekt strategiczny z Fundation"},{t:"Zawsze wymaga zarządu"}],
why:"<b>Automatyzacja.</b> Wąski zakres i jeden obszar = odrębna, szybka ścieżka — bez pełnego trybu projektowego."},
"Role w projekcie":{
q:"Kto podejmuje kluczowe decyzje biznesowe i decyduje o starcie/zamknięciu projektu?",
opts:[{t:"Sponsor Projektu",ok:true},{t:"Kierownik Projektu"},{t:"Zespół IT"}],
why:"<b>Sponsor.</b> Kierownik organizuje pracę i postęp, ale decyzje biznesowe (start, priorytet, zamknięcie) należą do Sponsora."},
"Trzy tryby zgłoszenia — i próg 10h":{
q:"Zgłoszenie ~12h pracy, wąski zakres, jeden moduł. Co robisz?",
opts:[{t:"Zmiana ad-hoc, ale >10h → zgoda zarządu",ok:true},{t:"Realizuję w limicie ad-hoc bez zarządu"},{t:"Zakładam projekt strategiczny (Fundation)"}],
why:"<b>>10h → zgoda zarządu.</b> Zakres wąski, więc to nadal ad-hoc — ale próg 10h wymaga akceptacji zarządu. Nie każdy temat >10h to projekt."},
"Filar 2 — Gemba Walk":{
q:"Na czym polega Gemba Walk?",
opts:[{t:"Idę i obserwuję, jak proces działa naprawdę",ok:true},{t:"Pytam zespół „jak to robicie?”"},{t:"Analizuję dokumentację procesu"}],
why:"<b>Obserwacja w miejscu pracy.</b> Patrzymy, co ludzie faktycznie robią (marnotrawstwo/Muda) — oceniamy proces, nie pracownika."},
"Filar 3 — Event Storming":{
q:"Jak opisujemy zdarzenia w Event Stormingu?",
opts:[{t:"W czasie przeszłym, np. „Zamówienie opłacone”",ok:true},{t:"Językiem technicznym (nazwy tabel)"},{t:"Jako lista zadań do zrobienia"}],
why:"<b>Czas przeszły, bez języka technicznego.</b> Proces to ciąg zdarzeń — ujawnia braki i integracje między systemami."},
"Filar 4 — User Stories + kryteria akceptacji":{
q:"Kiedy IT może rozpocząć prace?",
opts:[{t:"Po zatwierdzonych User Stories + kryteriach akceptacji",ok:true},{t:"Gdy biznes ustnie opisze potrzebę"},{t:"Po decyzji Kierownika Projektu"}],
why:"<b>Dopiero po User Stories + kryteriach akceptacji.</b> To jedyna dopuszczalna forma przekazania wymagań do IT."},
"Karta projektu (Projekt_template)":{
q:"Który cel jest poprawnie zapisany?",
opts:[{t:"„Skrócić czas obsługi reklamacji o 30% do końca Q3”",ok:true},{t:"„Poprawić obsługę reklamacji”"},{t:"„Zrobić coś z reklamacjami”"}],
why:"<b>Cel = co poprawiamy + ile + do kiedy + miernik.</b> Cel bez miary jest życzeniem, nie celem."},
"Ocena postępu — KPI i skala 1–5":{
q:"Realizacja kamieni milowych = 80% planu. Jaka ocena postępu?",
opts:[{t:"4 (70–84%)",ok:true},{t:"5 (≥85%)"},{t:"3 (55–69%)"}],
why:"<b>Ocena 4.</b> Skala: 5 = ≥85%, 4 = 70–84%, 3 = 55–69%, 2 = 35–54%, 1 = <35%."},
"Spotkania projektowe":{
q:"Ile powinno trwać spotkanie statusowe?",
opts:[{t:"15–30 minut",ok:true},{t:"30–90 minut"},{t:"do 60 minut co 6–8 tygodni"}],
why:"<b>15–30 min.</b> To krótka synchronizacja — nie warsztat (30–90 min) ani Project Review (30–60 min, co 6–8 tyg.)."},
"Service Transition — przekazanie do RUN":{
q:"Kto podejmuje decyzję o zakończeniu etapu Service Transition?",
opts:[{t:"Sponsor / Process Owner",ok:true},{t:"Zespół RUN"},{t:"Data Governance"}],
why:"<b>Sponsor / Process Owner.</b> Zespół RUN potwierdza gotowość, ale formalną decyzję o przejściu do RUN podejmuje właściciel biznesowy."},
"Adoption — mierniki i wskaźnik (1–5)":{
q:"Wykorzystanie 80%, eliminacja starych narzędzi 70%, ROI 65%. Wskaźnik adopcji?",
opts:[{t:"≈71,7% → ocena 4",ok:true},{t:"80% → ocena 5"},{t:"65% → ocena 3"}],
why:"<b>(80+70+65)/3 = 71,7% → ocena 4.</b> Wskaźnik adopcji to średnia z trzech miar."},
"Adoption — szkolenia i certyfikacja":{
q:"W jakim czasie należy wykonać test certyfikacyjny po szkoleniu?",
opts:[{t:"Do 5 dni roboczych",ok:true},{t:"Do 14 dni"},{t:"Tego samego dnia"}],
why:"<b>Do 5 dni roboczych.</b> Brak testu → manager zapewnia wykonanie w 2 dni; niezdany → ponowne podejście w 4 dni."},
"Zmiany ad-hoc vs projekty strategiczne":{
q:"Pilna zmiana ad-hoc ~8h koliduje z trwającym projektem strategicznym. Co ma priorytet?",
opts:[{t:"Projekt strategiczny — ad-hoc nie może go blokować",ok:true},{t:"Ad-hoc, bo pilne i <10h"},{t:"Zawsze to, co zgłoszone wcześniej"}],
why:"<b>Projekt strategiczny.</b> Zasada 2: ad-hoc nie może blokować strategii; ad-hoc planujemy w limicie bez kolizji."},
"Najczęstsze błędy — czego unikamy":{
q:"Który z poniższych to typowy błąd wg standardu?",
opts:[{t:"Traktowanie Go-Live jako końca projektu",ok:true},{t:"Mierzenie postępu kamieniami milowymi"},{t:"Przekazanie wymagań przez User Stories"}],
why:"<b>Go-Live to nie koniec.</b> Projekt kończy się adopcją i korzyściami — pominięcie etapu Adoption to częsty błąd."},
"Po co nam standard prowadzenia projektów?":{
q:"Główny cel firmowego standardu projektów to:",
opts:[{t:"Jednolite zbieranie, analiza i przekazywanie wymagań (mniej błędów, niższe koszty)",ok:true},{t:"Zastąpienie PMI/PRINCE2 pełną metodyką"},{t:"Narzucenie jednego narzędzia do zadań"}],
why:"<b>Spójny sposób pracy.</b> Standard nie narzuca pełnej metodyki ani konkretnego narzędzia — porządkuje uruchamianie, prowadzenie i domykanie."},
"Cykl życia projektu — mapa":{
q:"Kiedy projekt jest naprawdę „zrobiony”?",
opts:[{t:"Gdy użytkownicy korzystają, stare metody zniknęły, a korzyści są osiągnięte",ok:true},{t:"W momencie Go-Live"},{t:"Po przekazaniu do RUN"}],
why:"<b>Po adopcji.</b> Go-Live i RUN to etapy — projekt kończy realna adopcja i korzyści biznesowe."},
"Uruchomienie projektu":{
q:"Od czego zaczynamy projekt?",
opts:[{t:"Od problemu biznesowego i wskazania ról (Sponsor, Process Owner, KP)",ok:true},{t:"Od wyboru rozwiązania technicznego"},{t:"Od zakupu licencji"}],
why:"<b>Od problemu, nie rozwiązania.</b> Start od rozwiązania to najczęstszy błąd. Wskazujemy też Sponsora, Beneficjenta i Kierownika."},
"Etap Fundation — analiza przedwdrożeniowa":{
q:"Co jest wyjściem z etapu Fundation?",
opts:[{t:"Opis procesu, dane, rekomendacja + decyzja Sponsora: realizować/odłożyć/odrzucić",ok:true},{t:"Gotowy system produkcyjny"},{t:"Podpisana umowa z dostawcą"}],
why:"<b>Rekomendacja + decyzja Sponsora.</b> Fundation kończy się decyzją, nie wdrożeniem."},
"4 Filary Analizy — przegląd":{
q:"Czy w każdym projekcie trzeba użyć wszystkich 4 filarów?",
opts:[{t:"Nie — dobieramy metody do problemu (jedną lub kilka)",ok:true},{t:"Tak, zawsze wszystkie cztery"},{t:"Filary są opcjonalne i rzadko używane"}],
why:"<b>Dobór do problemu.</b> Ale niezależnie od metod wymagania do IT przekazujemy wyłącznie przez User Stories + kryteria akceptacji."},
"Filar 1 — Modelowanie referencyjne":{
q:"Od czego zaczynamy modelowanie referencyjne?",
opts:[{t:"Od standardu (np. Odoo), a nie od „jak robimy teraz”",ok:true},{t:"Od pełnego odwzorowania obecnego procesu"},{t:"Od customizacji pod każdy dział"}],
why:"<b>Start od standardu.</b> Customizacja musi być uzasadniona finansowo (koszt vs wartość) — inaczej rośnie dług technologiczny."},
"Minimalny opis projektu":{
q:"Bez którego elementu projekt nie jest gotowy do startu?",
opts:[{t:"Uzasadnienia biznesowego / celu",ok:true},{t:"Loga na prezentacji"},{t:"Wyboru koloru w systemie"}],
why:"<b>Uzasadnienie biznesowe.</b> Minimalny opis: cel, zakres/problem, beneficjent, uzasadnienie, priorytety/kamienie."},
"Narzędzie — moduł Projekty w Odoo":{
q:"Co MINIMUM musi być widoczne w narzędziu projektowym?",
opts:[{t:"Zadania, osoby, terminy, kamienie milowe, status, blokady",ok:true},{t:"Tylko lista zadań"},{t:"Wyłącznie budżet"}],
why:"<b>Pełna widoczność postępu i blokad.</b> Domyślne narzędzie to Odoo (moduł Projekty)."},
"Kamienie milowe":{
q:"Czym różni się kamień milowy od zwykłego zadania?",
opts:[{t:"Kamień opisuje osiągnięty rezultat, nie czynność",ok:true},{t:"Niczym — to synonimy"},{t:"Kamień to po prostu najdłuższe zadanie"}],
why:"<b>Rezultat, nie czynność.</b> Przykłady: akceptacja zakresu, zakończenie testów, Go-Live, przekazanie do RUN."},
"Planowanie kolejnego okresu":{
q:"Jaki jest domyślny horyzont planowania kolejnego okresu?",
opts:[{t:"Najbliższe 3 tygodnie",ok:true},{t:"Najbliższy tydzień"},{t:"Najbliższy kwartał"}],
why:"<b>3 tygodnie.</b> Krótki horyzont utrzymuje projekt w ruchu i szybko ujawnia odchylenia od planu kamieni."},
"Rejestry i repozytorium":{
q:"Gdzie trafiają zakończone lub porzucone projekty w SharePoint „PROJEKTY GF”?",
opts:[{t:"Do folderu OLD",ok:true},{t:"Do kosza"},{t:"Zostają w głównym katalogu"}],
why:"<b>Folder OLD.</b> Osoba nadzorująca archiwizuje projekt, przenosząc folder do OLD. Istotne decyzje idą do rejestru decyzji."},
"RUN — utrzymanie bieżące":{
q:"Duża nowa potrzeba pojawia się w trybie RUN. Co robimy?",
opts:[{t:"Wraca jako zmiana ad-hoc lub nowy projekt (wg trybu)",ok:true},{t:"„Doklejamy” ją do RUN bez trybu"},{t:"Ignorujemy — RUN tego nie obejmuje"}],
why:"<b>Wraca jako ad-hoc/projekt.</b> RUN to utrzymanie bieżące; większych zmian nie doklejamy bez właściwego trybu (i progu 10h)."},
"Adoption — po co i kto (Center of Excellence)":{
q:"Dlaczego członek CoE w etapie transition nie wchodzi w kolejne projekty?",
opts:[{t:"Bo wdrożenie nie jest zakończone, dopóki nie ma realnej adopcji i korzyści",ok:true},{t:"Bo brakuje mu kompetencji"},{t:"Bo tak jest taniej"}],
why:"<b>Adopcja to część projektu.</b> Wdrożenie kończy realne użycie, eliminacja starych metod i korzyści — nie Go-Live."},
"Center of Excellence — skład i zadania":{
q:"Kto odpowiada za operacyjną adopcję w swoim zespole?",
opts:[{t:"Manager zespołu",ok:true},{t:"Wyłącznie CoE"},{t:"Dział IT"}],
why:"<b>Manager.</b> Egzekwuje użycie systemu i certyfikacje; CoE projektuje model docelowy, plan adoption i działania naprawcze."},
"Złote zasady i gdzie szukać":{
q:"Jedyna dopuszczalna forma przekazania wymagań do IT to:",
opts:[{t:"User Stories + kryteria akceptacji",ok:true},{t:"E-mail z opisem potrzeby"},{t:"Ustalenia na korytarzu"}],
why:"<b>User Stories + kryteria akceptacji.</b> Jedna z pięciu złotych zasad — IT nie startuje bez nich."},
"Jak prowadzimy projekty w Gourmet Foods":{
q:"Co obejmuje cykl życia projektu w Gourmet Foods?",
opts:[{t:"Fundation → Realizacja → Service Transition → Adoption → RUN",ok:true},{t:"Tylko analiza i wdrożenie"},{t:"Zakup systemu i Go-Live"}],
why:"<b>Pięć etapów.</b> Od analizy (Fundation) po utrzymanie (RUN), z adopcją jako warunkiem uznania projektu za zakończony."},
"Plan szkolenia":{
q:"Który obszar świadomie NIE jest częścią tego standardu?",
opts:[{t:"Szczegółowa metodyka PMI/PRINCE2",ok:true},{t:"Cykl życia projektu"},{t:"Role i 4 filary analizy"}],
why:"<b>PMI/PRINCE2.</b> Standard nie narzuca pełnej metodyki — uczymy firmowego, uproszczonego podejścia."}
};
DECK.forEach(s=>{ if(QUIZ[s.title]) s.quiz = QUIZ[s.title]; });
/* ===== KAFELKI „W PRAKTYCE” (mikro-case) — klucz = dokładny tytuł slajdu ===== */
const PRACTICE = {
"Czym jest projekt — a co nim NIE jest":
"„Dodanie pola w formularzu” zgłoszono jako projekt. Po ocenie: 1 obszar, ~3h, niskie ryzyko → to <b>automatyzacja</b>, zrobiona w tygodniowym limicie ad-hoc.",
"Etap Fundation — analiza przedwdrożeniowa":
"Fundation pokazał, że „problem z fakturami” to w 80% braki w danych klienta, nie w systemie → zamiast kosztownej zmiany IT wystarczyła akcja porządkowania danych.",
"Filar 2 — Gemba Walk":
"Podczas Gemba w magazynie okazało się, że pracownik 3× dziennie przepisuje dane z WMS do Excela — czego nie było w żadnym opisie procesu.",
"Filar 4 — User Stories + kryteria akceptacji":
"Historyjka „chcę raport sprzedaży” bez kryteriów skończyła się 3 rundami poprawek. Dodanie DoD (kolumny, filtry, format) skróciło odbiór do jednego podejścia.",
"Karta projektu (Projekt_template)":
"Kartę „usprawnić reklamacje” odesłano do autora — brakowało miernika. Po zmianie na „−30% czasu obsługi do końca Q3” Sponsor mógł podjąć decyzję.",
"Trzy tryby zgłoszenia — i próg 10h":
"Handlowiec prosi o „szybką zmianę” w CRM, IT szacuje 14h. Mimo słowa „szybka” — <b>>10h → wniosek do zarządu</b>, nie piątkowy limit ad-hoc.",
"Ocena postępu — KPI i skala 1–5":
"Projekt z 8 kamieni zrealizował 6 zgodnie z planem → 75% → <b>ocena 4</b>. Status na Project Review: „na dobrych torach, drobne opóźnienia”.",
"Spotkania projektowe":
"Status trwał 75 min, bo wchodził w projektowanie rozwiązania. Rozdzielenie na 20-min status + osobny warsztat odblokowało zespół.",
"Service Transition — przekazanie do RUN":
"Zespół RUN nie przyjął rozwiązania — brakowało opisu obsługi zgłoszeń. Uzupełnienie dokumentacji przed zamknięciem etapu zapobiegło „sierocie” w utrzymaniu.",
"Adoption — mierniki i wskaźnik (1–5)":
"Zespół chwalił się „80% logowań”, ale 40% userów wciąż trzymało dane w Excelu → wskaźnik adopcji spadł, bo liczy też eliminację starych narzędzi i ROI.",
"Adoption — szkolenia i certyfikacja":
"Na szkoleniu 60% nie zdało testu (>55%) → uznano je za nieskuteczne i powtórzono z lepszymi przykładami. Wyniki trafiły na karty pracowników.",
"Zmiany ad-hoc vs projekty strategiczne":
"Dwie „pilne” zmiany ad-hoc w tygodniu wstrzymały konektor Odoo⇄ASB. Po wpisaniu obu na wspólną roadmapę priorytet wrócił do projektu strategicznego."
};
DECK.forEach(s=>{ if(PRACTICE[s.title]) s.practice = PRACTICE[s.title]; });
/* ----------------------------- SILNIK ----------------------------- */
const deck = document.getElementById('deck');
let idx = 0;
function slideHTML(s, i){
if(s.cover){
const notes = s.notes ? `<aside class="notes"><div class="t">Notatki prelegenta</div><p>${s.notes}</p></aside>` : '';
return `<section class="slide cover" data-i="${i}">
<span class="badge">${esc(s.sec)}</span>
<div class="brand-mark">GF</div>
<h1>${esc(s.title)}</h1>
<div class="sub">${esc(s.subtitle||'')}</div>
<div class="life">
<span>Fundation</span><i>→</i><span>Realizacja</span><i>→</i><span>Service Transition</span><i>→</i><span>Adoption</span><i>→</i><span>RUN</span>
</div>
<div class="meta">
<div>Prowadzący: <b>……………………</b></div>
<div>Data: <b>……………………</b></div>
<div>Akademia Projektów GF · <b>v1.0</b></div>
</div>
<div class="hint">Nawigacja: strzałki ← → lub spacja · „Szczegóły” rozwija drill-down · góra: wyszukiwarka i spis</div>
${notes}
</section>`;
}
if(s.finalTest) return examSlideHTML(s, i);
const pts = (s.points||[]).map(p=>`<li>${p}</li>`).join('');
const ex = s.example ? `<div class="box ex"><div class="t">▶ Przykład</div>${s.example}</div>` : '';
const dd = s.details ? `<details class="dd"><summary>Szczegóły i przykłady</summary><div class="inner">${s.details}</div></details>` : '';
const notes = s.notes ? `<aside class="notes"><div class="t">Notatki prelegenta</div><p>${s.notes}</p></aside>` : '';
const tip = s.practice ? `<div class="box tip"><div class="t">▶ W praktyce</div>${s.practice}</div>` : '';
const quiz = s.quiz ? renderQuiz(s.quiz) : '';
const hasAside = !!(s.example || s.details || s.practice || s.quiz);
return `<section class="slide ${hasAside?'':'no-aside'}" data-i="${i}">
<div class="slide-main">
<span class="kicker">${esc(s.sec)}</span>
<h2>${esc(s.title)}</h2>
${s.lead?`<p class="lead">${s.lead}</p>`:''}
${pts?`<ul class="pts">${pts}</ul>`:''}
${s.cta?`<div class="main-cta">${s.cta}</div>`:''}
</div>
<div class="slide-aside">${ex}${dd}${tip}${quiz}</div>
${notes}
</section>`;
}
function renderQuiz(qz){
const opts = qz.opts.map(o=>`<button class="quiz-opt" data-ok="${o.ok?1:0}">${o.t}</button>`).join('');
return `<details class="quiz"><summary>✓ Pytanie sprawdzające — kliknij, aby otworzyć</summary><div class="qbody">
<div class="qq">${qz.q}</div>
<div class="qhint">🙈 Treść slajdu jest teraz ukryta — wybierz odpowiedź samodzielnie.</div>
<div class="qopts">${opts}</div>
<div class="why">${qz.why||''}</div>
</div></details>`;
}
function examSlideHTML(s, i){
const qs = s.test.map((t,qi)=>{
const opts = t.opts.map(o=>`<button class="exam-opt" data-ok="${o.ok?1:0}">${o.t}</button>`).join('');
return `<div class="exam-q" data-qi="${qi}">
<div class="n">Pytanie ${qi+1} / ${s.test.length}</div>
<div class="q">${t.q}</div>
<div class="exam-opts">${opts}</div>
<div class="exam-why">${t.why||''}</div>
</div>`;
}).join('');
const notes = s.notes ? `<aside class="notes"><div class="t">Notatki prelegenta</div><p>${s.notes}</p></aside>` : '';
return `<section class="slide no-aside" data-i="${i}">
<div class="slide-main">
<span class="kicker">${esc(s.sec)}</span>
<h2>${esc(s.title)}</h2>
${s.lead?`<p class="lead">${s.lead}</p>`:''}
<div class="exam">${qs}</div>
<div class="exam-actions">
<button class="cta-exam" id="examShow">Pokaż wynik</button>
<button class="cta-exam ghost" id="examReset">↻ Od nowa</button>
<span class="exam-progress" id="examProg">Odpowiedziano: 0 / ${s.test.length}</span>
</div>
<div class="exam-result" id="examResult"></div>
${notes}
</div>
</section>`;
}
deck.innerHTML = DECK.map(slideHTML).join('');
const slides = [...deck.querySelectorAll('.slide')];
document.getElementById('tot').textContent = slides.length;
/* mini-quiz: klik w odpowiedź → feedback + wyjaśnienie + licznik wyniku */
const QS = { answered:0, correct:0, total:DECK.filter(s=>s.quiz).length };
function updateQScore(){
document.getElementById('qc').textContent = QS.correct;
document.getElementById('qa').textContent = QS.answered;
document.getElementById('qscore').title = `Quiz: ${QS.correct} poprawnych / ${QS.answered} odpowiedzianych (z ${QS.total})`;
}
updateQScore();
deck.addEventListener('click', e=>{
const b = e.target.closest('.quiz-opt'); if(!b || b.disabled) return;
const quiz = b.closest('.quiz');
quiz.querySelectorAll('.quiz-opt').forEach(x=>{
x.disabled = true;
if(x.dataset.ok==='1'){ x.classList.add('ok'); x.insertAdjacentHTML('beforeend','<span class="mk">✔</span>'); }
});
const ok = b.dataset.ok==='1';
if(!ok){ b.classList.add('bad'); b.insertAdjacentHTML('beforeend','<span class="mk">✕</span>'); }
const why = quiz.querySelector('.why'); if(why) why.classList.add('show');
quiz.dataset.answered = '1'; quiz.classList.add('done');
const slide = quiz.closest('.slide'); if(slide) slide.classList.remove('quiz-open'); // odsłoń treść do nauki
QS.answered++; if(ok) QS.correct++; updateQScore();
});
/* otwarcie panelu pytania → rozmyj treść główną slajdu; zamknięcie lub odpowiedź → odsłoń */
deck.querySelectorAll('details.quiz').forEach(d=>{
d.addEventListener('toggle', ()=>{
const slide = d.closest('.slide'); if(!slide) return;
if(d.open && d.dataset.answered!=='1') slide.classList.add('quiz-open');
else slide.classList.remove('quiz-open');
});
});
/* ----- TEST KOŃCOWY ----- */
const examEl = deck.querySelector('.exam');
if(examEl){
const EX = { correct:0, answered:new Set(), total:examEl.querySelectorAll('.exam-q').length };
deck.addEventListener('click', e=>{
const o = e.target.closest('.exam-opt'); if(!o || o.disabled) return;
const q = o.closest('.exam-q'); const qi = q.dataset.qi;
if(EX.answered.has(qi)) return;
EX.answered.add(qi);
q.querySelectorAll('.exam-opt').forEach(x=>{
x.disabled = true;
if(x.dataset.ok==='1'){ x.classList.add('ok'); x.insertAdjacentHTML('beforeend','<span class="mk">✔</span>'); }
});
const ok = o.dataset.ok==='1';
if(!ok){ o.classList.add('bad'); o.insertAdjacentHTML('beforeend','<span class="mk">✕</span>'); }
if(ok) EX.correct++;
const why = q.querySelector('.exam-why'); if(why) why.classList.add('show');
document.getElementById('examProg').textContent = `Odpowiedziano: ${EX.answered.size} / ${EX.total}`;
});
document.getElementById('examShow').onclick = ()=>{
const n = EX.total, c = EX.correct, pct = Math.round(c/n*100);
const pass = pct >= 70;
const ocena = pct>=90?5 : pct>=70?4 : pct>=50?3 : pct>=30?2 : 1;
const box = pass ? 'ex' : 'warn';
const tag = pass ? '✔ Test zaliczony' : '✕ Test niezaliczony';
const msg = pass
? 'Gratulacje — próg 70% osiągnięty. Możesz przystąpić do certyfikacji.'
: (EX.answered.size < n ? `Odpowiedziano na ${EX.answered.size}/${n} pytań. Uzupełnij brakujące i spróbuj ponownie.` : 'Próg zaliczenia to 70% — wróć do slajdów i podejdź jeszcze raz.');
document.getElementById('examResult').innerHTML =
`<div class="box ${box}"><div class="t">${tag}</div>
<div class="big">${c}/${n} <span style="font-size:16px;color:var(--muted)">(${pct}%) · ocena ${ocena}/5</span></div>
<p style="margin-top:6px">${msg}</p></div>`;
document.getElementById('examResult').scrollIntoView({behavior:'smooth',block:'nearest'});
};
document.getElementById('examReset').onclick = ()=>{
EX.correct = 0; EX.answered.clear();
examEl.querySelectorAll('.exam-q').forEach(q=>{
q.querySelectorAll('.exam-opt').forEach(x=>{ x.disabled=false; x.classList.remove('ok','bad'); const m=x.querySelector('.mk'); if(m) m.remove(); });
const why=q.querySelector('.exam-why'); if(why) why.classList.remove('show');
});
document.getElementById('examProg').textContent = `Odpowiedziano: 0 / ${EX.total}`;
document.getElementById('examResult').innerHTML = '';
};
}
function show(n){
idx = Math.max(0, Math.min(slides.length-1, n));
slides.forEach((el,i)=>el.classList.toggle('active', i===idx));
document.getElementById('cur').textContent = idx+1;
document.getElementById('progfill').style.width = ((idx+1)/slides.length*100)+'%';
document.getElementById('prev').disabled = idx===0;
document.getElementById('next').disabled = idx===slides.length-1;
window.scrollTo({top:0,behavior:'smooth'});
}
function goto(n, openDetails){
show(n);
if(openDetails){ const d = slides[idx].querySelector('details.dd'); if(d) d.open = true; }
}
document.getElementById('prev').onclick = ()=>show(idx-1);
document.getElementById('next').onclick = ()=>show(idx+1);
document.addEventListener('keydown', e=>{
if(document.getElementById('overlay').classList.contains('show')) { if(e.key==='Escape') closeOverlay(); return; }
if(e.target.tagName==='INPUT') return;
if(e.key==='ArrowRight'||e.key===' '||e.key==='PageDown'){ e.preventDefault(); show(idx+1); }
if(e.key==='ArrowLeft'||e.key==='PageUp'){ e.preventDefault(); show(idx-1); }
if(e.key==='Home') show(0);
if(e.key==='End') show(slides.length-1);
});
/* presenter mode */
document.getElementById('btnPres').onclick = function(){
document.body.classList.toggle('presenter');
this.classList.toggle('on', document.body.classList.contains('presenter'));
};
/* print: rozwiń wszystkie details, potem przywróć */
let printOpen = [];
document.getElementById('btnPrint').onclick = ()=>window.print();
window.addEventListener('beforeprint', ()=>{
printOpen = [...deck.querySelectorAll('details')].map(d=>d.open);
deck.querySelectorAll('details').forEach(d=>d.open=true);
});
window.addEventListener('afterprint', ()=>{
deck.querySelectorAll('details').forEach((d,i)=>d.open=printOpen[i]);
});
/* ----- OVERLAY: spis treści / wyniki wyszukiwania ----- */
const overlay = document.getElementById('overlay');
const ovBody = document.getElementById('ovBody');
function closeOverlay(){ overlay.classList.remove('show'); }
document.getElementById('ovClose').onclick = closeOverlay;
overlay.addEventListener('click', e=>{ if(e.target===overlay) closeOverlay(); });
document.getElementById('btnToc').onclick = ()=>{
const secs = {};
DECK.forEach((s,i)=>{ (secs[s.sec] ??= []).push({s,i}); });
let html = `<h3>Spis treści</h3><p style="color:var(--muted)">Kliknij, aby przejść do slajdu.</p>`;
for(const [sec, arr] of Object.entries(secs)){
html += `<div class="toc-sec"><div class="h">${esc(sec)}</div><div class="toc-grid">` +
arr.map(({s,i})=>`<button class="toc-item" data-go="${i}">${esc(s.title)}<small>Slajd ${i+1}</small></button>`).join('') +
`</div></div>`;
}
ovBody.innerHTML = html;
ovBody.querySelectorAll('[data-go]').forEach(b=>b.onclick=()=>{ closeOverlay(); goto(+b.dataset.go); });
overlay.classList.add('show');
};
/* ----- WYSZUKIWARKA ----- */
const INDEX = DECK.map((s,i)=>{
const raw = [s.sec, s.title, s.lead, ...(s.points||[]), s.example||'', s.details||''].join(' ');
const text = raw.replace(/<[^>]+>/g,' ').replace(/\s+/g,' ').trim();
return { i, sec:s.sec, title:s.title, text, low:text.toLowerCase(), inDetails:(s.details||'').replace(/<[^>]+>/g,' ').toLowerCase() };
});
const qEl = document.getElementById('q');
let tmr=null;
qEl.addEventListener('input', ()=>{ clearTimeout(tmr); tmr=setTimeout(runSearch, 130); });
qEl.addEventListener('keydown', e=>{ if(e.key==='Escape'){ qEl.value=''; closeOverlay(); } });
function snippet(text, low, q){
const p = low.indexOf(q); if(p<0) return esc(text.slice(0,120))+'…';
const a = Math.max(0, p-45), b = Math.min(text.length, p+q.length+70);
const seg = (a>0?'…':'') + text.slice(a,b) + (b<text.length?'…':'');
const re = new RegExp('('+q.replace(/[.*+?^${}()|[\]\\]/g,'\\$&')+')','ig');
return esc(seg).replace(new RegExp('('+q.replace(/[.*+?^${}()|[\]\\]/g,'\\$&')+')','ig'), '<mark>$1</mark>');
}
function runSearch(){
const q = qEl.value.trim().toLowerCase();
if(q.length < 2){ closeOverlay(); return; }
const hits = INDEX.filter(r=>r.low.includes(q));
let html = `<h3>Wyniki wyszukiwania — „${esc(qEl.value.trim())}”</h3>`;
if(!hits.length){ html += `<p class="empty">Brak trafień. Spróbuj innego słowa (np. „KPI”, „Sponsor”, „RUN”).</p>`; }
else{
html += `<p style="color:var(--muted)">${hits.length} slajd(ów). Kliknij, aby przejść.</p><div class="res">` +
hits.map(r=>{
const inDet = r.inDetails.includes(q);
return `<button data-go="${r.i}" data-det="${inDet?1:0}">
<div class="rk">${esc(r.sec)} · Slajd ${r.i+1}${inDet?' · w szczegółach':''}</div>
<div class="rt">${esc(r.title)}</div>
<div class="rs">${snippet(r.text, r.low, q)}</div></button>`;
}).join('') + `</div>`;
}
ovBody.innerHTML = html;
ovBody.querySelectorAll('[data-go]').forEach(b=>b.onclick=()=>{ closeOverlay(); goto(+b.dataset.go, b.dataset.det==='1'); });
overlay.classList.add('show');
}
/* ----- UKŁADY (przełączane, rozszerzalne) ----- */
/* Dodanie nowego układu: 1) dopisz blok CSS body[data-layout='NAZWA'],
2) dodaj tu wpis {id:'NAZWA', label:'...'} — reszta działa automatycznie. */
const LAYOUTS = [
{ id:'two', label:'Układ: 2 kolumny' },
{ id:'flow', label:'Układ: klasyczny' },
{ id:'wide', label:'Układ: szeroki' },
{ id:'stage', label:'Układ: pełny ekran' }
];
const DEFAULT_LAYOUT = 'two';
const layEl = document.getElementById('lay');
layEl.innerHTML = LAYOUTS.map(l=>`<option value="${l.id}">${l.label}</option>`).join('');
function setLayout(id){
if(!LAYOUTS.some(l=>l.id===id)) id = DEFAULT_LAYOUT;
document.body.dataset.layout = id;
layEl.value = id;
try{ localStorage.setItem('gf_deck_layout', id); }catch(e){}
}
let startLay = DEFAULT_LAYOUT;
try{ startLay = localStorage.getItem('gf_deck_layout') || DEFAULT_LAYOUT; }catch(e){}
setLayout(startLay);
layEl.onchange = ()=>setLayout(layEl.value);
/* ----- WEJŚCIE DO TESTU KOŃCOWEGO ----- */
const examIdx = DECK.findIndex(s=>s.finalTest);
if(examIdx >= 0){
document.getElementById('btnTest').onclick = ()=>show(examIdx);
deck.addEventListener('click', e=>{ if(e.target.closest('[data-goto-test]')) show(examIdx); });
}
show(0);
</script>
</body>
</html>
<!doctype html>
<html lang="pl">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Jak prowadzimy projekty w Gourmet Foods — szkolenie</title>
<meta name="description" content="Szkolenie z firmowej metodyki prowadzenia projektów: Fundation → Realizacja → Service Transition → Adoption → RUN. Deck z drill-down i wyszukiwarką. Offline.">
<style>
/* ===== TOKENY (motyw corporate-blue, offline) ===== */
:root{
--bg:#0A0F1D; --bg2:#0d1526; --panel:rgba(14,25,43,.82); --panel2:#101c31;
--accent:#3B82F6; --accent-2:#60a5fa; --accent-dim:rgba(59,130,246,.14);
--ok:#10B981; --ok-dim:rgba(16,185,129,.14); --warn:#F59E0B; --warn-dim:rgba(245,158,11,.14);
--bad:#EF4444; --bad-dim:rgba(239,68,68,.14); --gold:#e7c66b;
--ink:#F1F5F9; --muted:#9db0c7; --dim:#64748B;
--line:rgba(255,255,255,.08); --line-2:rgba(255,255,255,.15);
--radius:16px;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{
background:radial-gradient(1200px 700px at 50% -12%, #12233d 0%, var(--bg) 62%);
color:var(--ink); font:16px/1.55 system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif;
display:flex; flex-direction:column; min-height:100vh;
}
h1,h2,h3,h4{line-height:1.2;font-weight:800}
a{color:var(--accent-2)}
mark{background:var(--warn);color:#111;border-radius:3px;padding:0 2px}
/* ===== TOP BAR ===== */
.bar{position:sticky;top:0;z-index:30;display:flex;gap:12px;align-items:center;
padding:10px 16px;background:linear-gradient(180deg,rgba(10,15,29,.96),rgba(10,15,29,.7));
backdrop-filter:blur(10px);border-bottom:1px solid var(--line)}
.bar .logo{font-weight:800;letter-spacing:.2px;white-space:nowrap}
.bar .logo small{display:block;font-weight:500;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.5px}
.search{flex:1;max-width:420px;position:relative}
.search input{width:100%;background:#0b1424;border:1px solid var(--line-2);color:var(--ink);
border-radius:10px;padding:9px 12px 9px 34px;font:inherit}
.search input:focus{outline:none;border-color:var(--accent)}
.search::before{content:"🔍";position:absolute;left:10px;top:8px;opacity:.7;font-size:13px}
.tools{display:flex;gap:6px;margin-left:auto;flex-wrap:wrap}
button.tool{cursor:pointer;font:inherit;font-size:13px;color:var(--ink);background:#0d1a2e;
border:1px solid var(--line-2);border-radius:9px;padding:8px 11px;white-space:nowrap;transition:.15s}
button.tool:hover{border-color:var(--accent);background:#12233d}
button.tool.on{background:var(--accent-dim);border-color:var(--accent);color:var(--accent-2)}
.count{font-size:13px;color:var(--muted);white-space:nowrap;padding:0 4px}
/* ===== PROGRESS ===== */
.prog{height:3px;background:#0b1424}
.prog > i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--accent),var(--accent-2));transition:width .4s}
/* ===== STAGE / SLIDE ===== */
.stage{flex:1;display:flex;align-items:flex-start;justify-content:center;padding:26px 18px 90px}
.slide{width:100%;margin:0 auto;display:none;animation:fade .35s ease}
.slide.active{display:block}
.slide-main{min-width:0}
.slide-aside{min-width:0}
.slide-aside:empty{display:none}
/* ===== UKŁADY — przełączane przez body[data-layout].
DODANIE NOWEGO UKŁADU = 1 blok CSS tutaj + 1 wpis w LAYOUTS (JS). ===== */
/* flow — klasyczny, 1 kolumna */
body[data-layout='flow'] .slide{max-width:980px}
/* wide — szerszy, 1 kolumna, większe fonty */
body[data-layout='wide'] .slide{max-width:1140px}
body[data-layout='wide'] .slide h2{font-size:34px}
body[data-layout='wide'] .lead{font-size:19px}
/* two — 2 kolumny: teza+punkty | przykład+drill-down */
body[data-layout='two'] .slide{max-width:1280px}
body[data-layout='two'] .slide:not(.cover).active{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);gap:26px;align-items:start}
body[data-layout='two'] .slide.no-aside:not(.cover).active{grid-template-columns:1fr}
body[data-layout='two'] .notes{grid-column:1/-1}
body[data-layout='two'] .slide-aside .box:first-child{margin-top:0}
/* stage — pełny ekran, duże fonty (pod rzutnik) */
body[data-layout='stage'] .slide{max-width:1580px}
body[data-layout='stage'] .slide h2{font-size:42px}
body[data-layout='stage'] .lead{font-size:23px}
body[data-layout='stage'] .pts li{font-size:19px;padding:14px 18px}
/* wsp. dla select układu */
select.tool{appearance:auto;-webkit-appearance:auto}
select.tool option{background:#0d1a2e;color:var(--ink)}
@keyframes fade{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
.kicker{display:inline-block;font-size:12px;font-weight:700;letter-spacing:.7px;text-transform:uppercase;
color:var(--accent-2);background:var(--accent-dim);border:1px solid rgba(59,130,246,.3);
padding:4px 10px;border-radius:20px;margin-bottom:14px}
.slide h2{font-size:30px;margin-bottom:10px}
.lead{font-size:18px;color:var(--ink);opacity:.95;margin-bottom:18px}
.pts{list-style:none;display:flex;flex-direction:column;gap:10px;margin:0 0 6px}
.pts li{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:12px 14px;
border-left:3px solid var(--accent)}
.pts li b{color:var(--accent-2)}
.two{display:grid;grid-template-columns:1fr 1fr;gap:10px}
@media (max-width:680px){.two{grid-template-columns:1fr}.slide h2{font-size:24px}}
/* callouts */
.box{border-radius:12px;padding:13px 15px;margin-top:14px;border:1px solid var(--line)}
.box .t{font-weight:700;font-size:12px;text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px;display:flex;gap:8px;align-items:center}
.box.ex{background:var(--ok-dim);border-color:#1f6a4f} .box.ex .t{color:var(--ok)}
.box.rule{background:var(--accent-dim);border-color:#2a5aa0} .box.rule .t{color:var(--accent-2)}
.box.warn{background:var(--warn-dim);border-color:#7a5f1e} .box.warn .t{color:var(--warn)}
.box.tip{background:rgba(231,198,107,.10);border-color:rgba(231,198,107,.45)} .box.tip .t{color:var(--gold)}
/* drill-down */
details.dd{margin-top:16px;border:1px solid var(--line-2);border-radius:12px;background:var(--panel2);overflow:hidden}
details.dd > summary{cursor:pointer;list-style:none;padding:12px 15px;font-weight:600;color:var(--accent-2);
display:flex;align-items:center;gap:10px;user-select:none}
details.dd > summary::-webkit-details-marker{display:none}
details.dd > summary::before{content:"▸";transition:.2s;color:var(--accent)}
details.dd[open] > summary::before{transform:rotate(90deg)}
details.dd > summary:hover{background:#132339}
.dd .inner{padding:4px 16px 16px;border-top:1px solid var(--line)}
.dd .inner h4{margin:14px 0 6px;color:var(--ink)}
.dd .inner p{margin:6px 0;color:var(--muted)}
.dd .inner ul{margin:6px 0 6px 18px;color:var(--muted)}
.dd .inner li{margin:3px 0}
.dd .inner code,.formula{font-family:"JetBrains Mono",ui-monospace,Consolas,monospace}
.formula{display:block;background:#0b1424;border:1px solid var(--line);border-radius:8px;padding:10px 12px;margin:8px 0;color:var(--accent-2);font-size:14px;overflow-x:auto}
table.tbl{width:100%;border-collapse:collapse;margin:10px 0;font-size:14px}
table.tbl th,table.tbl td{border:1px solid var(--line);padding:7px 9px;text-align:left;vertical-align:top}
table.tbl th{background:#0e1a2e;color:var(--ink)}
table.tbl td{color:var(--muted)}
.flow{display:flex;flex-wrap:wrap;gap:8px;align-items:stretch;margin:6px 0}
.flow .st{flex:1;min-width:120px;background:var(--panel);border:1px solid var(--line);border-top:3px solid var(--accent);border-radius:10px;padding:10px 12px}
.flow .st b{display:block;color:var(--accent-2);font-size:14px}
.flow .st span{font-size:12px;color:var(--muted)}
/* mini-quiz sprawdzający — ZAKRYTY domyślnie (details), odsłaniany kliknięciem */
.quiz{margin-top:16px;border:1px solid rgba(59,130,246,.35);border-radius:12px;overflow:hidden;
background:linear-gradient(180deg,var(--accent-dim),rgba(59,130,246,.03))}
.quiz > summary{cursor:pointer;list-style:none;padding:11px 14px;font-weight:700;color:var(--accent-2);
font-size:12px;text-transform:uppercase;letter-spacing:.6px;display:flex;gap:8px;align-items:center;user-select:none}
.quiz > summary::-webkit-details-marker{display:none}
.quiz > summary::before{content:"▸";transition:.2s;color:var(--accent)}
.quiz[open] > summary::before{transform:rotate(90deg)}
.quiz > summary:hover{background:rgba(59,130,246,.08)}
.quiz .qbody{padding:4px 14px 14px}
.quiz .qq{font-weight:600;margin-bottom:10px;color:var(--ink)}
.quiz .qopts{display:flex;flex-direction:column;gap:8px}
.qhint{font-size:13px;color:var(--warn);margin-bottom:10px}
.quiz.done .qhint{display:none}
/* rozmycie TREŚCI GŁÓWNEJ slajdu, gdy panel pytania jest otwarty i bez odpowiedzi —
użytkownik nie „podgląda” odpowiedzi ze slajdu, musi wybrać sam */
.slide-main{transition:filter .25s}
.slide.quiz-open .slide-main{filter:blur(7px);user-select:none}
.quiz-opt{text-align:left;cursor:pointer;font:inherit;color:var(--ink);background:#0d1a2e;
border:1px solid var(--line-2);border-radius:9px;padding:9px 12px;transition:.15s;line-height:1.4}
.quiz-opt:hover:not(:disabled){border-color:var(--accent);background:#12233d}
.quiz-opt:disabled{cursor:default;opacity:.85}
.quiz-opt.ok{border-color:var(--ok);background:var(--ok-dim)}
.quiz-opt.bad{border-color:var(--bad);background:var(--bad-dim)}
.quiz-opt .mk{float:right;font-weight:800}
.quiz .why{margin-top:11px;font-size:14px;color:var(--muted);border-top:1px solid var(--line);
padding-top:9px;display:none}
.quiz .why.show{display:block}
.quiz .why b{color:var(--ink)}
@media print{.quiz{background:#f6f8fb!important}.quiz .why{display:block!important;color:#333!important}.quiz-opt{background:#fff!important;color:#111!important}.slide.quiz-open .slide-main{filter:none!important}.qhint{display:none!important}}
/* test końcowy */
.exam{display:flex;flex-direction:column;gap:14px;margin-top:6px}
.exam-q{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:14px 16px;border-left:3px solid var(--accent)}
.exam-q .n{font-size:12px;color:var(--accent-2);font-weight:700;text-transform:uppercase;letter-spacing:.5px}
.exam-q .q{font-weight:600;margin:4px 0 10px;color:var(--ink)}
.exam-opts{display:flex;flex-direction:column;gap:8px}
.exam-opt{text-align:left;cursor:pointer;font:inherit;color:var(--ink);background:#0d1a2e;border:1px solid var(--line-2);
border-radius:9px;padding:9px 12px;transition:.15s;line-height:1.4}
.exam-opt:hover:not(:disabled){border-color:var(--accent);background:#12233d}
.exam-opt:disabled{cursor:default;opacity:.9}
.exam-opt.ok{border-color:var(--ok);background:var(--ok-dim)}
.exam-opt.bad{border-color:var(--bad);background:var(--bad-dim)}
.exam-opt .mk{float:right;font-weight:800}
.exam-why{display:none;margin-top:9px;font-size:14px;color:var(--muted);border-top:1px solid var(--line);padding-top:8px}
.exam-why.show{display:block}
.exam-actions{display:flex;gap:12px;align-items:center;margin-top:16px;flex-wrap:wrap}
.cta-exam{cursor:pointer;font:inherit;font-weight:700;color:#06121e;background:linear-gradient(90deg,var(--accent),var(--accent-2));
border:0;border-radius:10px;padding:11px 20px;transition:.15s}
.cta-exam:hover{filter:brightness(1.06)}
.cta-exam.ghost{background:transparent;color:var(--ink);border:1px solid var(--line-2)}
.exam-progress{color:var(--muted);font-size:14px}
.main-cta{margin-top:18px}
.exam-result{margin-top:16px}
.exam-result .big{font-size:32px;font-weight:800}
@media print{.exam-why{display:block!important;color:#333!important}.exam-opt{background:#fff!important;color:#111!important}.exam-actions{display:none!important}}
/* presenter notes */
.notes{display:none;margin-top:16px;border:1px dashed var(--line-2);border-radius:10px;padding:12px 14px;background:rgba(59,130,246,.05)}
.notes .t{font-size:11px;text-transform:uppercase;letter-spacing:.6px;color:var(--dim);margin-bottom:5px}
.notes p{color:var(--muted);font-size:14px}
body.presenter .notes{display:block}
/* cover / slajd startowy */
.slide.cover{max-width:960px;text-align:center;padding-top:22px}
.slide.cover .badge{display:inline-block;font-size:12px;font-weight:700;letter-spacing:1px;text-transform:uppercase;
color:var(--accent-2);background:var(--accent-dim);border:1px solid rgba(59,130,246,.35);padding:6px 14px;border-radius:20px}
.slide.cover .brand-mark{width:64px;height:64px;margin:22px auto 6px;border-radius:16px;
background:linear-gradient(135deg,var(--accent),#1e40af);display:flex;align-items:center;justify-content:center;
font-weight:800;font-size:26px;color:#fff;box-shadow:0 12px 40px rgba(59,130,246,.35)}
.slide.cover h1{font-size:44px;line-height:1.1;margin:14px 0 8px;letter-spacing:-.5px}
.slide.cover .sub{font-size:20px;color:var(--muted);margin-bottom:8px}
.slide.cover .life{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;margin:26px auto 22px;max-width:760px}
.slide.cover .life span{font-size:13px;font-weight:600;color:var(--ink);background:var(--panel);border:1px solid var(--line);
border-top:3px solid var(--accent);border-radius:10px;padding:9px 14px}
.slide.cover .life i{color:var(--dim);align-self:center;font-style:normal}
.slide.cover .meta{display:inline-flex;gap:26px;flex-wrap:wrap;justify-content:center;margin-top:8px;
border-top:1px solid var(--line);padding-top:16px;color:var(--muted);font-size:15px}
.slide.cover .meta b{color:var(--ink)}
.slide.cover .hint{margin-top:22px;color:var(--dim);font-size:13px}
@media (max-width:680px){.slide.cover h1{font-size:30px}}
@media print{.slide.cover h1{color:#12324f}.slide.cover .brand-mark{box-shadow:none}}
/* nav buttons */
.nav{position:fixed;bottom:18px;left:0;right:0;display:flex;justify-content:center;gap:10px;z-index:25;pointer-events:none}
.nav button{pointer-events:auto;cursor:pointer;font:inherit;font-weight:600;background:#0d1a2e;color:var(--ink);
border:1px solid var(--line-2);border-radius:10px;padding:9px 16px;transition:.15s}
.nav button:hover{border-color:var(--accent);background:#12233d}
.nav button:disabled{opacity:.4;cursor:default}
/* overlay (spis / szukaj) */
.overlay{position:fixed;inset:0;z-index:40;background:rgba(6,10,20,.86);backdrop-filter:blur(4px);
display:none;padding:40px 18px;overflow:auto}
.overlay.show{display:block}
.overlay .panel{max-width:900px;margin:0 auto;background:var(--bg2);border:1px solid var(--line-2);border-radius:16px;padding:22px}
.overlay h3{margin-bottom:4px}
.overlay .close{float:right;cursor:pointer;background:none;border:1px solid var(--line-2);color:var(--ink);border-radius:8px;padding:6px 10px;font:inherit}
.toc-sec{margin-top:16px}
.toc-sec .h{font-size:12px;text-transform:uppercase;letter-spacing:.6px;color:var(--accent-2);margin-bottom:8px}
.toc-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:8px}
.toc-item{text-align:left;cursor:pointer;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:10px 12px;color:var(--ink);font:inherit}
.toc-item:hover{border-color:var(--accent);background:#12233d}
.toc-item small{display:block;color:var(--dim)}
.res{display:flex;flex-direction:column;gap:8px;margin-top:14px}
.res button{text-align:left;cursor:pointer;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:11px 13px;color:var(--ink);font:inherit}
.res button:hover{border-color:var(--accent)}
.res .rt{font-weight:600}
.res .rs{font-size:13px;color:var(--muted);margin-top:3px}
.res .rk{font-size:11px;color:var(--accent-2);text-transform:uppercase;letter-spacing:.5px}
.empty{color:var(--muted);margin-top:14px}
/* ===== PRINT / PDF ===== */
@media print{
.bar,.nav,.prog,.overlay,.notes{display:none!important}
body{background:#fff;color:#111;display:block}
.stage{display:block;padding:0}
.slide{display:block!important;max-width:none;page-break-after:always;padding:24px 8px;border-bottom:2px solid #ddd}
.slide h2{color:#12324f} .kicker{color:#12324f;background:#eef}
.pts li,.box,details.dd,.formula,table.tbl th{background:#f6f8fb!important;color:#111!important}
.pts li b,.dd summary{color:#12324f!important}
details.dd .inner{display:block!important}
.lead,.pts li,.dd .inner p,.dd .inner ul,table.tbl td{color:#333!important}
}
</style>
</head>
<body>
<div class="bar">
<div class="logo">Akademia Projektów GF<small>Jak prowadzimy projekty · szkolenie</small></div>
<div class="search"><input id="q" type="text" placeholder="Szukaj w treści… (np. „próg 10h”, „Gemba”, „adoption”)" autocomplete="off"></div>
<div class="tools">
<button class="tool" id="btnToc">☰ Spis</button>
<button class="tool" id="btnPres" title="Notatki prelegenta">🎤 Prelegent</button>
<button class="tool" id="btnTest" title="Przejdź do testu końcowego">📝 Test</button>
<select class="tool" id="lay" title="Układ slajdu (przełącz na żywo)"></select>
<button class="tool" id="btnPrint">⬇ PDF</button>
<span class="count qscore" id="qscore" title="Quiz: poprawne / odpowiedziane">✓ <b id="qc">0</b>/<span id="qa">0</span></span>
<span class="count"><b id="cur">1</b>/<span id="tot">0</span></span>
</div>
</div>
<div class="prog"><i id="progfill"></i></div>
<div class="stage"><div id="deck"></div></div>
<div class="nav">
<button id="prev">← Poprzedni</button>
<button id="next">Następny →</button>
</div>
<div class="overlay" id="overlay"><div class="panel">
<button class="close" id="ovClose">✕ Zamknij</button>
<div id="ovBody"></div>
</div></div>
<script>
/* =====================================================================
Szkolenie „Jak prowadzimy projekty w Gourmet Foods”
Silnik: deck + drill-down (<details>) + wyszukiwarka. Offline, 1 plik.
Zgodny z kanonem WZORCE.md: tokeny :root, esc() anty-XSS, presenter-mode,
@media print (PDF), drill-down <details> dla hierarchii.
Treść w data-trap DECK (edytuj tu, UI się przerenderuje).
Źródła: Standard Ogólny Projektu, 4 Filary Analizy, Etap Adoption/CoE,
Zmiany ad-hoc i projekty strategiczne, Projekt_template.docx.
===================================================================== */
function esc(s){return String(s).replace(/[&<>"']/g,c=>({'&':'&','<':'<','>':'>','"':'"',"'":'''}[c]));}
const DECK = [
{ cover:true, sec:"Szkolenie wewnętrzne",
title:"Jak prowadzimy projekty w Gourmet Foods",
subtitle:"Firmowy standard — od uruchomienia do utrzymania i realnych korzyści",
notes:"Slajd startowy. Przywitaj uczestników, przedstaw prowadzącego i cel. Powiedz, że materiał ma wyszukiwarkę i szczegóły do samodzielnego zgłębienia po szkoleniu. Naciśnij → aby zacząć." },
{ sec:"Wprowadzenie", title:"Jak prowadzimy projekty w Gourmet Foods",
lead:"Jeden spójny standard: od pomysłu, przez realizację, po utrzymanie i realne korzyści biznesowe.",
points:[
"Cykl życia: <b>Fundation → Realizacja → Service Transition → Adoption → RUN</b>.",
"Dotyczy projektów IT i transformacji procesów (Odoo, Power BI, integracje Azure/M365, automatyzacje).",
"Ta prezentacja: przewiń strzałkami, rozwiń <b>„Szczegóły i przykłady”</b> albo <b>wyszukaj</b> temat u góry."],
example:"Przykładowa ścieżka: pomysł „nowy proces reklamacji” → Fundation (analiza i dane) → realizacja w Odoo → Service Transition → RUN → Adoption mierzona wskaźnikiem 1–5.",
practice:"Klikając „✓ Pytanie sprawdzające” na dole slajdu, zobaczysz, jak działa mechanika: treść się rozmywa, a Ty wybierasz odpowiedź samodzielnie.",
notes:"Powitanie. Cel szkolenia: każdy w firmie rozumie, jak uruchamiamy i prowadzimy projekty oraz jaka jest jego rola. Czas ~45–60 min + Q&A." },
{ sec:"Wprowadzenie", title:"Plan szkolenia",
lead:"Przejdziemy całą ścieżkę projektu — od „po co standard” do utrzymania i adopcji.",
points:[
"<b>Fundamenty:</b> po co standard, czym jest projekt, role.",
"<b>Cykl życia:</b> uruchomienie, tryby (ad-hoc / projekt / automatyzacja), Fundation i 4 filary analizy.",
"<b>Prowadzenie:</b> karta projektu, kamienie milowe, KPI, spotkania, rejestry.",
"<b>Domknięcie:</b> Service Transition, RUN, Adoption i Center of Excellence, zmiany ad-hoc vs strategiczne."],
example:"Na końcu czeka <b>test końcowy</b> (10 pytań, próg 70%) — sprawdzenie wiedzy z całości przed certyfikacją.",
practice:"Po szkoleniu wróć do dowolnego tematu przez wyszukiwarkę u góry — np. wpisz „próg 10h” albo „adoption”.",
notes:"Zapowiedz, że po każdym bloku jest miejsce na pytania. Wskaż wyszukiwarkę jako materiał referencyjny po szkoleniu." },
{ sec:"Fundamenty", title:"Po co nam standard prowadzenia projektów?",
lead:"Żeby zbierać, analizować i przekazywać wymagania w jeden sposób — mniej błędów, niższe koszty wdrożeń, większa wartość.",
points:[
"Spójny sposób <b>uruchamiania, prowadzenia, dokumentowania, przekazywania i domykania</b> projektów.",
"Eliminacja najczęstszych strat: praca bez analizy problemu, decyzje „z góry”, brak odniesienia do standardu."],
example:"Bez standardu: dwa działy zamawiają w IT „to samo” inaczej → podwójna praca, sprzeczne raporty. Ze standardem: jeden opis problemu, jedne User Stories, jedno wdrożenie.",
details:`<h4>Zakres standardu</h4><ul>
<li>projekty IT,</li><li>projekty transformacji procesów biznesowych,</li>
<li>projekty prowadzone w rytmie cyklicznych przeglądów i sprintów.</li></ul>
<h4>Czego standard NIE narzuca</h4><ul>
<li>pełnej metodyki (PMI, PRINCE2),</li>
<li>jednego narzędzia do zadań (Planner/Jira/Odoo),</li>
<li>małych automatyzacji — te mają odrębną procedurę.</li></ul>`,
notes:"Podkreśl korzyść: standard to nie biurokracja, tylko mniej marnotrawstwa i szybsze wdrożenia." },
{ sec:"Fundamenty", title:"Czym jest projekt — a co nim NIE jest",
lead:"Projekt to inicjatywa wymagająca planowania, koordynacji wielu osób i wdrożenia zmiany w procesie, systemie lub organizacji.",
points:[
"<b>Projekt:</b> szersza zmiana, wiele osób/działów, potrzebne kamienie milowe i etapy.",
"<b>Automatyzacja (nie-projekt):</b> wąski zakres, niskie ryzyko, jeden obszar — odrębna, szybka ścieżka."],
example:"„Nowy proces reklamacji w 4 działach” = projekt. „Dodaj filtr w jednym raporcie” = automatyzacja/zmiana ad-hoc.",
details:`<h4>Jako automatyzację traktujemy tematy</h4><ul>
<li>o ograniczonym zakresie i niskim ryzyku,</li>
<li>niewymagające szerokiej zmiany organizacyjnej,</li>
<li>realizowane w jednym obszarze biznesowym,</li>
<li>niewymagające pełnego Fundation, Service Transition i Adoption.</li></ul>
<p>Rozróżnienie robimy już na starcie (uruchomienie projektu) — decyduje o całej dalszej ścieżce.</p>`,
notes:"To rozróżnienie wraca w module o progu 10h. Zapowiedz je." },
{ sec:"Fundamenty", title:"Role w projekcie",
lead:"Cztery role decydują o projekcie; piąta (CoE) dba o standard i adopcję w całej firmie.",
points:[
"<b>Sponsor Projektu</b> — kluczowe decyzje biznesowe (start, priorytet, zamknięcie).",
"<b>Beneficjent / Process Owner</b> — potrzebuje efektu i odpowiada za cel biznesowy.",
"<b>Kierownik Projektu</b> — organizacja pracy, postęp, koordynacja, komunikacja.",
"<b>Zespół realizujący</b> + <b>Center of Excellence</b> — standardy, wsparcie, adopcja."],
details:`<table class="tbl"><tr><th>Rola</th><th>Odpowiada za</th><th>Przykład decyzji</th></tr>
<tr><td>Sponsor</td><td>decyzje biznesowe, zasoby</td><td>„Realizujemy / odkładamy / odrzucamy”</td></tr>
<tr><td>Beneficjent / Process Owner</td><td>cel biznesowy, odbiór</td><td>„Ten efekt rozwiązuje mój problem”</td></tr>
<tr><td>Kierownik Projektu</td><td>plan, kamienie, status</td><td>„Kolejny sprint: te 3 zadania”</td></tr>
<tr><td>Zespół / IT</td><td>realizacja uzgodnionego zakresu</td><td>„Wdrażamy wg User Stories”</td></tr>
<tr><td>CoE</td><td>standard, adopcja, ROI</td><td>„Poziom adopcji za niski — plan naprawczy”</td></tr></table>`,
notes:"Zapytaj uczestników, którą rolę pełnią najczęściej. Podkreśl: bez Sponsora projekt nie rusza." },
{ sec:"Cykl życia", title:"Cykl życia projektu — mapa",
lead:"Każdy projekt przechodzi te same etapy. Znać je = wiedzieć, gdzie właśnie jesteśmy i co jest następne.",
points:["Etap decyduje o tym, jakie pytania zadajemy i jakie decyzje podejmujemy."],
details:`<div class="flow">
<div class="st"><b>Fundation</b><span>analiza, dane, rekomendacja</span></div>
<div class="st"><b>Realizacja</b><span>zadania, kamienie, KPI</span></div>
<div class="st"><b>Service Transition</b><span>przekazanie do utrzymania</span></div>
<div class="st"><b>Adoption</b><span>realne użycie + korzyści</span></div>
<div class="st"><b>RUN</b><span>utrzymanie bieżące</span></div></div>
<h4>Zasada</h4><p>Projekt nie jest „zrobiony” po Go-Live — jest zrobiony, gdy użytkownicy korzystają, stare metody znikają, a korzyści są osiągnięte (etap Adoption).</p>`,
notes:"To slajd-kotwica. Wracaj do tej mapy przy każdym etapie — mów „jesteśmy TU”." },
{ sec:"Cykl życia", title:"Uruchomienie projektu",
lead:"Projekt zaczyna się od potrzeby biznesowej i wskazania, kto za co odpowiada.",
points:[
"Wskazujemy: <b>Sponsora, Beneficjenta/Process Ownera, Kierownika Projektu</b> i obszar zmiany.",
"Decydujemy o trybie: pełny projekt / przez Fundation / mała automatyzacja (odrębna procedura)."],
details:`<h4>Pytania na starcie</h4><ul>
<li>Jaki jest realny problem biznesowy (nie rozwiązanie)?</li>
<li>Wpływ na przychód lub koszty?</li>
<li>Czy temat wymaga analizy przedwdrożeniowej (Fundation)?</li></ul>`,
notes:"Najczęstszy błąd: start od rozwiązania, nie od problemu. Egzekwuj pytanie „jaki problem?”." },
{ sec:"Cykl życia", title:"Trzy tryby zgłoszenia — i próg 10h",
lead:"Nie każda zmiana to projekt. Tryb dobieramy do skali, a kluczowy próg to 10 godzin pracy.",
points:[
"<b>Zmiana ad-hoc</b> — wąski zakres, jeden obszar. <b>≤10h</b> → tygodniowy limit ad-hoc; <b>>10h</b> → zgoda zarządu.",
"<b>Projekt strategiczny</b> — cross-obszar, zmiana organizacyjna → Fundation, roadmapa, dedykowane zasoby.",
"<b>Automatyzacja</b> — odrębna, szybka procedura."],
example:"Zmiana ~12h w jednym module = ad-hoc, ale wymaga zgody zarządu (bo >10h). Nie każdy temat >10h to od razu projekt!",
details:`<h4>Trzy złote zasady</h4><ul>
<li><b>Zasada 1 — próg 10h:</b> zmiana >10h wymaga zgody zarządu.</li>
<li><b>Zasada 2 — priorytet strategii:</b> ad-hoc nie może blokować projektów strategicznych.</li>
<li><b>Zasada 3 — bez specyfikacji nie ruszamy:</b> niekompletne zgłoszenia są wstrzymywane.</li></ul>
<div class="box rule"><div class="t">▶ Trening praktyczny</div>
Ten temat masz jako <b>grę „Próg 10h”</b> (<code>05_Gra_Szkoleniowa\\Prog_10h.html</code>) — 4 zgłoszenia, decyzje i certyfikat.</div>`,
notes:"Odeślij do gry po tym slajdzie. To najczęściej mylona decyzja w firmie." },
{ sec:"Fundation + analiza", title:"Etap Fundation — analiza przedwdrożeniowa",
lead:"Zanim coś zbudujemy: rozumiemy proces, mierzymy go i rekomendujemy, co zrobić.",
points:[
"Cel: zrozumieć proces, zidentyfikować problem, zebrać dane ilościowe, ocenić potencjał usprawnienia.",
"Wyjście: <b>opis procesu, dane, rekomendacja</b> + decyzja Sponsora: <b>realizować / odłożyć / odrzucić</b>."],
details:`<h4>Po co osobny etap?</h4>
<p>Fundation chroni przed budowaniem rozwiązań do nieznanego problemu. Bez danych i rekomendacji Sponsor nie ma na czym oprzeć decyzji.</p>
<h4>Narzędzia analizy</h4><p>Na tym etapie pracujemy <b>4 filarami analizy</b> (kolejne slajdy) — dobieranymi do problemu, nie wszystkimi naraz.</p>`,
notes:"Fundation kończy się DECYZJĄ sponsora, nie dokumentem dla dokumentu." },
{ sec:"Fundation + analiza", title:"4 Filary Analizy — przegląd",
lead:"Cztery metody rozumienia procesu. Dobieramy je do problemu — można użyć jednej lub kilku.",
points:[
"<b>1. Modelowanie referencyjne</b> — startuj od standardu (best practice), nie od „jak robimy teraz”.",
"<b>2. Gemba Walk</b> — idź i zobacz, jak proces działa naprawdę.",
"<b>3. Event Storming</b> — zmapuj proces end-to-end jako ciąg zdarzeń.",
"<b>4. User Stories</b> — zamień analizę na jednoznaczne wymagania dla IT."],
example:"ZASADA KLUCZOWA: jedyną dopuszczalną formą przekazania wymagań do IT są User Stories + kryteria akceptacji. IT nie startuje bez nich.",
details:`<p>Metody służą wyłącznie do analizy i zrozumienia procesu. Nie ma obowiązku używać wszystkich — dobór zależy od problemu.</p>
<p>Wspólny mianownik: najpierw <b>problem i proces</b>, dopiero potem rozwiązanie i zakres dla IT.</p>`,
notes:"To rozdział o dyscyplinie analitycznej. Powtórz: bez User Stories IT nie zaczyna." },
{ sec:"Fundation + analiza", title:"Filar 1 — Modelowanie referencyjne",
lead:"Wykorzystaj sprawdzone rozwiązania rynkowe zamiast tworzyć proces od zera.",
points:[
"Punkt startu to <b>standard</b> (np. Odoo), a nie „jak robimy teraz”.",
"Biznes dopasowuje się do standardu; <b>customizacja musi być uzasadniona finansowo</b> (koszt vs wartość)."],
example:"Zamiast odwzorować papierowy obieg 1:1 w systemie — użyj standardowego workflowu Odoo; customizuj tylko tam, gdzie daje realną wartość.",
details:`<h4>Po co</h4><ul>
<li>unikasz długu technologicznego,</li>
<li>skracasz czas wdrożenia,</li>
<li>korzystasz z rozwiązań sprawdzonych przez inne firmy.</li></ul>`,
notes:"Najczęstszy opór: „u nas jest inaczej”. Odpowiedź: czy ta różnica jest warta swojej ceny?" },
{ sec:"Fundation + analiza", title:"Filar 2 — Gemba Walk",
lead:"Zobacz, jak proces działa naprawdę — a nie jak jest opisywany.",
points:[
"Analityk idzie „na dół” (magazyn, biuro) i <b>obserwuje</b> pracę krok po kroku.",
"Nie pyta „jak robicie?”, tylko patrzy, co faktycznie się dzieje.",
"<b>Oceniamy proces, nie pracownika.</b>"],
example:"Muda (marnotrawstwo) do wyłapania: zbędne kliknięcia, przepisywanie danych, chodzenie do drukarki, ręczne przenoszenie informacji między systemami.",
details:`<h4>Po co</h4><ul>
<li>identyfikacja realnych problemów,</li>
<li>eliminacja decyzji opartych wyłącznie na opiniach.</li></ul>
<p>Gemba ujawnia to, czego nie widać w opisach procesu i w spotkaniach przy stole.</p>`,
notes:"Podkreśl kulturę bez obwiniania — inaczej ludzie „grają” pod obserwatora." },
{ sec:"Fundation + analiza", title:"Filar 3 — Event Storming",
lead:"Zrozum proces end-to-end i zależności między działami oraz systemami.",
points:[
"Warsztat biznes + IT: budujemy proces jako <b>ciąg zdarzeń</b>.",
"Zdarzenia opisujemy w <b>czasie przeszłym</b> („Zamówienie opłacone”), bez języka technicznego."],
example:"Ciąg zdarzeń: „Zamówienie złożone” → „Zamówienie opłacone” → „Towar wydany” → „Faktura wystawiona”. Widać, gdzie proces się rwie.",
details:`<h4>Po co</h4><ul>
<li>ujawnienie braków w procesie,</li>
<li>zrozumienie integracji między systemami,</li>
<li>usunięcie „silosów wiedzy”.</li></ul>`,
notes:"Świetne, gdy nikt nie zna całego procesu end-to-end — a tak jest najczęściej." },
{ sec:"Fundation + analiza", title:"Filar 4 — User Stories + kryteria akceptacji",
lead:"Zamień analizę na jednoznaczne wymagania, których IT nie zinterpretuje po swojemu.",
points:[
"Format: <b>„Jako [kto], chcę [co], aby [wartość]”</b>.",
"Każda historyjka ma <b>kryteria akceptacji (Definition of Done)</b>."],
example:"„Jako księgowa chcę automatyczny e-mail do klienta, gdy faktura jest 14 dni po terminie, aby skrócić czas odzyskiwania należności.” Kryterium: e-mail wychodzi w dniu 14., z poprawną kwotą i numerem faktury.",
details:`<h4>Po co</h4><ul>
<li>brak nieporozumień z IT,</li>
<li>jasne kryterium odbioru pracy,</li>
<li>kontrola zakresu i kosztów.</li></ul>
<div class="box rule"><div class="t">▶ Zasada operacyjna</div>IT nie rozpoczyna prac bez zatwierdzonych User Stories i kryteriów akceptacji.</div>`,
notes:"To „umowa” z IT. Niejasna historyjka = pewny spór przy odbiorze." },
{ sec:"Prowadzenie", title:"Karta projektu (Projekt_template)",
lead:"Każdy projekt ma minimalny, firmowy opis — wg jednego wzoru.",
points:[
"Nagłówek: <b>Projekt · Właściciel/Sponsor · Project Manager · Zespół realizujący</b>.",
"Sekcje: <b>Kontekst → Problemy do rozwiązania → Cele i miary sukcesu → Stan docelowy (założenia)</b>.",
"Wzór: <code>Projekt_template.docx</code> — wklejany też do opisu projektu w Odoo."],
example:"Cel + miernik: „Skrócić czas obsługi reklamacji o 30% do końca Q3” · miernik: średni czas od zgłoszenia do zamknięcia.",
details:`<h4>Dlaczego „cel + miara”</h4>
<p>Cel bez miernika jest życzeniem. Każdy cel opisujemy: <b>co poprawiamy + ile + do kiedy</b> oraz <b>po czym poznamy sukces</b>.</p>
<h4>Obszary/wpływ</h4><p>Przy projektach cross-firmowych opisujemy, czego dotykają: systemy (Odoo, AD, Power BI), działy (sprzedaż, KIA, IT), dane (klientów, finansowe).</p>`,
notes:"Pokaż fizyczny szablon. Podkreśl: nowe karty mają wyglądać podobnie do wzoru." },
{ sec:"Prowadzenie", title:"Minimalny opis projektu",
lead:"Zanim projekt ruszy, musi mieć komplet minimalnych informacji.",
points:[
"cel projektu · zakres/opis problemu · beneficjent · uzasadnienie biznesowe · priorytety lub główne kamienie milowe."],
details:`<p>Beneficjent opisuje projekt od strony potrzeby: <b>kto</b> potrzebuje rozwiązania, <b>po co</b> jest realizowane, <b>jaki efekt</b> biznesowy ma dać.</p>
<p>Do projektu dołączamy formularz <code>Projekt_template.docx</code>.</p>`,
notes:"Jeśli brakuje uzasadnienia biznesowego — to sygnał, że projekt nie jest gotowy do startu." },
{ sec:"Prowadzenie", title:"Narzędzie — moduł Projekty w Odoo",
lead:"Projekt prowadzimy w uzgodnionym narzędziu; domyślnie w Odoo.",
points:[
"W narzędziu widoczne minimum: lista zadań, osoby odpowiedzialne, terminy, <b>kamienie milowe</b>, status, zgłoszone blokady."],
details:`<p>Jeżeli istnieje osobna instrukcja prowadzenia projektu w Odoo — stosujemy ją równolegle ze standardem. Jeśli jej nie ma, rekomendowane jest jej opracowanie jako osobnego standardu operacyjnego.</p>`,
notes:"Narzędzie to nie cel — celem jest widoczność postępu i blokad." },
{ sec:"Prowadzenie", title:"Kamienie milowe",
lead:"Kamień milowy to punkt kontrolny potwierdzający rezultat — nie zwykłe zadanie.",
points:[
"Opisuje <b>osiągnięty rezultat</b> i pozwala ocenić realny postęp.",
"Przykłady: zakończenie analizy, akceptacja zakresu, zakończenie testów, Go-Live, przekazanie do RUN, wymagany poziom adoption."],
details:`<p>Każdy projekt ma zdefiniowane kamienie milowe odpowiadające jego skali i celowi. To po nich, a nie po liczbie „zrobionych tasków”, oceniamy, czy projekt jest na dobrych torach.</p>`,
notes:"Rozróżnij zadanie od kamienia: kamień = rezultat/decyzja, nie czynność." },
{ sec:"Prowadzenie", title:"Ocena postępu — KPI i skala 1–5",
lead:"Postęp mierzymy realizacją kamieni milowych zgodnie z planem.",
points:[
"Podstawą oceny jest terminowa realizacja kamieni milowych, brak długotrwałych blokad krytycznych."],
details:`<h4>Wzór — stopień realizacji kamienia</h4>
<span class="formula">Stopień realizacji KM = zadania zakończone / zadania zaplanowane w KM × 100%</span>
<h4>Skala oceny postępu (1–5)</h4>
<table class="tbl"><tr><th>Ocena</th><th>Realizacja KM</th><th>Interpretacja</th></tr>
<tr><td>5</td><td>≥ 85%</td><td>Zgodnie z planem, brak istotnych blokad</td></tr>
<tr><td>4</td><td>70–84%</td><td>Niewielkie opóźnienia, bez istotnego wpływu</td></tr>
<tr><td>3</td><td>55–69%</td><td>Wymaga korekt planu / działań zarządczych</td></tr>
<tr><td>2</td><td>35–54%</td><td>Istotne opóźnienia lub blokady</td></tr>
<tr><td>1</td><td>< 35%</td><td>Realizacja zagrożona — brak postępu</td></tr></table>
<p>W projektach sprintowych pomocniczo można stosować <b>burn-down chart</b> (nieobowiązkowy).</p>`,
notes:"Skala 1–5 to wspólny język statusu na Project Review. Powtarzalna i obiektywna." },
{ sec:"Prowadzenie", title:"Spotkania projektowe",
lead:"Trzy typy spotkań — każde ma inny cel i inny czas trwania.",
points:[
"<b>Statusowe</b> (15–30 min) — synchronizacja: zrobione, w toku, blokady, następne kroki.",
"<b>Robocze / warsztat</b> (30–90 min) — analiza problemu, wypracowanie decyzji.",
"<b>Project Review</b> (30–60 min, co 6–8 tyg.) — postęp, ryzyka, decyzje Sponsora."],
example:"Nie mieszaj typów: statusowe NIE służy do warsztatu ani projektowania rozwiązania.",
details:`<table class="tbl"><tr><th>Spotkanie</th><th>Cel</th><th>Czas</th></tr>
<tr><td>Statusowe</td><td>krótka synchronizacja operacyjna</td><td>15–30 min</td></tr>
<tr><td>Robocze/warsztat</td><td>analiza, decyzje robocze</td><td>30–90 min</td></tr>
<tr><td>Project Review</td><td>ocena vs cel, ryzyka, decyzje sponsorskie</td><td>30–60 min</td></tr></table>`,
notes:"Częsty błąd: status trwa 90 min, bo wchodzi w warsztat. Pilnuj typu i czasu." },
{ sec:"Prowadzenie", title:"Planowanie kolejnego okresu",
lead:"Planujemy rytmicznie — domyślnie najbliższe 3 tygodnie.",
points:[
"Ustal priorytety, zaplanuj usunięcie blokad, wskaż kamienie do osiągnięcia.",
"Upewnij się, że planowane działania realnie prowadzą do celu projektu."],
details:`<p>Krótki horyzont (3 tygodnie) utrzymuje projekt w ruchu i szybko ujawnia odchylenia od planu kamieni milowych.</p>`,
notes:"3 tygodnie to domyślny rytm — dostosuj do skali projektu." },
{ sec:"Prowadzenie", title:"Rejestry i repozytorium",
lead:"Decyzje, zmiany systemowe i dokumenty mają swoje stałe miejsca.",
points:[
"<b>Rejestr decyzji</b> — wszystkie istotne decyzje biznesowe i projektowe (SharePoint INTRANET).",
"<b>Rejestr zmian systemowych</b> — każda zmiana wpływająca na system/proces/użytkowników.",
"<b>Repozytorium projektów</b> — SharePoint „PROJEKTY GF”; zakończone → folder OLD."],
details:`<h4>SharePoint „PROJEKTY GF”</h4>
<p>Adres: <code>gourmetfoods.sharepoint.com/sites/sfa_crm/</code>. Nowy folder = nazwa projektu + rok (np. „Projekt X 2025”). Domyślnie dostęp: Zespół Managerski i Zarząd; dostęp nadaje się przez „Zarządzaj dostępem”.</p>
<h4>Archiwizacja</h4><p>Po zakończeniu/porzuceniu projektu osoba nadzorująca przenosi folder do katalogu <b>OLD</b>.</p>`,
notes:"Rejestr decyzji ratuje projekt, gdy ktoś pyta „kto i kiedy to ustalił”." },
{ sec:"Domknięcie i utrzymanie", title:"Service Transition — przekazanie do RUN",
lead:"Uporządkowane przekazanie rozwiązania z projektu do bieżącego utrzymania.",
points:[
"Przekazujemy: odpowiedzialność, dokumentację, wiedzę, zasady obsługi zgłoszeń i dostępów.",
"Decyzję o zakończeniu podejmuje <b>Sponsor / Process Owner</b>."],
details:`<h4>Etap można zamknąć, gdy</h4><ul>
<li>dokumentacja przekazana,</li>
<li>zespół RUN potwierdził gotowość,</li>
<li>ustalono obsługę zgłoszeń, dostępy i odpowiedzialności,</li>
<li>określono, czy potrzebny monitoring/SLA,</li>
<li>właściciel biznesowy akceptuje przejście do RUN.</li></ul>
<p>Jeśli rozwiązanie dotyczy danych/raportów/integracji — sposób opisu konsultujemy z Data Governance.</p>`,
notes:"Bez Service Transition wiedza zostaje „w głowie” projektu — i znika po jego zakończeniu." },
{ sec:"Domknięcie i utrzymanie", title:"RUN — utrzymanie bieżące",
lead:"Po przekazaniu rozwiązanie żyje w trybie RUN.",
points:[
"RUN to: obsługa zgłoszeń, usuwanie błędów, monitoring, drobne usprawnienia, utrzymanie integracji, zarządzanie dostępami."],
details:`<p>RUN zapewnia ciągłość działania rozwiązania po zakończeniu wdrożenia projektowego. Duże nowe potrzeby wracają jako zmiany ad-hoc lub nowe projekty — nie „doklejamy” ich do RUN bez trybu.</p>`,
notes:"Granica RUN vs nowy projekt bywa płynna — pilnuj progu 10h i skali zmiany." },
{ sec:"Adoption", title:"Adoption — po co i kto (Center of Excellence)",
lead:"Wdrożenie liczy się dopiero, gdy ludzie realnie korzystają i pojawiają się korzyści.",
points:[
"Cel: potwierdzić realne użycie, wyeliminować stare metody, ocenić korzyści biznesowe.",
"Za adopcję przy podejściu scentralizowanym odpowiada <b>Center of Excellence (CoE)</b>."],
example:"Oczekiwania definiujemy konkretnie: „100% faktur w EOD”, „wszystkie zgłoszenia IT w Helpdesku”, „brak raportów w Excelu poza systemem”, „wszystkie działania sprzedażowe w CRM”.",
details:`<div class="box rule"><div class="t">▶ Zasada kluczowa</div>
Wdrożenie nie jest zakończone, dopóki: użytkownicy nie korzystają z systemu w codziennej pracy, stare metody nie zostały wyeliminowane, a korzyści nie zostały osiągnięte. Dlatego członek CoE w etapie transition nie jest angażowany w kolejne projekty.</div>`,
notes:"To zmienia myślenie: Go-Live to nie koniec, to początek adopcji." },
{ sec:"Adoption", title:"Adoption — mierniki i wskaźnik (1–5)",
lead:"Adopcję mierzymy liczbami; wskaźnik to średnia z trzech miar.",
points:[
"<b>% wykorzystania systemu</b> · <b>% eliminacji starych narzędzi</b> · <b>% realizacji ROI</b> → średnia = wskaźnik adopcji."],
details:`<h4>Wzory</h4>
<span class="formula">% Wykorzystania = użytkownicy aktywni / objęci transformacją × 100%</span>
<span class="formula">% Realizacji ROI = rzeczywiste oszczędności czasu / planowane × 100%</span>
<h4>Przykład</h4>
<p>Wykorzystanie 80% · eliminacja starych narzędzi 70% · ROI 65% → (80+70+65)/3 = <b>71,7% → ocena 4</b>.</p>
<h4>Skala 1–5</h4>
<table class="tbl"><tr><th>Ocena</th><th>Poziom adopcji</th></tr>
<tr><td>5</td><td>≥ 75%</td></tr><tr><td>4</td><td>60–74%</td></tr><tr><td>3</td><td>45–59%</td></tr>
<tr><td>2</td><td>30–44%</td></tr><tr><td>1</td><td>< 30%</td></tr></table>
<div class="box warn"><div class="t">▶ Warunek minimalny dla oceny 5</div>
wykorzystanie ≥ 70% · stare narzędzia ≤ 25% · ROI ≥ 60% — żeby wysoka średnia nie maskowała problemów.</div>`,
notes:"Pokaż przykład obliczenia na tablicy. Podkreśl warunek minimalny dla „5”." },
{ sec:"Adoption", title:"Adoption — szkolenia i certyfikacja",
lead:"Adopcję wspierają szkolenia z pełną rejestracją wyników (traceability).",
points:[
"Materiały i wyniki w e-learningu; zdana certyfikacja trafia na kartę pracownika w Odoo.",
"Test certyfikacyjny: do <b>5 dni roboczych</b> po szkoleniu."],
details:`<h4>Ścieżka certyfikacji</h4><ul>
<li>brak wykonania testu → manager zapewnia wykonanie w ciągu 2 dni roboczych,</li>
<li>niezdany test → ponowne zapoznanie z instrukcją i podejście w ciągu 4 dni roboczych,</li>
<li>jeśli <b>≥ 55% uczestników nie zda</b> → szkolenie uznaje się za nieskuteczne i powtarza.</li></ul>
<div class="box rule"><div class="t">▶ Nasze narzędzie</div>Grywalizacja (np. gra „Próg 10h”) jest częścią tej warstwy — z natychmiastowym feedbackiem i certyfikatem modułu.</div>`,
notes:"Połącz z grą i przyszłą Akademią Projektów. Traceability = dowód kompetencji." },
{ sec:"Adoption", title:"Center of Excellence — skład i zadania",
lead:"CoE to zespół kompetencyjny: standardy, wsparcie transformacji, adopcja, weryfikacja ROI.",
points:[
"Skład: liderzy transformacji, analitycy biznesowi, Data Governance, jakość danych, HR (zmiana), specjaliści kluczowych działów.",
"Zadania: standardy wdrożeń, projektowanie procesów, wsparcie managerów, monitoring adopcji, eskalacja barier."],
details:`<table class="tbl"><tr><th>Rola</th><th>Odpowiedzialność</th></tr>
<tr><td>Manager</td><td>operacyjna adopcja w zespole, egzekwowanie użycia i certyfikacji</td></tr>
<tr><td>CoE</td><td>model docelowy, plan adoption, analiza poziomu, działania naprawcze</td></tr></table>
<p>Właściciel treści etapu: Dyrektor IT + Dyrektor HR.</p>`,
notes:"CoE to „katalizator” zmiany — nie policja. Wspiera managerów, nie zastępuje ich." },
{ sec:"Zmiany i decyzje", title:"Zmiany ad-hoc vs projekty strategiczne",
lead:"Chronimy zasoby na inicjatywy kluczowe — bez blokowania drobnych, sensownych zmian.",
points:[
"Zmiany <b>>10h</b> wymagają zgody zarządu; <b>≤10h</b> w tygodniowym limicie ad-hoc.",
"Ad-hoc <b>nie może blokować</b> projektów strategicznych; wszystko na wspólnej roadmapie.",
"Tematy bez pełnej specyfikacji — wstrzymane do uzupełnienia."],
details:`<h4>RACI (skrót)</h4>
<table class="tbl"><tr><th>Kto</th><th>Rola</th></tr>
<tr><td>Właściciel biznesowy</td><td>inicjuje zgłoszenie, dostarcza dane, weryfikuje i zamyka</td></tr>
<tr><td>Zespół IT</td><td>ocena, estymacja, realizacja, dokumentacja i szkolenie</td></tr>
<tr><td>Dyrektor IT</td><td>nadzór nad procesem i tryb procedowania</td></tr>
<tr><td>Zarząd</td><td>zatwierdza tematy >10h i projekty strategiczne</td></tr></table>
<p>Zgłoszenia wpływają przez Help Desk; do specyfikacji można użyć agenta Copilot z pytaniami kontrolnymi.</p>`,
notes:"To ten sam temat, co gra „Próg 10h”. Możesz tu zrobić szybki quiz na sali." },
{ sec:"Podsumowanie", title:"Najczęstsze błędy — czego unikamy",
lead:"Kilka pułapek powtarza się w większości projektów.",
points:[
"Zbieranie „wymagań” bez analizy problemu.",
"Decydowanie „z góry”, z pominięciem Gemba.",
"Brak odniesienia do standardu (wszystko od zera).",
"Nieprecyzyjne User Stories → spór przy odbiorze.",
"Traktowanie Go-Live jako końca projektu (pominięta Adoption)."],
details:`<p>Antidotum jest w standardzie: problem przed rozwiązaniem, dane przed opinią, standard przed customizacją, User Stories przed startem IT, adopcja przed uznaniem projektu za zamknięty.</p>`,
notes:"Zapytaj uczestników, który błąd widzą u siebie najczęściej." },
{ sec:"Podsumowanie", title:"Złote zasady i gdzie szukać",
lead:"Pięć zasad do zapamiętania — i mapa materiałów po szkoleniu.",
cta:'<button class="cta-exam" data-goto-test>→ Przejdź do testu końcowego</button>',
points:[
"1. Najpierw <b>problem</b>, nie rozwiązanie. 2. <b>User Stories</b> to jedyna forma przekazania do IT.",
"3. <b>Próg 10h</b> i priorytet strategii. 4. Postęp mierzymy <b>kamieniami milowymi</b> (1–5).",
"5. Projekt kończy się <b>adopcją i korzyściami</b>, nie Go-Live."],
details:`<h4>Materiały</h4><ul>
<li>Kompendium: folder <code>Prowadzenie projektów\\</code> (Metodyka, Karta, KPI, Szkolenia).</li>
<li>Wzór karty: <code>01_Karta_Projektu\\Projekt_template.docx</code>.</li>
<li>Gra „Próg 10h”: <code>05_Gra_Szkoleniowa\\Prog_10h.html</code>.</li>
<li>Repozytorium projektów: SharePoint „PROJEKTY GF”.</li></ul>
<div class="box ex"><div class="t">▶ Wskazówka</div>Ta prezentacja jest też materiałem referencyjnym — użyj <b>wyszukiwarki</b> u góry, żeby szybko znaleźć temat (np. „adoption”, „Event Storming”, „Service Transition”).</div>`,
notes:"Zamknięcie + Q&A. Odeślij do gry i kompendium. Podziękuj." },
{ finalTest:true, sec:"Test końcowy", title:"Test końcowy — sprawdź wiedzę",
lead:"10 pytań z całego szkolenia. Odpowiedz na wszystkie, a potem kliknij „Pokaż wynik”. Próg zaliczenia: 70%.",
notes:"Test podsumowujący. Możesz zrobić go na sali (głosowanie) lub zadać jako samodzielny. Wynik przygotowuje do certyfikacji.",
test:[
{ q:"Zmiana ~12h w jednym module. Poprawny tryb?",
opts:[{t:">10h → zgoda zarządu (nadal ad-hoc)",ok:true},{t:"Ad-hoc w limicie, bez zarządu"},{t:"Projekt strategiczny (Fundation)"}],
why:"12h > 10h → zarząd; wąski zakres → wciąż ad-hoc. Nie każdy temat >10h to projekt." },
{ q:"Jedyna dopuszczalna forma przekazania wymagań do IT?",
opts:[{t:"User Stories + kryteria akceptacji",ok:true},{t:"E-mail z opisem"},{t:"Ustalenia na korytarzu"}],
why:"IT nie startuje bez User Stories i kryteriów akceptacji (Definition of Done)." },
{ q:"Zrealizowano 6 z 8 kamieni zgodnie z planem (75%). Ocena postępu?",
opts:[{t:"4 (70–84%)",ok:true},{t:"5 (≥85%)"},{t:"3 (55–69%)"}],
why:"Skala: 5=≥85%, 4=70–84%, 3=55–69%, 2=35–54%, 1=<35%." },
{ q:"Wykorzystanie 80%, eliminacja starych narzędzi 70%, ROI 65%. Wskaźnik adopcji?",
opts:[{t:"≈71,7% → ocena 4",ok:true},{t:"80% → ocena 5"},{t:"65% → ocena 3"}],
why:"(80+70+65)/3 = 71,7% → ocena 4. Wskaźnik to średnia z trzech miar." },
{ q:"Gemba Walk to:",
opts:[{t:"Obserwacja realnej pracy w miejscu jej wykonywania",ok:true},{t:"Ankieta wśród pracowników"},{t:"Analiza dokumentacji procesu"}],
why:"Patrzymy, co ludzie faktycznie robią (Muda) — oceniamy proces, nie pracownika." },
{ q:"Kiedy projekt jest naprawdę zakończony?",
opts:[{t:"Gdy jest realna adopcja i osiągnięte korzyści",ok:true},{t:"W momencie Go-Live"},{t:"Po przekazaniu do RUN"}],
why:"Go-Live i RUN to etapy — projekt kończy adopcja i korzyści biznesowe." },
{ q:"Kto decyduje o zakończeniu etapu Service Transition?",
opts:[{t:"Sponsor / Process Owner",ok:true},{t:"Zespół RUN"},{t:"Data Governance"}],
why:"Zespół RUN potwierdza gotowość, ale formalną decyzję podejmuje właściciel biznesowy." },
{ q:"Test certyfikacyjny po szkoleniu należy wykonać w ciągu:",
opts:[{t:"5 dni roboczych",ok:true},{t:"14 dni"},{t:"tego samego dnia"}],
why:"Do 5 dni roboczych; brak testu → manager zapewnia wykonanie w 2 dni." },
{ q:"Pilna zmiana ad-hoc koliduje z projektem strategicznym. Priorytet?",
opts:[{t:"Projekt strategiczny — ad-hoc go nie blokuje",ok:true},{t:"Ad-hoc, bo pilne i <10h"},{t:"To, co zgłoszono wcześniej"}],
why:"Zasada 2: ad-hoc nie może blokować strategii; wszystko na wspólnej roadmapie." },
{ q:"W Event Stormingu zdarzenia opisujemy:",
opts:[{t:"W czasie przeszłym, bez języka technicznego",ok:true},{t:"Jako listę zadań do zrobienia"},{t:"Nazwami tabel w bazie"}],
why:"Np. „Zamówienie opłacone”. Ciąg zdarzeń ujawnia braki i integracje między systemami." }
] }
];
/* ===== PYTANIA SPRAWDZAJĄCE (mini-quiz) — klucz = dokładny tytuł slajdu.
Dodanie pytania: dopisz wpis { "Tytuł slajdu": {q, opts:[{t,ok?}], why} }. ===== */
const QUIZ = {
"Czym jest projekt — a co nim NIE jest":{
q:"Zmiana filtra w jednym raporcie, jeden obszar, niskie ryzyko — to:",
opts:[{t:"Automatyzacja / zmiana ad-hoc",ok:true},{t:"Projekt strategiczny z Fundation"},{t:"Zawsze wymaga zarządu"}],
why:"<b>Automatyzacja.</b> Wąski zakres i jeden obszar = odrębna, szybka ścieżka — bez pełnego trybu projektowego."},
"Role w projekcie":{
q:"Kto podejmuje kluczowe decyzje biznesowe i decyduje o starcie/zamknięciu projektu?",
opts:[{t:"Sponsor Projektu",ok:true},{t:"Kierownik Projektu"},{t:"Zespół IT"}],
why:"<b>Sponsor.</b> Kierownik organizuje pracę i postęp, ale decyzje biznesowe (start, priorytet, zamknięcie) należą do Sponsora."},
"Trzy tryby zgłoszenia — i próg 10h":{
q:"Zgłoszenie ~12h pracy, wąski zakres, jeden moduł. Co robisz?",
opts:[{t:"Zmiana ad-hoc, ale >10h → zgoda zarządu",ok:true},{t:"Realizuję w limicie ad-hoc bez zarządu"},{t:"Zakładam projekt strategiczny (Fundation)"}],
why:"<b>>10h → zgoda zarządu.</b> Zakres wąski, więc to nadal ad-hoc — ale próg 10h wymaga akceptacji zarządu. Nie każdy temat >10h to projekt."},
"Filar 2 — Gemba Walk":{
q:"Na czym polega Gemba Walk?",
opts:[{t:"Idę i obserwuję, jak proces działa naprawdę",ok:true},{t:"Pytam zespół „jak to robicie?”"},{t:"Analizuję dokumentację procesu"}],
why:"<b>Obserwacja w miejscu pracy.</b> Patrzymy, co ludzie faktycznie robią (marnotrawstwo/Muda) — oceniamy proces, nie pracownika."},
"Filar 3 — Event Storming":{
q:"Jak opisujemy zdarzenia w Event Stormingu?",
opts:[{t:"W czasie przeszłym, np. „Zamówienie opłacone”",ok:true},{t:"Językiem technicznym (nazwy tabel)"},{t:"Jako lista zadań do zrobienia"}],
why:"<b>Czas przeszły, bez języka technicznego.</b> Proces to ciąg zdarzeń — ujawnia braki i integracje między systemami."},
"Filar 4 — User Stories + kryteria akceptacji":{
q:"Kiedy IT może rozpocząć prace?",
opts:[{t:"Po zatwierdzonych User Stories + kryteriach akceptacji",ok:true},{t:"Gdy biznes ustnie opisze potrzebę"},{t:"Po decyzji Kierownika Projektu"}],
why:"<b>Dopiero po User Stories + kryteriach akceptacji.</b> To jedyna dopuszczalna forma przekazania wymagań do IT."},
"Karta projektu (Projekt_template)":{
q:"Który cel jest poprawnie zapisany?",
opts:[{t:"„Skrócić czas obsługi reklamacji o 30% do końca Q3”",ok:true},{t:"„Poprawić obsługę reklamacji”"},{t:"„Zrobić coś z reklamacjami”"}],
why:"<b>Cel = co poprawiamy + ile + do kiedy + miernik.</b> Cel bez miary jest życzeniem, nie celem."},
"Ocena postępu — KPI i skala 1–5":{
q:"Realizacja kamieni milowych = 80% planu. Jaka ocena postępu?",
opts:[{t:"4 (70–84%)",ok:true},{t:"5 (≥85%)"},{t:"3 (55–69%)"}],
why:"<b>Ocena 4.</b> Skala: 5 = ≥85%, 4 = 70–84%, 3 = 55–69%, 2 = 35–54%, 1 = <35%."},
"Spotkania projektowe":{
q:"Ile powinno trwać spotkanie statusowe?",
opts:[{t:"15–30 minut",ok:true},{t:"30–90 minut"},{t:"do 60 minut co 6–8 tygodni"}],
why:"<b>15–30 min.</b> To krótka synchronizacja — nie warsztat (30–90 min) ani Project Review (30–60 min, co 6–8 tyg.)."},
"Service Transition — przekazanie do RUN":{
q:"Kto podejmuje decyzję o zakończeniu etapu Service Transition?",
opts:[{t:"Sponsor / Process Owner",ok:true},{t:"Zespół RUN"},{t:"Data Governance"}],
why:"<b>Sponsor / Process Owner.</b> Zespół RUN potwierdza gotowość, ale formalną decyzję o przejściu do RUN podejmuje właściciel biznesowy."},
"Adoption — mierniki i wskaźnik (1–5)":{
q:"Wykorzystanie 80%, eliminacja starych narzędzi 70%, ROI 65%. Wskaźnik adopcji?",
opts:[{t:"≈71,7% → ocena 4",ok:true},{t:"80% → ocena 5"},{t:"65% → ocena 3"}],
why:"<b>(80+70+65)/3 = 71,7% → ocena 4.</b> Wskaźnik adopcji to średnia z trzech miar."},
"Adoption — szkolenia i certyfikacja":{
q:"W jakim czasie należy wykonać test certyfikacyjny po szkoleniu?",
opts:[{t:"Do 5 dni roboczych",ok:true},{t:"Do 14 dni"},{t:"Tego samego dnia"}],
why:"<b>Do 5 dni roboczych.</b> Brak testu → manager zapewnia wykonanie w 2 dni; niezdany → ponowne podejście w 4 dni."},
"Zmiany ad-hoc vs projekty strategiczne":{
q:"Pilna zmiana ad-hoc ~8h koliduje z trwającym projektem strategicznym. Co ma priorytet?",
opts:[{t:"Projekt strategiczny — ad-hoc nie może go blokować",ok:true},{t:"Ad-hoc, bo pilne i <10h"},{t:"Zawsze to, co zgłoszone wcześniej"}],
why:"<b>Projekt strategiczny.</b> Zasada 2: ad-hoc nie może blokować strategii; ad-hoc planujemy w limicie bez kolizji."},
"Najczęstsze błędy — czego unikamy":{
q:"Który z poniższych to typowy błąd wg standardu?",
opts:[{t:"Traktowanie Go-Live jako końca projektu",ok:true},{t:"Mierzenie postępu kamieniami milowymi"},{t:"Przekazanie wymagań przez User Stories"}],
why:"<b>Go-Live to nie koniec.</b> Projekt kończy się adopcją i korzyściami — pominięcie etapu Adoption to częsty błąd."},
"Po co nam standard prowadzenia projektów?":{
q:"Główny cel firmowego standardu projektów to:",
opts:[{t:"Jednolite zbieranie, analiza i przekazywanie wymagań (mniej błędów, niższe koszty)",ok:true},{t:"Zastąpienie PMI/PRINCE2 pełną metodyką"},{t:"Narzucenie jednego narzędzia do zadań"}],
why:"<b>Spójny sposób pracy.</b> Standard nie narzuca pełnej metodyki ani konkretnego narzędzia — porządkuje uruchamianie, prowadzenie i domykanie."},
"Cykl życia projektu — mapa":{
q:"Kiedy projekt jest naprawdę „zrobiony”?",
opts:[{t:"Gdy użytkownicy korzystają, stare metody zniknęły, a korzyści są osiągnięte",ok:true},{t:"W momencie Go-Live"},{t:"Po przekazaniu do RUN"}],
why:"<b>Po adopcji.</b> Go-Live i RUN to etapy — projekt kończy realna adopcja i korzyści biznesowe."},
"Uruchomienie projektu":{
q:"Od czego zaczynamy projekt?",
opts:[{t:"Od problemu biznesowego i wskazania ról (Sponsor, Process Owner, KP)",ok:true},{t:"Od wyboru rozwiązania technicznego"},{t:"Od zakupu licencji"}],
why:"<b>Od problemu, nie rozwiązania.</b> Start od rozwiązania to najczęstszy błąd. Wskazujemy też Sponsora, Beneficjenta i Kierownika."},
"Etap Fundation — analiza przedwdrożeniowa":{
q:"Co jest wyjściem z etapu Fundation?",
opts:[{t:"Opis procesu, dane, rekomendacja + decyzja Sponsora: realizować/odłożyć/odrzucić",ok:true},{t:"Gotowy system produkcyjny"},{t:"Podpisana umowa z dostawcą"}],
why:"<b>Rekomendacja + decyzja Sponsora.</b> Fundation kończy się decyzją, nie wdrożeniem."},
"4 Filary Analizy — przegląd":{
q:"Czy w każdym projekcie trzeba użyć wszystkich 4 filarów?",
opts:[{t:"Nie — dobieramy metody do problemu (jedną lub kilka)",ok:true},{t:"Tak, zawsze wszystkie cztery"},{t:"Filary są opcjonalne i rzadko używane"}],
why:"<b>Dobór do problemu.</b> Ale niezależnie od metod wymagania do IT przekazujemy wyłącznie przez User Stories + kryteria akceptacji."},
"Filar 1 — Modelowanie referencyjne":{
q:"Od czego zaczynamy modelowanie referencyjne?",
opts:[{t:"Od standardu (np. Odoo), a nie od „jak robimy teraz”",ok:true},{t:"Od pełnego odwzorowania obecnego procesu"},{t:"Od customizacji pod każdy dział"}],
why:"<b>Start od standardu.</b> Customizacja musi być uzasadniona finansowo (koszt vs wartość) — inaczej rośnie dług technologiczny."},
"Minimalny opis projektu":{
q:"Bez którego elementu projekt nie jest gotowy do startu?",
opts:[{t:"Uzasadnienia biznesowego / celu",ok:true},{t:"Loga na prezentacji"},{t:"Wyboru koloru w systemie"}],
why:"<b>Uzasadnienie biznesowe.</b> Minimalny opis: cel, zakres/problem, beneficjent, uzasadnienie, priorytety/kamienie."},
"Narzędzie — moduł Projekty w Odoo":{
q:"Co MINIMUM musi być widoczne w narzędziu projektowym?",
opts:[{t:"Zadania, osoby, terminy, kamienie milowe, status, blokady",ok:true},{t:"Tylko lista zadań"},{t:"Wyłącznie budżet"}],
why:"<b>Pełna widoczność postępu i blokad.</b> Domyślne narzędzie to Odoo (moduł Projekty)."},
"Kamienie milowe":{
q:"Czym różni się kamień milowy od zwykłego zadania?",
opts:[{t:"Kamień opisuje osiągnięty rezultat, nie czynność",ok:true},{t:"Niczym — to synonimy"},{t:"Kamień to po prostu najdłuższe zadanie"}],
why:"<b>Rezultat, nie czynność.</b> Przykłady: akceptacja zakresu, zakończenie testów, Go-Live, przekazanie do RUN."},
"Planowanie kolejnego okresu":{
q:"Jaki jest domyślny horyzont planowania kolejnego okresu?",
opts:[{t:"Najbliższe 3 tygodnie",ok:true},{t:"Najbliższy tydzień"},{t:"Najbliższy kwartał"}],
why:"<b>3 tygodnie.</b> Krótki horyzont utrzymuje projekt w ruchu i szybko ujawnia odchylenia od planu kamieni."},
"Rejestry i repozytorium":{
q:"Gdzie trafiają zakończone lub porzucone projekty w SharePoint „PROJEKTY GF”?",
opts:[{t:"Do folderu OLD",ok:true},{t:"Do kosza"},{t:"Zostają w głównym katalogu"}],
why:"<b>Folder OLD.</b> Osoba nadzorująca archiwizuje projekt, przenosząc folder do OLD. Istotne decyzje idą do rejestru decyzji."},
"RUN — utrzymanie bieżące":{
q:"Duża nowa potrzeba pojawia się w trybie RUN. Co robimy?",
opts:[{t:"Wraca jako zmiana ad-hoc lub nowy projekt (wg trybu)",ok:true},{t:"„Doklejamy” ją do RUN bez trybu"},{t:"Ignorujemy — RUN tego nie obejmuje"}],
why:"<b>Wraca jako ad-hoc/projekt.</b> RUN to utrzymanie bieżące; większych zmian nie doklejamy bez właściwego trybu (i progu 10h)."},
"Adoption — po co i kto (Center of Excellence)":{
q:"Dlaczego członek CoE w etapie transition nie wchodzi w kolejne projekty?",
opts:[{t:"Bo wdrożenie nie jest zakończone, dopóki nie ma realnej adopcji i korzyści",ok:true},{t:"Bo brakuje mu kompetencji"},{t:"Bo tak jest taniej"}],
why:"<b>Adopcja to część projektu.</b> Wdrożenie kończy realne użycie, eliminacja starych metod i korzyści — nie Go-Live."},
"Center of Excellence — skład i zadania":{
q:"Kto odpowiada za operacyjną adopcję w swoim zespole?",
opts:[{t:"Manager zespołu",ok:true},{t:"Wyłącznie CoE"},{t:"Dział IT"}],
why:"<b>Manager.</b> Egzekwuje użycie systemu i certyfikacje; CoE projektuje model docelowy, plan adoption i działania naprawcze."},
"Złote zasady i gdzie szukać":{
q:"Jedyna dopuszczalna forma przekazania wymagań do IT to:",
opts:[{t:"User Stories + kryteria akceptacji",ok:true},{t:"E-mail z opisem potrzeby"},{t:"Ustalenia na korytarzu"}],
why:"<b>User Stories + kryteria akceptacji.</b> Jedna z pięciu złotych zasad — IT nie startuje bez nich."},
"Jak prowadzimy projekty w Gourmet Foods":{
q:"Co obejmuje cykl życia projektu w Gourmet Foods?",
opts:[{t:"Fundation → Realizacja → Service Transition → Adoption → RUN",ok:true},{t:"Tylko analiza i wdrożenie"},{t:"Zakup systemu i Go-Live"}],
why:"<b>Pięć etapów.</b> Od analizy (Fundation) po utrzymanie (RUN), z adopcją jako warunkiem uznania projektu za zakończony."},
"Plan szkolenia":{
q:"Który obszar świadomie NIE jest częścią tego standardu?",
opts:[{t:"Szczegółowa metodyka PMI/PRINCE2",ok:true},{t:"Cykl życia projektu"},{t:"Role i 4 filary analizy"}],
why:"<b>PMI/PRINCE2.</b> Standard nie narzuca pełnej metodyki — uczymy firmowego, uproszczonego podejścia."}
};
DECK.forEach(s=>{ if(QUIZ[s.title]) s.quiz = QUIZ[s.title]; });
/* ===== KAFELKI „W PRAKTYCE” (mikro-case) — klucz = dokładny tytuł slajdu ===== */
const PRACTICE = {
"Czym jest projekt — a co nim NIE jest":
"„Dodanie pola w formularzu” zgłoszono jako projekt. Po ocenie: 1 obszar, ~3h, niskie ryzyko → to <b>automatyzacja</b>, zrobiona w tygodniowym limicie ad-hoc.",
"Etap Fundation — analiza przedwdrożeniowa":
"Fundation pokazał, że „problem z fakturami” to w 80% braki w danych klienta, nie w systemie → zamiast kosztownej zmiany IT wystarczyła akcja porządkowania danych.",
"Filar 2 — Gemba Walk":
"Podczas Gemba w magazynie okazało się, że pracownik 3× dziennie przepisuje dane z WMS do Excela — czego nie było w żadnym opisie procesu.",
"Filar 4 — User Stories + kryteria akceptacji":
"Historyjka „chcę raport sprzedaży” bez kryteriów skończyła się 3 rundami poprawek. Dodanie DoD (kolumny, filtry, format) skróciło odbiór do jednego podejścia.",
"Karta projektu (Projekt_template)":
"Kartę „usprawnić reklamacje” odesłano do autora — brakowało miernika. Po zmianie na „−30% czasu obsługi do końca Q3” Sponsor mógł podjąć decyzję.",
"Trzy tryby zgłoszenia — i próg 10h":
"Handlowiec prosi o „szybką zmianę” w CRM, IT szacuje 14h. Mimo słowa „szybka” — <b>>10h → wniosek do zarządu</b>, nie piątkowy limit ad-hoc.",
"Ocena postępu — KPI i skala 1–5":
"Projekt z 8 kamieni zrealizował 6 zgodnie z planem → 75% → <b>ocena 4</b>. Status na Project Review: „na dobrych torach, drobne opóźnienia”.",
"Spotkania projektowe":
"Status trwał 75 min, bo wchodził w projektowanie rozwiązania. Rozdzielenie na 20-min status + osobny warsztat odblokowało zespół.",
"Service Transition — przekazanie do RUN":
"Zespół RUN nie przyjął rozwiązania — brakowało opisu obsługi zgłoszeń. Uzupełnienie dokumentacji przed zamknięciem etapu zapobiegło „sierocie” w utrzymaniu.",
"Adoption — mierniki i wskaźnik (1–5)":
"Zespół chwalił się „80% logowań”, ale 40% userów wciąż trzymało dane w Excelu → wskaźnik adopcji spadł, bo liczy też eliminację starych narzędzi i ROI.",
"Adoption — szkolenia i certyfikacja":
"Na szkoleniu 60% nie zdało testu (>55%) → uznano je za nieskuteczne i powtórzono z lepszymi przykładami. Wyniki trafiły na karty pracowników.",
"Zmiany ad-hoc vs projekty strategiczne":
"Dwie „pilne” zmiany ad-hoc w tygodniu wstrzymały konektor Odoo⇄ASB. Po wpisaniu obu na wspólną roadmapę priorytet wrócił do projektu strategicznego."
};
DECK.forEach(s=>{ if(PRACTICE[s.title]) s.practice = PRACTICE[s.title]; });
/* ----------------------------- SILNIK ----------------------------- */
const deck = document.getElementById('deck');
let idx = 0;
function slideHTML(s, i){
if(s.cover){
const notes = s.notes ? `<aside class="notes"><div class="t">Notatki prelegenta</div><p>${s.notes}</p></aside>` : '';
return `<section class="slide cover" data-i="${i}">
<span class="badge">${esc(s.sec)}</span>
<div class="brand-mark">GF</div>
<h1>${esc(s.title)}</h1>
<div class="sub">${esc(s.subtitle||'')}</div>
<div class="life">
<span>Fundation</span><i>→</i><span>Realizacja</span><i>→</i><span>Service Transition</span><i>→</i><span>Adoption</span><i>→</i><span>RUN</span>
</div>
<div class="meta">
<div>Prowadzący: <b>……………………</b></div>
<div>Data: <b>……………………</b></div>
<div>Akademia Projektów GF · <b>v1.0</b></div>
</div>
<div class="hint">Nawigacja: strzałki ← → lub spacja · „Szczegóły” rozwija drill-down · góra: wyszukiwarka i spis</div>
${notes}
</section>`;
}
if(s.finalTest) return examSlideHTML(s, i);
const pts = (s.points||[]).map(p=>`<li>${p}</li>`).join('');
const ex = s.example ? `<div class="box ex"><div class="t">▶ Przykład</div>${s.example}</div>` : '';
const dd = s.details ? `<details class="dd"><summary>Szczegóły i przykłady</summary><div class="inner">${s.details}</div></details>` : '';
const notes = s.notes ? `<aside class="notes"><div class="t">Notatki prelegenta</div><p>${s.notes}</p></aside>` : '';
const tip = s.practice ? `<div class="box tip"><div class="t">▶ W praktyce</div>${s.practice}</div>` : '';
const quiz = s.quiz ? renderQuiz(s.quiz) : '';
const hasAside = !!(s.example || s.details || s.practice || s.quiz);
return `<section class="slide ${hasAside?'':'no-aside'}" data-i="${i}">
<div class="slide-main">
<span class="kicker">${esc(s.sec)}</span>
<h2>${esc(s.title)}</h2>
${s.lead?`<p class="lead">${s.lead}</p>`:''}
${pts?`<ul class="pts">${pts}</ul>`:''}
${s.cta?`<div class="main-cta">${s.cta}</div>`:''}
</div>
<div class="slide-aside">${ex}${dd}${tip}${quiz}</div>
${notes}
</section>`;
}
function renderQuiz(qz){
const opts = qz.opts.map(o=>`<button class="quiz-opt" data-ok="${o.ok?1:0}">${o.t}</button>`).join('');
return `<details class="quiz"><summary>✓ Pytanie sprawdzające — kliknij, aby otworzyć</summary><div class="qbody">
<div class="qq">${qz.q}</div>
<div class="qhint">🙈 Treść slajdu jest teraz ukryta — wybierz odpowiedź samodzielnie.</div>
<div class="qopts">${opts}</div>
<div class="why">${qz.why||''}</div>
</div></details>`;
}
function examSlideHTML(s, i){
const qs = s.test.map((t,qi)=>{
const opts = t.opts.map(o=>`<button class="exam-opt" data-ok="${o.ok?1:0}">${o.t}</button>`).join('');
return `<div class="exam-q" data-qi="${qi}">
<div class="n">Pytanie ${qi+1} / ${s.test.length}</div>
<div class="q">${t.q}</div>
<div class="exam-opts">${opts}</div>
<div class="exam-why">${t.why||''}</div>
</div>`;
}).join('');
const notes = s.notes ? `<aside class="notes"><div class="t">Notatki prelegenta</div><p>${s.notes}</p></aside>` : '';
return `<section class="slide no-aside" data-i="${i}">
<div class="slide-main">
<span class="kicker">${esc(s.sec)}</span>
<h2>${esc(s.title)}</h2>
${s.lead?`<p class="lead">${s.lead}</p>`:''}
<div class="exam">${qs}</div>
<div class="exam-actions">
<button class="cta-exam" id="examShow">Pokaż wynik</button>
<button class="cta-exam ghost" id="examReset">↻ Od nowa</button>
<span class="exam-progress" id="examProg">Odpowiedziano: 0 / ${s.test.length}</span>
</div>
<div class="exam-result" id="examResult"></div>
${notes}
</div>
</section>`;
}
deck.innerHTML = DECK.map(slideHTML).join('');
const slides = [...deck.querySelectorAll('.slide')];
document.getElementById('tot').textContent = slides.length;
/* mini-quiz: klik w odpowiedź → feedback + wyjaśnienie + licznik wyniku */
const QS = { answered:0, correct:0, total:DECK.filter(s=>s.quiz).length };
function updateQScore(){
document.getElementById('qc').textContent = QS.correct;
document.getElementById('qa').textContent = QS.answered;
document.getElementById('qscore').title = `Quiz: ${QS.correct} poprawnych / ${QS.answered} odpowiedzianych (z ${QS.total})`;
}
updateQScore();
deck.addEventListener('click', e=>{
const b = e.target.closest('.quiz-opt'); if(!b || b.disabled) return;
const quiz = b.closest('.quiz');
quiz.querySelectorAll('.quiz-opt').forEach(x=>{
x.disabled = true;
if(x.dataset.ok==='1'){ x.classList.add('ok'); x.insertAdjacentHTML('beforeend','<span class="mk">✔</span>'); }
});
const ok = b.dataset.ok==='1';
if(!ok){ b.classList.add('bad'); b.insertAdjacentHTML('beforeend','<span class="mk">✕</span>'); }
const why = quiz.querySelector('.why'); if(why) why.classList.add('show');
quiz.dataset.answered = '1'; quiz.classList.add('done');
const slide = quiz.closest('.slide'); if(slide) slide.classList.remove('quiz-open'); // odsłoń treść do nauki
QS.answered++; if(ok) QS.correct++; updateQScore();
});
/* otwarcie panelu pytania → rozmyj treść główną slajdu; zamknięcie lub odpowiedź → odsłoń */
deck.querySelectorAll('details.quiz').forEach(d=>{
d.addEventListener('toggle', ()=>{
const slide = d.closest('.slide'); if(!slide) return;
if(d.open && d.dataset.answered!=='1') slide.classList.add('quiz-open');
else slide.classList.remove('quiz-open');
});
});
/* ----- TEST KOŃCOWY ----- */
const examEl = deck.querySelector('.exam');
if(examEl){
const EX = { correct:0, answered:new Set(), total:examEl.querySelectorAll('.exam-q').length };
deck.addEventListener('click', e=>{
const o = e.target.closest('.exam-opt'); if(!o || o.disabled) return;
const q = o.closest('.exam-q'); const qi = q.dataset.qi;
if(EX.answered.has(qi)) return;
EX.answered.add(qi);
q.querySelectorAll('.exam-opt').forEach(x=>{
x.disabled = true;
if(x.dataset.ok==='1'){ x.classList.add('ok'); x.insertAdjacentHTML('beforeend','<span class="mk">✔</span>'); }
});
const ok = o.dataset.ok==='1';
if(!ok){ o.classList.add('bad'); o.insertAdjacentHTML('beforeend','<span class="mk">✕</span>'); }
if(ok) EX.correct++;
const why = q.querySelector('.exam-why'); if(why) why.classList.add('show');
document.getElementById('examProg').textContent = `Odpowiedziano: ${EX.answered.size} / ${EX.total}`;
});
document.getElementById('examShow').onclick = ()=>{
const n = EX.total, c = EX.correct, pct = Math.round(c/n*100);
const pass = pct >= 70;
const ocena = pct>=90?5 : pct>=70?4 : pct>=50?3 : pct>=30?2 : 1;
const box = pass ? 'ex' : 'warn';
const tag = pass ? '✔ Test zaliczony' : '✕ Test niezaliczony';
const msg = pass
? 'Gratulacje — próg 70% osiągnięty. Możesz przystąpić do certyfikacji.'
: (EX.answered.size < n ? `Odpowiedziano na ${EX.answered.size}/${n} pytań. Uzupełnij brakujące i spróbuj ponownie.` : 'Próg zaliczenia to 70% — wróć do slajdów i podejdź jeszcze raz.');
document.getElementById('examResult').innerHTML =
`<div class="box ${box}"><div class="t">${tag}</div>
<div class="big">${c}/${n} <span style="font-size:16px;color:var(--muted)">(${pct}%) · ocena ${ocena}/5</span></div>
<p style="margin-top:6px">${msg}</p></div>`;
document.getElementById('examResult').scrollIntoView({behavior:'smooth',block:'nearest'});
};
document.getElementById('examReset').onclick = ()=>{
EX.correct = 0; EX.answered.clear();
examEl.querySelectorAll('.exam-q').forEach(q=>{
q.querySelectorAll('.exam-opt').forEach(x=>{ x.disabled=false; x.classList.remove('ok','bad'); const m=x.querySelector('.mk'); if(m) m.remove(); });
const why=q.querySelector('.exam-why'); if(why) why.classList.remove('show');
});
document.getElementById('examProg').textContent = `Odpowiedziano: 0 / ${EX.total}`;
document.getElementById('examResult').innerHTML = '';
};
}
function show(n){
idx = Math.max(0, Math.min(slides.length-1, n));
slides.forEach((el,i)=>el.classList.toggle('active', i===idx));
document.getElementById('cur').textContent = idx+1;
document.getElementById('progfill').style.width = ((idx+1)/slides.length*100)+'%';
document.getElementById('prev').disabled = idx===0;
document.getElementById('next').disabled = idx===slides.length-1;
window.scrollTo({top:0,behavior:'smooth'});
}
function goto(n, openDetails){
show(n);
if(openDetails){ const d = slides[idx].querySelector('details.dd'); if(d) d.open = true; }
}
document.getElementById('prev').onclick = ()=>show(idx-1);
document.getElementById('next').onclick = ()=>show(idx+1);
document.addEventListener('keydown', e=>{
if(document.getElementById('overlay').classList.contains('show')) { if(e.key==='Escape') closeOverlay(); return; }
if(e.target.tagName==='INPUT') return;
if(e.key==='ArrowRight'||e.key===' '||e.key==='PageDown'){ e.preventDefault(); show(idx+1); }
if(e.key==='ArrowLeft'||e.key==='PageUp'){ e.preventDefault(); show(idx-1); }
if(e.key==='Home') show(0);
if(e.key==='End') show(slides.length-1);
});
/* presenter mode */
document.getElementById('btnPres').onclick = function(){
document.body.classList.toggle('presenter');
this.classList.toggle('on', document.body.classList.contains('presenter'));
};
/* print: rozwiń wszystkie details, potem przywróć */
let printOpen = [];
document.getElementById('btnPrint').onclick = ()=>window.print();
window.addEventListener('beforeprint', ()=>{
printOpen = [...deck.querySelectorAll('details')].map(d=>d.open);
deck.querySelectorAll('details').forEach(d=>d.open=true);
});
window.addEventListener('afterprint', ()=>{
deck.querySelectorAll('details').forEach((d,i)=>d.open=printOpen[i]);
});
/* ----- OVERLAY: spis treści / wyniki wyszukiwania ----- */
const overlay = document.getElementById('overlay');
const ovBody = document.getElementById('ovBody');
function closeOverlay(){ overlay.classList.remove('show'); }
document.getElementById('ovClose').onclick = closeOverlay;
overlay.addEventListener('click', e=>{ if(e.target===overlay) closeOverlay(); });
document.getElementById('btnToc').onclick = ()=>{
const secs = {};
DECK.forEach((s,i)=>{ (secs[s.sec] ??= []).push({s,i}); });
let html = `<h3>Spis treści</h3><p style="color:var(--muted)">Kliknij, aby przejść do slajdu.</p>`;
for(const [sec, arr] of Object.entries(secs)){
html += `<div class="toc-sec"><div class="h">${esc(sec)}</div><div class="toc-grid">` +
arr.map(({s,i})=>`<button class="toc-item" data-go="${i}">${esc(s.title)}<small>Slajd ${i+1}</small></button>`).join('') +
`</div></div>`;
}
ovBody.innerHTML = html;
ovBody.querySelectorAll('[data-go]').forEach(b=>b.onclick=()=>{ closeOverlay(); goto(+b.dataset.go); });
overlay.classList.add('show');
};
/* ----- WYSZUKIWARKA ----- */
const INDEX = DECK.map((s,i)=>{
const raw = [s.sec, s.title, s.lead, ...(s.points||[]), s.example||'', s.details||''].join(' ');
const text = raw.replace(/<[^>]+>/g,' ').replace(/\s+/g,' ').trim();
return { i, sec:s.sec, title:s.title, text, low:text.toLowerCase(), inDetails:(s.details||'').replace(/<[^>]+>/g,' ').toLowerCase() };
});
const qEl = document.getElementById('q');
let tmr=null;
qEl.addEventListener('input', ()=>{ clearTimeout(tmr); tmr=setTimeout(runSearch, 130); });
qEl.addEventListener('keydown', e=>{ if(e.key==='Escape'){ qEl.value=''; closeOverlay(); } });
function snippet(text, low, q){
const p = low.indexOf(q); if(p<0) return esc(text.slice(0,120))+'…';
const a = Math.max(0, p-45), b = Math.min(text.length, p+q.length+70);
const seg = (a>0?'…':'') + text.slice(a,b) + (b<text.length?'…':'');
const re = new RegExp('('+q.replace(/[.*+?^${}()|[\]\\]/g,'\\$&')+')','ig');
return esc(seg).replace(new RegExp('('+q.replace(/[.*+?^${}()|[\]\\]/g,'\\$&')+')','ig'), '<mark>$1</mark>');
}
function runSearch(){
const q = qEl.value.trim().toLowerCase();
if(q.length < 2){ closeOverlay(); return; }
const hits = INDEX.filter(r=>r.low.includes(q));
let html = `<h3>Wyniki wyszukiwania — „${esc(qEl.value.trim())}”</h3>`;
if(!hits.length){ html += `<p class="empty">Brak trafień. Spróbuj innego słowa (np. „KPI”, „Sponsor”, „RUN”).</p>`; }
else{
html += `<p style="color:var(--muted)">${hits.length} slajd(ów). Kliknij, aby przejść.</p><div class="res">` +
hits.map(r=>{
const inDet = r.inDetails.includes(q);
return `<button data-go="${r.i}" data-det="${inDet?1:0}">
<div class="rk">${esc(r.sec)} · Slajd ${r.i+1}${inDet?' · w szczegółach':''}</div>
<div class="rt">${esc(r.title)}</div>
<div class="rs">${snippet(r.text, r.low, q)}</div></button>`;
}).join('') + `</div>`;
}
ovBody.innerHTML = html;
ovBody.querySelectorAll('[data-go]').forEach(b=>b.onclick=()=>{ closeOverlay(); goto(+b.dataset.go, b.dataset.det==='1'); });
overlay.classList.add('show');
}
/* ----- UKŁADY (przełączane, rozszerzalne) ----- */
/* Dodanie nowego układu: 1) dopisz blok CSS body[data-layout='NAZWA'],
2) dodaj tu wpis {id:'NAZWA', label:'...'} — reszta działa automatycznie. */
const LAYOUTS = [
{ id:'two', label:'Układ: 2 kolumny' },
{ id:'flow', label:'Układ: klasyczny' },
{ id:'wide', label:'Układ: szeroki' },
{ id:'stage', label:'Układ: pełny ekran' }
];
const DEFAULT_LAYOUT = 'two';
const layEl = document.getElementById('lay');
layEl.innerHTML = LAYOUTS.map(l=>`<option value="${l.id}">${l.label}</option>`).join('');
function setLayout(id){
if(!LAYOUTS.some(l=>l.id===id)) id = DEFAULT_LAYOUT;
document.body.dataset.layout = id;
layEl.value = id;
try{ localStorage.setItem('gf_deck_layout', id); }catch(e){}
}
let startLay = DEFAULT_LAYOUT;
try{ startLay = localStorage.getItem('gf_deck_layout') || DEFAULT_LAYOUT; }catch(e){}
setLayout(startLay);
layEl.onchange = ()=>setLayout(layEl.value);
/* ----- WEJŚCIE DO TESTU KOŃCOWEGO ----- */
const examIdx = DECK.findIndex(s=>s.finalTest);
if(examIdx >= 0){
document.getElementById('btnTest').onclick = ()=>show(examIdx);
deck.addEventListener('click', e=>{ if(e.target.closest('[data-goto-test]')) show(examIdx); });
}
show(0);
</script>
</body>
</html>
Zgodność
30 minut
3 kroki