{"id":34021,"date":"2026-06-28T19:37:57","date_gmt":"2026-06-28T17:37:57","guid":{"rendered":"https:\/\/strate9y.com\/strategicke-nastroje\/analyza-pestle-interaktivny-sprievodca-krok-za-krokom\/"},"modified":"2026-06-30T12:48:42","modified_gmt":"2026-06-30T10:48:42","slug":"analyza-pestle","status":"publish","type":"page","link":"https:\/\/strate9y.com\/sk\/strategicke-nastroje\/analyza-pestle\/","title":{"rendered":"Anal\u00fdza PESTLE online"},"content":{"rendered":"\n\n\n<!-- STRATE9Y\u00ae N\u00c1STROJ: PESTLE ANAL\u00ddZA \/ vyhodnotenie po faktoroch \/ WordPress HTML blok -->\n<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Manrope:wght@400;500;600;700;800;900&display=swap');\n\n.str9-pestle2,\n.str9-pestle2 * {\n  box-sizing: border-box;\n  font-family: \"Manrope\", system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif !important;\n}\n\n.str9-pestle2 {\n  --black:#080808;\n  --red:#E8080F;\n  --red-dim:rgba(232,8,15,.08);\n  --red-border:rgba(232,8,15,.25);\n  --green:#15803d;\n  --green-dim:rgba(21,128,61,.10);\n  --bg:#F7F7F7;\n  --surface:#fff;\n  --border:#E8E8E8;\n  --text:#111;\n  --muted:#777;\n  --light:#bbb;\n  --p:#E8080F;\n  --e:#15803d;\n  --s:#2563eb;\n  --t:#7c3aed;\n  --l:#d97706;\n  --env:#0f766e;\n  background:var(--bg);\n  color:var(--text);\n  line-height:1.5;\n  width:100%;\n  overflow-x:hidden;\n}\n\n.str9-pestle2 a { text-decoration:none; }\n\n.str9-pestle2-hero {\n  background:\n    radial-gradient(circle at 78% 38%,rgba(232,8,15,.30),transparent 30%),\n    linear-gradient(135deg,#050505 0%,#101014 52%,#050505 100%);\n  color:#fff;\n  padding:clamp(76px,8vw,120px) 24px;\n}\n\n.str9-pestle2-wrap { max-width:1180px; margin:0 auto; }\n\n.str9-pestle2-kicker {\n  color:var(--red);\n  font-weight:900;\n  text-transform:uppercase;\n  letter-spacing:.08em;\n  font-size:13px;\n  margin-bottom:16px;\n}\n\n.str9-pestle2-hero h1 {\n  max-width:920px;\n  font-size:clamp(40px,5.5vw,72px);\n  line-height:.98;\n  margin:0 0 22px;\n  letter-spacing:-.06em;\n  font-weight:900;\n  color:#fff!important;\n}\n\n.str9-pestle2-hero h1 span { color:var(--red)!important; }\n\n.str9-pestle2-hero p {\n  max-width:760px;\n  font-size:clamp(18px,2vw,22px);\n  line-height:1.55;\n  color:rgba(255,255,255,.82)!important;\n  margin:0 0 32px;\n}\n\n.str9-pestle2-actions { display:flex; gap:14px; flex-wrap:wrap; }\n\n.str9-pestle2-btn {\n  display:inline-flex;\n  align-items:center;\n  justify-content:center;\n  background:var(--red);\n  color:#fff!important;\n  padding:15px 24px;\n  border-radius:12px;\n  font-weight:900;\n  box-shadow:0 16px 38px rgba(232,8,15,.28);\n  border:0;\n  cursor:pointer;\n}\n\n.str9-pestle2-btn.secondary {\n  background:rgba(255,255,255,.10);\n  box-shadow:none;\n  border:1px solid rgba(255,255,255,.18);\n}\n\n.str9-pestle2-section {\n  padding:clamp(58px,7vw,88px) 24px;\n  background:#fff;\n}\n\n.str9-pestle2-section.soft { background:#f6f6f4; }\n\n.str9-pestle2-title {\n  max-width:820px;\n  margin:0 auto 34px;\n  text-align:center;\n}\n\n.str9-pestle2-title h2 {\n  font-size:clamp(30px,4vw,48px);\n  line-height:1.08;\n  letter-spacing:-.05em;\n  margin-bottom:14px;\n  font-weight:900;\n}\n\n.str9-pestle2-title p {\n  color:var(--muted);\n  font-size:17px;\n  line-height:1.65;\n}\n\n.str9-pestle2-two {\n  display:grid;\n  grid-template-columns:1fr 1fr;\n  gap:28px;\n}\n\n.str9-pestle2-card {\n  background:#fff;\n  border:1px solid rgba(0,0,0,.09);\n  border-radius:24px;\n  padding:30px;\n  box-shadow:0 16px 42px rgba(0,0,0,.045);\n}\n\n.str9-pestle2-card h3 {\n  font-size:24px;\n  line-height:1.15;\n  letter-spacing:-.04em;\n  margin-bottom:14px;\n  font-weight:900;\n}\n\n.str9-pestle2-card p,\n.str9-pestle2-card li {\n  color:var(--muted);\n  font-size:15px;\n  line-height:1.65;\n}\n\n.str9-pestle2-card ul { padding-left:20px; margin-top:12px; }\n.str9-pestle2-link { color:var(--red); font-weight:900; }\n\n.str9-pestle2-how {\n  display:grid;\n  grid-template-columns:repeat(4,1fr);\n  gap:18px;\n}\n\n.str9-pestle2-how-card {\n  background:#fff;\n  border:1px solid rgba(0,0,0,.09);\n  border-radius:22px;\n  padding:24px;\n  box-shadow:0 14px 36px rgba(0,0,0,.04);\n}\n\n.str9-pestle2-num {\n  width:42px;\n  height:42px;\n  border-radius:50%;\n  display:grid;\n  place-items:center;\n  background:var(--red);\n  color:#fff;\n  font-weight:900;\n  margin-bottom:14px;\n}\n\n.str9-pestle2-how-card strong {\n  display:block;\n  font-size:17px;\n  margin-bottom:8px;\n}\n\n.str9-pestle2-how-card p {\n  color:var(--muted);\n  font-size:14px;\n  line-height:1.55;\n}\n\n.str9-pestle2-app-intro {\n  background:#080808;\n  color:#fff;\n  padding:34px 24px;\n  text-align:center;\n}\n\n.str9-pestle2-app-intro h2 {\n  font-size:clamp(28px,4vw,44px);\n  letter-spacing:-.05em;\n  font-weight:900;\n  margin-bottom:10px;\n  color:#fff!important;\n}\n\n.str9-pestle2-app-intro p {\n  color:rgba(255,255,255,.72)!important;\n  font-size:16px;\n}\n\n.str9-pestle2-topbar {\n  background:var(--black);\n  padding:14px 32px;\n  display:flex;\n  align-items:center;\n  justify-content:space-between;\n  position:sticky;\n  top:0;\n  z-index:20;\n}\n\n.str9-pestle2-top-left { display:flex; align-items:center; gap:20px; }\n\n.str9-pestle2-back {\n  color:#777;\n  font-size:13px;\n  font-weight:600;\n}\n\n.str9-pestle2-back:hover { color:#bbb; }\n\n.str9-pestle2-top-title {\n  color:#fff;\n  font-size:14px;\n  font-weight:800;\n}\n\n.str9-pestle2-top-title span { color:var(--red); }\n\n.str9-pestle2-top-right { display:flex; align-items:center; gap:12px; }\n\n.str9-pestle2-progress-wrap {\n  width:140px;\n  height:4px;\n  background:#2A2A2A;\n  border-radius:2px;\n  overflow:hidden;\n}\n\n.str9-pestle2-progress {\n  height:100%;\n  background:var(--red);\n  width:0%;\n  transition:.3s ease;\n}\n\n.str9-pestle2-progress-text {\n  color:#777;\n  font-size:12px;\n  font-weight:700;\n  min-width:48px;\n  text-align:right;\n}\n\n.str9-pestle2-export {\n  background:var(--red);\n  color:#fff;\n  border:0;\n  padding:9px 18px;\n  border-radius:6px;\n  font-size:13px;\n  font-weight:800;\n  cursor:pointer;\n}\n\n.str9-pestle2-export:disabled { opacity:.4; cursor:not-allowed; }\n\n.str9-pestle2-app {\n  display:grid;\n  grid-template-columns:470px 1fr;\n  min-height:820px;\n}\n\n.str9-pestle2-sidebar {\n  background:#fff;\n  border-right:1px solid var(--border);\n  min-height:820px;\n}\n\n.str9-pestle2-side-head {\n  padding:28px 28px 20px;\n  border-bottom:1px solid var(--border);\n}\n\n.str9-pestle2-badge {\n  display:inline-flex;\n  align-items:center;\n  gap:6px;\n  background:rgba(232,8,15,.1);\n  border:1px solid var(--red-border);\n  border-radius:100px;\n  padding:3px 10px;\n  font-size:11px;\n  font-weight:800;\n  color:var(--red);\n  margin-bottom:10px;\n}\n\n.str9-pestle2-side-head h2 {\n  font-size:20px;\n  font-weight:900;\n  letter-spacing:-.5px;\n  margin-bottom:6px;\n}\n\n.str9-pestle2-side-head p {\n  color:var(--muted);\n  font-size:13px;\n  line-height:1.5;\n}\n\n.str9-pestle2-steps {\n  padding:16px 20px;\n  border-bottom:1px solid var(--border);\n  display:flex;\n  gap:6px;\n  flex-wrap:wrap;\n}\n\n.str9-pestle2-dot {\n  width:34px;\n  height:34px;\n  border-radius:50%;\n  border:2px solid var(--border);\n  background:transparent;\n  font-size:12px;\n  font-weight:900;\n  color:var(--light);\n  cursor:pointer;\n  display:flex;\n  align-items:center;\n  justify-content:center;\n}\n\n.str9-pestle2-dot.done {\n  background:var(--red);\n  border-color:var(--red);\n  color:#fff;\n}\n\n.str9-pestle2-dot.active {\n  border-color:var(--red);\n  color:var(--red);\n}\n\n.str9-pestle2-panel { padding:28px; }\n\n.str9-pestle2-q-eyebrow {\n  font-size:10px;\n  font-weight:900;\n  letter-spacing:2px;\n  text-transform:uppercase;\n  color:var(--red);\n  margin-bottom:8px;\n}\n\n.str9-pestle2-q-title {\n  font-size:18px;\n  font-weight:900;\n  letter-spacing:-.5px;\n  margin-bottom:8px;\n  line-height:1.3;\n}\n\n.str9-pestle2-q-desc {\n  color:var(--muted);\n  font-size:13px;\n  margin-bottom:18px;\n  line-height:1.6;\n}\n\n.str9-pestle2-q-hint {\n  background:var(--red-dim);\n  border-left:3px solid var(--red);\n  padding:12px 14px;\n  border-radius:0 6px 6px 0;\n  font-size:12px;\n  color:#444;\n  margin-bottom:18px;\n  line-height:1.6;\n}\n\n.str9-pestle2-q-hint strong { color:var(--red); font-weight:800; }\n\n.str9-pestle2-chip-label {\n  font-size:11px;\n  color:var(--light);\n  margin-bottom:8px;\n  font-weight:800;\n  text-transform:uppercase;\n  letter-spacing:.04em;\n}\n\n.str9-pestle2-chips {\n  display:flex;\n  flex-wrap:wrap;\n  gap:8px;\n  margin-bottom:16px;\n}\n\n.str9-pestle2-chip {\n  padding:6px 14px;\n  border-radius:100px;\n  border:1.5px solid var(--border);\n  font-size:12px;\n  font-weight:700;\n  color:var(--muted);\n  cursor:pointer;\n  background:#fff;\n}\n\n.str9-pestle2-chip:hover,\n.str9-pestle2-chip.selected {\n  border-color:var(--red);\n  color:var(--red);\n  background:var(--red-dim);\n}\n\n.str9-pestle2-custom {\n  display:flex;\n  gap:8px;\n  margin-bottom:18px;\n}\n\n.str9-pestle2-input {\n  flex:1;\n  min-width:0;\n  padding:12px 14px;\n  border:2px solid var(--border);\n  border-radius:8px;\n  font-size:13px;\n  outline:none;\n  background:#f7f7f7;\n}\n\n.str9-pestle2-input:focus {\n  border-color:var(--red);\n  background:#fff;\n}\n\n.str9-pestle2-add-btn {\n  padding:12px 14px;\n  background:var(--black);\n  color:#fff;\n  border:0;\n  border-radius:8px;\n  font-weight:900;\n  cursor:pointer;\n  white-space:nowrap;\n}\n\n.str9-pestle2-factors {\n  display:flex;\n  flex-direction:column;\n  gap:12px;\n}\n\n.str9-pestle2-factor-card {\n  background:#fff;\n  border:1px solid var(--border);\n  border-left:5px solid var(--red);\n  border-radius:14px;\n  padding:16px;\n  box-shadow:0 8px 22px rgba(0,0,0,.035);\n}\n\n.str9-pestle2-factor-card.opportunity { border-left-color:var(--green); }\n.str9-pestle2-factor-card.threat { border-left-color:var(--red); }\n\n.str9-pestle2-factor-head {\n  display:flex;\n  align-items:flex-start;\n  gap:10px;\n  margin-bottom:12px;\n}\n\n.str9-pestle2-factor-name {\n  flex:1;\n  font-size:14px;\n  font-weight:900;\n  line-height:1.35;\n}\n\n.str9-pestle2-remove {\n  border:0;\n  background:transparent;\n  color:var(--light);\n  font-size:20px;\n  line-height:1;\n  cursor:pointer;\n}\n\n.str9-pestle2-remove:hover { color:var(--red); }\n\n.str9-pestle2-type-row {\n  display:grid;\n  grid-template-columns:1fr 1fr;\n  gap:8px;\n  margin-bottom:14px;\n}\n\n.str9-pestle2-type {\n  border:1.5px solid var(--border);\n  background:#f7f7f7;\n  color:var(--muted);\n  border-radius:10px;\n  padding:10px;\n  cursor:pointer;\n  font-size:12px;\n  font-weight:900;\n  text-align:center;\n}\n\n.str9-pestle2-type.o.active {\n  background:var(--green-dim);\n  color:var(--green);\n  border-color:rgba(21,128,61,.25);\n}\n\n.str9-pestle2-type.t.active {\n  background:var(--red-dim);\n  color:var(--red);\n  border-color:var(--red-border);\n}\n\n.str9-pestle2-score-grid {\n  display:grid;\n  grid-template-columns:1fr;\n  gap:12px;\n  margin-bottom:14px;\n}\n\n.str9-pestle2-score {\n  background:#f7f7f7;\n  border:1px solid var(--border);\n  border-radius:12px;\n  padding:14px;\n}\n\n.str9-pestle2-score-head {\n  display:flex;\n  justify-content:space-between;\n  gap:8px;\n  align-items:center;\n  margin-bottom:8px;\n}\n\n.str9-pestle2-score-head strong {\n  font-size:13px;\n  color:#111;\n  font-weight:900;\n}\n\n.str9-pestle2-score-head span {\n  font-size:18px;\n  line-height:1;\n  font-weight:900;\n  color:var(--red);\n}\n\n.str9-pestle2-rating {\n  display:grid;\n  grid-template-columns:repeat(5,1fr);\n  gap:3px;\n}\n\n.str9-pestle2-rate {\n  height:34px;\n  border:1px solid var(--border);\n  border-radius:8px;\n  background:#fff;\n  color:var(--muted);\n  font-size:12px;\n  font-weight:900;\n  cursor:pointer;\n}\n\n.str9-pestle2-rate.selected {\n  background:var(--red);\n  border-color:var(--red);\n  color:#fff;\n}\n\n.str9-pestle2-priority-box {\n  display:grid;\n  grid-template-columns:84px 1fr 82px;\n  gap:12px;\n  align-items:center;\n  background:#080808;\n  border-radius:12px;\n  padding:12px;\n  color:#fff;\n}\n\n.str9-pestle2-priority-num {\n  font-size:30px;\n  font-weight:900;\n  line-height:1;\n  letter-spacing:-1px;\n  color:#fff;\n}\n\n.str9-pestle2-priority-label {\n  font-size:10px;\n  font-weight:900;\n  text-transform:uppercase;\n  letter-spacing:.07em;\n  color:rgba(255,255,255,.48);\n  margin-top:4px;\n}\n\n.str9-pestle2-priority-bar {\n  height:9px;\n  background:rgba(255,255,255,.13);\n  border-radius:100px;\n  overflow:hidden;\n}\n\n.str9-pestle2-priority-fill {\n  height:100%;\n  background:var(--red);\n  border-radius:100px;\n  width:0%;\n}\n\n.str9-pestle2-priority-level {\n  font-size:11px;\n  font-weight:900;\n  text-align:right;\n  color:#fff;\n}\n\n.str9-pestle2-nav {\n  display:flex;\n  gap:10px;\n  margin-top:24px;\n}\n\n.str9-pestle2-prev,\n.str9-pestle2-next {\n  flex:1;\n  padding:12px;\n  border-radius:8px;\n  font-size:14px;\n  font-weight:800;\n  cursor:pointer;\n  border:2px solid;\n}\n\n.str9-pestle2-prev {\n  background:transparent;\n  border-color:var(--border);\n  color:var(--muted);\n}\n\n.str9-pestle2-next {\n  background:var(--red);\n  border-color:var(--red);\n  color:#fff;\n}\n\n.str9-pestle2-results {\n  padding:28px;\n  overflow-y:auto;\n}\n\n.str9-pestle2-results-title {\n  display:flex;\n  align-items:center;\n  justify-content:space-between;\n  margin-bottom:18px;\n}\n\n.str9-pestle2-results-title h3 {\n  font-size:13px;\n  font-weight:800;\n  color:var(--muted);\n  letter-spacing:.5px;\n  text-transform:uppercase;\n}\n\n.str9-pestle2-fill-hint {\n  font-size:12px;\n  color:var(--light);\n}\n\n.str9-pestle2-filter-row {\n  display:flex;\n  gap:8px;\n  flex-wrap:wrap;\n  margin-bottom:18px;\n}\n\n.str9-pestle2-filter {\n  border:1.5px solid var(--border);\n  background:#fff;\n  color:var(--muted);\n  border-radius:100px;\n  padding:8px 13px;\n  font-size:12px;\n  font-weight:900;\n  cursor:pointer;\n}\n\n.str9-pestle2-filter.active {\n  background:var(--red);\n  border-color:var(--red);\n  color:#fff;\n}\n\n.str9-pestle2-summary {\n  background:#080808;\n  color:#fff;\n  border-radius:18px;\n  padding:26px;\n  margin-bottom:20px;\n}\n\n.str9-pestle2-summary-title {\n  color:rgba(255,255,255,.45);\n  font-size:12px;\n  font-weight:900;\n  text-transform:uppercase;\n  letter-spacing:.08em;\n  margin-bottom:16px;\n}\n\n.str9-pestle2-kpi-grid {\n  display:grid;\n  grid-template-columns:repeat(4,1fr);\n  gap:12px;\n  margin-bottom:18px;\n}\n\n.str9-pestle2-kpi {\n  background:rgba(255,255,255,.06);\n  border-radius:12px;\n  padding:16px 12px;\n  text-align:center;\n}\n\n.str9-pestle2-kpi-num {\n  font-size:34px;\n  font-weight:900;\n  line-height:1;\n  color:var(--red);\n  margin-bottom:6px;\n}\n\n.str9-pestle2-kpi-label {\n  font-size:10px;\n  font-weight:900;\n  color:rgba(255,255,255,.45);\n  text-transform:uppercase;\n  letter-spacing:.05em;\n}\n\n.str9-pestle2-diagnosis {\n  background:rgba(255,255,255,.045);\n  border-left:3px solid var(--red);\n  border-radius:10px;\n  padding:16px;\n  color:rgba(255,255,255,.72);\n  font-size:14px;\n  line-height:1.65;\n}\n\n.str9-pestle2-priority-panel {\n  background:#fff;\n  border:1px solid var(--border);\n  border-radius:18px;\n  padding:24px;\n  box-shadow:0 14px 36px rgba(0,0,0,.035);\n  margin-bottom:20px;\n}\n\n.str9-pestle2-priority-panel h4,\n.str9-pestle2-card-result h4,\n.str9-pestle2-bridge h4 {\n  font-size:18px;\n  font-weight:900;\n  margin-bottom:6px;\n  letter-spacing:-.03em;\n}\n\n.str9-pestle2-priority-panel p,\n.str9-pestle2-card-result p,\n.str9-pestle2-bridge p {\n  color:var(--muted);\n  font-size:12px;\n  line-height:1.5;\n  margin-bottom:16px;\n}\n\n.str9-pestle2-priority-list {\n  display:flex;\n  flex-direction:column;\n  gap:10px;\n}\n\n.str9-pestle2-priority-item {\n  display:grid;\n  grid-template-columns:36px 1fr auto;\n  gap:12px;\n  align-items:center;\n  border:1px solid var(--border);\n  background:#f7f7f7;\n  border-radius:13px;\n  padding:13px;\n}\n\n.str9-pestle2-rank {\n  width:30px;\n  height:30px;\n  border-radius:50%;\n  background:var(--red);\n  color:#fff;\n  display:grid;\n  place-items:center;\n  font-size:12px;\n  font-weight:900;\n}\n\n.str9-pestle2-priority-item strong {\n  display:block;\n  font-size:14px;\n  line-height:1.35;\n}\n\n.str9-pestle2-priority-item span {\n  display:block;\n  font-size:11px;\n  color:var(--muted);\n  margin-top:3px;\n}\n\n.str9-pestle2-tag {\n  display:inline-flex;\n  align-items:center;\n  justify-content:center;\n  border-radius:100px;\n  padding:6px 10px;\n  font-size:11px;\n  font-weight:900;\n  white-space:nowrap;\n}\n\n.str9-pestle2-tag.o {\n  background:var(--green-dim);\n  color:var(--green);\n  border:1px solid rgba(21,128,61,.25);\n}\n\n.str9-pestle2-tag.t {\n  background:var(--red-dim);\n  color:var(--red);\n  border:1px solid var(--red-border);\n}\n\n.str9-pestle2-canvas {\n  display:grid;\n  grid-template-columns:repeat(3,1fr);\n  gap:12px;\n  margin-bottom:20px;\n}\n\n.str9-pestle2-block {\n  background:#fff;\n  border:2px solid var(--border);\n  border-radius:14px;\n  padding:16px;\n  min-height:168px;\n  cursor:pointer;\n}\n\n.str9-pestle2-block.active {\n  border-color:var(--red);\n  background:#fff5f5;\n}\n\n.str9-pestle2-block-head {\n  display:flex;\n  align-items:center;\n  gap:10px;\n  margin-bottom:10px;\n}\n\n.str9-pestle2-block-letter {\n  width:34px;\n  height:34px;\n  border-radius:50%;\n  display:grid;\n  place-items:center;\n  color:#fff;\n  font-weight:900;\n  flex-shrink:0;\n}\n\n.str9-pestle2-block-name {\n  font-weight:900;\n  font-size:14px;\n  line-height:1.2;\n}\n\n.str9-pestle2-block-count {\n  margin-left:auto;\n  color:var(--muted);\n  font-size:12px;\n  font-weight:900;\n}\n\n.str9-pestle2-mini {\n  padding:8px 0;\n  border-top:1px solid var(--border);\n}\n\n.str9-pestle2-mini:first-of-type { border-top:0; }\n\n.str9-pestle2-mini strong {\n  display:block;\n  font-size:12px;\n  line-height:1.35;\n  margin-bottom:3px;\n}\n\n.str9-pestle2-mini span {\n  font-size:11px;\n  color:var(--muted);\n}\n\n.str9-pestle2-empty {\n  color:var(--light);\n  font-size:12px;\n  font-style:italic;\n}\n\n.str9-pestle2-bottom-grid {\n  display:grid;\n  grid-template-columns:1fr 1fr;\n  gap:20px;\n  margin-bottom:20px;\n}\n\n.str9-pestle2-card-result,\n.str9-pestle2-bridge {\n  background:#fff;\n  border:1px solid var(--border);\n  border-radius:18px;\n  padding:24px;\n  box-shadow:0 14px 36px rgba(0,0,0,.035);\n}\n\n.str9-pestle2-heatmap {\n  display:grid;\n  grid-template-columns:22px 1fr;\n  grid-template-rows:1fr 22px;\n  gap:6px;\n}\n\n.str9-pestle2-ylabel {\n  writing-mode:vertical-rl;\n  transform:rotate(180deg);\n  text-align:center;\n  font-size:10px;\n  font-weight:900;\n  color:var(--light);\n}\n\n.str9-pestle2-cells {\n  display:grid;\n  grid-template-columns:repeat(5,1fr);\n  grid-template-rows:repeat(5,1fr);\n  gap:3px;\n  height:210px;\n}\n\n.str9-pestle2-cell {\n  border-radius:5px;\n  color:#fff;\n  font-weight:900;\n  font-size:13px;\n  display:grid;\n  place-items:center;\n}\n\n.str9-pestle2-xlabel {\n  grid-column:2;\n  text-align:center;\n  font-size:10px;\n  font-weight:900;\n  color:var(--light);\n}\n\n.str9-pestle2-bridge-grid {\n  display:grid;\n  grid-template-columns:1fr 1fr;\n  gap:12px;\n}\n\n.str9-pestle2-bridge-box {\n  background:#f7f7f7;\n  border:1px solid var(--border);\n  border-radius:14px;\n  padding:16px;\n}\n\n.str9-pestle2-bridge-box strong {\n  display:block;\n  margin-bottom:10px;\n  color:var(--red);\n}\n\n.str9-pestle2-bridge-box ul {\n  margin:0;\n  padding-left:18px;\n  color:var(--muted);\n  font-size:12px;\n  line-height:1.55;\n}\n\n.str9-pestle2-export-big {\n  width:100%;\n  padding:16px;\n  background:var(--red);\n  color:#fff;\n  border:0;\n  border-radius:10px;\n  font-size:16px;\n  font-weight:800;\n  cursor:pointer;\n  margin-bottom:12px;\n}\n\n.str9-pestle2-rec-grid {\n  display:grid;\n  grid-template-columns:repeat(3,1fr);\n  gap:18px;\n}\n\n.str9-pestle2-rec {\n  background:#fff;\n  border:1px solid rgba(0,0,0,.09);\n  border-radius:22px;\n  padding:24px;\n}\n\n.str9-pestle2-rec h3 {\n  font-size:20px;\n  margin-bottom:10px;\n  letter-spacing:-.03em;\n  font-weight:900;\n}\n\n.str9-pestle2-rec p {\n  color:var(--muted);\n  line-height:1.6;\n  margin-bottom:18px;\n}\n\n.str9-pestle2-rec a {\n  color:var(--red);\n  font-weight:900;\n}\n\n.str9-pestle2-dark,\n.str9-pestle2-dark h2,\n.str9-pestle2-dark .str9-pestle2-kicker { color:#fff!important; }\n\n.str9-pestle2-dark p { color:rgba(255,255,255,.78)!important; }\n\n.str9-pestle2-faq {\n  max-width:900px;\n  margin:0 auto;\n}\n\n.str9-pestle2-faq details {\n  background:#fff;\n  border:1px solid rgba(0,0,0,.09);\n  border-radius:16px;\n  padding:20px 22px;\n  margin-bottom:12px;\n}\n\n.str9-pestle2-faq summary {\n  cursor:pointer;\n  font-weight:900;\n  font-size:17px;\n}\n\n.str9-pestle2-faq p {\n  color:var(--muted);\n  line-height:1.6;\n  margin:14px 0 0;\n}\n\n@media(max-width:1180px){\n  .str9-pestle2-app{grid-template-columns:1fr;}\n  .str9-pestle2-sidebar{min-height:auto;}\n  .str9-pestle2-bottom-grid{grid-template-columns:1fr;}\n  .str9-pestle2-two,\n  .str9-pestle2-how,\n  .str9-pestle2-rec-grid{grid-template-columns:1fr 1fr;}\n}\n\n@media(max-width:760px){\n  .str9-pestle2-actions{flex-direction:column;}\n  .str9-pestle2-btn{width:100%;}\n  .str9-pestle2-topbar{\n    padding:12px 16px;\n    flex-direction:column;\n    align-items:flex-start;\n    gap:10px;\n  }\n  .str9-pestle2-top-left,\n  .str9-pestle2-top-right{\n    width:100%;\n    justify-content:space-between;\n  }\n  .str9-pestle2-progress-wrap{display:none;}\n  .str9-pestle2-results{padding:16px;}\n  .str9-pestle2-canvas{grid-template-columns:1fr;}\n  .str9-pestle2-kpi-grid{grid-template-columns:repeat(2,1fr);}\n  .str9-pestle2-priority-box{grid-template-columns:1fr;}\n  .str9-pestle2-priority-level{text-align:left;}\n  .str9-pestle2-bridge-grid{grid-template-columns:1fr;}\n  .str9-pestle2-two,\n  .str9-pestle2-how,\n  .str9-pestle2-rec-grid{grid-template-columns:1fr;}\n}\n<\/style>\n\n<div class=\"str9-pestle2\" id=\"str9-pestle2\">\n\n  <section class=\"str9-pestle2-hero\">\n    <div class=\"str9-pestle2-wrap\">\n      <div class=\"str9-pestle2-kicker\">STRATE9Y\u00ae n\u00e1stroje \u00b7 PESTLE anal\u00fdza<\/div>\n      <h1>Vyhodno\u0165te ka\u017ed\u00fd faktor prostredia ako <span>pr\u00edle\u017eitos\u0165 alebo hrozbu<\/span>.<\/h1>\n      <p>\n        Pridajte faktory do oblast\u00ed PESTLE, pri ka\u017edom zvl\u00e1\u0161\u0165 nastavte typ, dopad,\n        pravdepodobnos\u0165 a naliehavos\u0165. V\u00fdsledkom s\u00fa preh\u013eadn\u00e9 TOP prior\u00edty a vstup do SWOT.\n      <\/p>\n      <div class=\"str9-pestle2-actions\">\n        <a class=\"str9-pestle2-btn\" href=\"#nastroj-pestle\">Spusti\u0165 n\u00e1stroj \u2193<\/a>\n        <a class=\"str9-pestle2-btn secondary\" href=\"https:\/\/strate9y.com\/sk\/od-pest-k-pestle-analyza-makroprostredi\/pestle-analyza\/\">Pre\u010d\u00edta\u0165 n\u00e1vod<\/a>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <section class=\"str9-pestle2-section\">\n    <div class=\"str9-pestle2-wrap\">\n      <div class=\"str9-pestle2-two\">\n        <div class=\"str9-pestle2-card\">\n          <h3>\u010co tento n\u00e1stroj rie\u0161i?<\/h3>\n          <p>\n            PESTLE anal\u00fdza mapuje vonkaj\u0161ie prostredie. T\u00e1to verzia nehodnot\u00ed cel\u00e9 oblasti v\u0161eobecne,\n            ale ka\u017ed\u00fd faktor samostatne. V\u010faka tomu je hne\u010f jasn\u00e9, \u010do je pr\u00edle\u017eitos\u0165,\n            \u010do je hrozba a \u010do m\u00e1 najvy\u0161\u0161iu prioritu.\n          <\/p>\n          <p style=\"margin-top:14px;\">\n            Potrebujete najsk\u00f4r te\u00f3riu a pr\u00edklady?\n            <a class=\"str9-pestle2-link\" href=\"https:\/\/strate9y.com\/sk\/od-pest-k-pestle-analyza-makroprostredi\/pestle-analyza\/\">Pre\u010d\u00edtajte si kompletn\u00fd \u010dl\u00e1nok o PESTLE anal\u00fdze.<\/a>\n          <\/p>\n        <\/div>\n\n        <div class=\"str9-pestle2-card\">\n          <h3>Kedy ju pou\u017ei\u0165?<\/h3>\n          <ul>\n            <li>ke\u010f pripravujete strat\u00e9giu firmy alebo produktu,<\/li>\n            <li>ke\u010f chcete oddeli\u0165 sign\u00e1ly od \u0161umu,<\/li>\n            <li>ke\u010f potrebujete vstupy do SWOT anal\u00fdzy,<\/li>\n            <li>ke\u010f rie\u0161ite regul\u00e1cie, infl\u00e1ciu, technol\u00f3gie alebo zmenu spr\u00e1vania z\u00e1kazn\u00edkov,<\/li>\n            <li>ke\u010f chcete preh\u013eadne prioritizova\u0165 vonkaj\u0161ie faktory.<\/li>\n          <\/ul>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <section class=\"str9-pestle2-section soft\">\n    <div class=\"str9-pestle2-wrap\">\n      <div class=\"str9-pestle2-title\">\n        <h2>Ako s n\u00e1strojom pracova\u0165<\/h2>\n        <p>Ka\u017ed\u00fd faktor je samostatn\u00e1 karta. To je z\u00e1sadn\u00fd rozdiel: infl\u00e1cia, dot\u00e1cie ani AI automatiz\u00e1cia nem\u00f4\u017eu ma\u0165 rovnak\u00e9 sk\u00f3re len preto, \u017ee s\u00fa v rovnakej oblasti.<\/p>\n      <\/div>\n\n      <div class=\"str9-pestle2-how\">\n        <div class=\"str9-pestle2-how-card\">\n          <div class=\"str9-pestle2-num\">1<\/div>\n          <strong>Pridajte faktor<\/strong>\n          <p>Vyberte r\u00fdchly faktor alebo nap\u00ed\u0161te vlastn\u00fa konkr\u00e9tnu zmenu v prostred\u00ed.<\/p>\n        <\/div>\n\n        <div class=\"str9-pestle2-how-card\">\n          <div class=\"str9-pestle2-num\">2<\/div>\n          <strong>Ur\u010dite typ<\/strong>\n          <p>Pri ka\u017edom faktore zvl\u00e1\u0161\u0165 ozna\u010dte, \u010di ide o pr\u00edle\u017eitos\u0165 alebo hrozbu.<\/p>\n        <\/div>\n\n        <div class=\"str9-pestle2-how-card\">\n          <div class=\"str9-pestle2-num\">3<\/div>\n          <strong>Ohodno\u0165te prioritu<\/strong>\n          <p>Dopad \u00d7 pravdepodobnos\u0165 \u00d7 naliehavos\u0165 vytvor\u00ed priority score 1\u2013100.<\/p>\n        <\/div>\n\n        <div class=\"str9-pestle2-how-card\">\n          <div class=\"str9-pestle2-num\">4<\/div>\n          <strong>Preneste do SWOT<\/strong>\n          <p>Pr\u00edle\u017eitosti a hrozby sa automaticky pripravia ako vstup do SWOT anal\u00fdzy.<\/p>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <section class=\"str9-pestle2-app-intro\" id=\"nastroj-pestle\">\n    <div class=\"str9-pestle2-wrap\">\n      <h2>Spustite PESTLE anal\u00fdzu<\/h2>\n      <p>Vyberte oblas\u0165 v\u013eavo, pridajte faktory a pri ka\u017edom nastavte typ a prioritu.<\/p>\n    <\/div>\n  <\/section>\n\n  <div class=\"str9-pestle2-topbar\">\n    <div class=\"str9-pestle2-top-left\">\n      <a href=\"https:\/\/strate9y.com\/sk\/strategicke-nastroje\/\" class=\"str9-pestle2-back\">\u2190 N\u00e1stroje<\/a>\n      <span class=\"str9-pestle2-top-title\">STRATE<span>9<\/span>Y\u00ae \u00b7 PESTLE anal\u00fdza<\/span>\n    <\/div>\n    <div class=\"str9-pestle2-top-right\">\n      <div class=\"str9-pestle2-progress-wrap\">\n        <div class=\"str9-pestle2-progress\" data-progress=\"\"><\/div>\n      <\/div>\n      <span class=\"str9-pestle2-progress-text\" data-progress-text=\"\">0\/6<\/span>\n      <button class=\"str9-pestle2-export\" data-export=\"\" disabled=\"disabled\">\u2193 PDF<\/button>\n    <\/div>\n  <\/div>\n\n  <div class=\"str9-pestle2-app\">\n    <div class=\"str9-pestle2-sidebar\">\n      <div class=\"str9-pestle2-side-head\">\n        <div class=\"str9-pestle2-badge\">\ud83c\udf0d Pr\u00edle\u017eitosti, hrozby a priority<\/div>\n        <h2>PESTLE anal\u00fdza<\/h2>\n        <p>Pri ka\u017edom faktore samostatne ur\u010dite typ, dopad, pravdepodobnos\u0165 a naliehavos\u0165.<\/p>\n      <\/div>\n\n      <div class=\"str9-pestle2-steps\" data-steps=\"\"><\/div>\n      <div class=\"str9-pestle2-panel\" data-panel=\"\"><\/div>\n    <\/div>\n\n    <div class=\"str9-pestle2-results\">\n      <div class=\"str9-pestle2-results-title\">\n        <h3>Vyhodnotenie faktorov<\/h3>\n        <span class=\"str9-pestle2-fill-hint\" data-fill-hint=\"\">Za\u010dnite prid\u00e1va\u0165 faktory v\u013eavo \u2192<\/span>\n      <\/div>\n\n      <div class=\"str9-pestle2-filter-row\" data-filters=\"\"><\/div>\n\n      <div class=\"str9-pestle2-summary\">\n        <div class=\"str9-pestle2-summary-title\">Celkov\u00e9 v\u00fdsledky<\/div>\n        <div class=\"str9-pestle2-kpi-grid\">\n          <div class=\"str9-pestle2-kpi\"><div class=\"str9-pestle2-kpi-num\" data-kpi-total=\"\">0<\/div><div class=\"str9-pestle2-kpi-label\">Faktorov<\/div><\/div>\n          <div class=\"str9-pestle2-kpi\"><div class=\"str9-pestle2-kpi-num\" data-kpi-opp=\"\">0<\/div><div class=\"str9-pestle2-kpi-label\">Pr\u00edle\u017eitost\u00ed<\/div><\/div>\n          <div class=\"str9-pestle2-kpi\"><div class=\"str9-pestle2-kpi-num\" data-kpi-threat=\"\">0<\/div><div class=\"str9-pestle2-kpi-label\">Hrozieb<\/div><\/div>\n          <div class=\"str9-pestle2-kpi\"><div class=\"str9-pestle2-kpi-num\" data-kpi-critical=\"\">0<\/div><div class=\"str9-pestle2-kpi-label\">TOP prior\u00edt<\/div><\/div>\n        <\/div>\n        <div class=\"str9-pestle2-diagnosis\" data-diagnosis=\"\">Pridajte prv\u00fd faktor na zobrazenie diagn\u00f3zy.<\/div>\n      <\/div>\n\n      <div class=\"str9-pestle2-priority-panel\">\n        <h4>TOP prior\u00edty<\/h4>\n        <p>Zoraden\u00e9 pod\u013ea priority score. Ka\u017ed\u00e1 polo\u017eka jasne ukazuje, \u010di ide o pr\u00edle\u017eitos\u0165 alebo hrozbu.<\/p>\n        <div class=\"str9-pestle2-priority-list\" data-priority-list=\"\">\n          <div class=\"str9-pestle2-empty\">Pridajte faktory pro zobrazen\u00ed priorit.<\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"str9-pestle2-canvas\" data-canvas=\"\"><\/div>\n\n      <div class=\"str9-pestle2-bottom-grid\">\n        <div class=\"str9-pestle2-card-result\">\n          <h4>Heat mapa<\/h4>\n          <p>Matica dopad \u00d7 pravdepodobnos\u0165. \u010c\u00edslo ukazuje po\u010det faktorov v danej bunke.<\/p>\n          <div class=\"str9-pestle2-heatmap\">\n            <div class=\"str9-pestle2-ylabel\">Dopad<\/div>\n            <div class=\"str9-pestle2-cells\" data-heatmap=\"\"><\/div>\n            <div><\/div>\n            <div class=\"str9-pestle2-xlabel\">Pravdepodobnos\u0165<\/div>\n          <\/div>\n        <\/div>\n\n        <div class=\"str9-pestle2-bridge\">\n          <h4>Data Bridge \u2192 SWOT<\/h4>\n          <p>Pr\u00edle\u017eitosti a hrozby s\u00fa pripraven\u00e9 ako vstup do SWOT anal\u00fdzy.<\/p>\n          <div class=\"str9-pestle2-bridge-grid\">\n            <div class=\"str9-pestle2-bridge-box\">\n              <strong>Pr\u00edle\u017eitosti<\/strong>\n              <ul data-bridge-opp=\"\"><li>Zatia\u013e \u017eiadne pr\u00edle\u017eitosti.<\/li><\/ul>\n            <\/div>\n            <div class=\"str9-pestle2-bridge-box\">\n              <strong>Hrozby<\/strong>\n              <ul data-bridge-threat=\"\"><li>Zatia\u013e \u017eiadne hrozby.<\/li><\/ul>\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <button class=\"str9-pestle2-export-big\" data-export-big=\"\" style=\"display:none;\">\u2193 Stiahnu\u0165 PESTLE anal\u00fdzu ako PDF<\/button>\n    <\/div>\n  <\/div>\n\n  <section class=\"str9-pestle2-section\">\n    <div class=\"str9-pestle2-wrap\">\n      <div class=\"str9-pestle2-title\">\n        <h2>Ako \u010d\u00edta\u0165 v\u00fdsledok<\/h2>\n        <p>Najd\u00f4le\u017eitej\u0161\u00ed nie je po\u010det faktorov, ale jasn\u00e9 rozl\u00ed\u0161enie: \u010do je hrozba, \u010do je pr\u00edle\u017eitos\u0165 a \u010do m\u00e1 najvy\u0161\u0161iu prioritu.<\/p>\n      <\/div>\n\n      <div class=\"str9-pestle2-two\">\n        <div class=\"str9-pestle2-card\">\n          <h3>TOP hrozby vy\u017eaduj\u00fa reakciu<\/h3>\n          <p>Faktory ozna\u010den\u00e9 ako hrozby s vysok\u00fdm sk\u00f3re by mali vies\u0165 k scen\u00e1rom, mitig\u00e1cii alebo \u00faprave strat\u00e9gie.<\/p>\n        <\/div>\n\n        <div class=\"str9-pestle2-card\">\n          <h3>TOP pr\u00edle\u017eitosti vy\u017eaduj\u00fa vyu\u017eitie<\/h3>\n          <p>Faktory ozna\u010den\u00e9 ako pr\u00edle\u017eitosti s vysok\u00fdm sk\u00f3re ukazuj\u00fa, kde m\u00f4\u017ee firma r\u00e1s\u0165, inovova\u0165 alebo z\u00edska\u0165 n\u00e1skok.<\/p>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <section class=\"str9-pestle2-section soft\">\n    <div class=\"str9-pestle2-wrap\">\n      <div class=\"str9-pestle2-title\">\n        <h2>Odpor\u00fa\u010dan\u00fd \u010fal\u0161\u00ed krok<\/h2>\n        <p>Po PESTLE anal\u00fdze pokra\u010dujte pod\u013ea toho, \u010do sa uk\u00e1zalo ako hlavn\u00fd strategick\u00fd tlak.<\/p>\n      <\/div>\n\n      <div class=\"str9-pestle2-rec-grid\">\n        <div class=\"str9-pestle2-rec\">\n          <h3>M\u00e1te O\/T vstupy?<\/h3>\n          <p>Preneste TOP pr\u00edle\u017eitosti a hrozby do SWOT anal\u00fdzy a prepojte ich s internou situ\u00e1ciou firmy.<\/p>\n          <a href=\"https:\/\/strate9y.com\/strategicke-nastroje\/swot-analyza\/\">Pokra\u010dova\u0165 na SWOT \u2192<\/a>\n        <\/div>\n\n        <div class=\"str9-pestle2-rec\">\n          <h3>Tla\u010d\u00ed v\u00e1s trh?<\/h3>\n          <p>Ak vonkaj\u0161ie zmeny ovplyv\u0148uj\u00fa konkurenciu, pokra\u010dujte Porterov\u00fdm modelom 5 s\u00edl.<\/p>\n          <a href=\"https:\/\/strate9y.com\/strategicke-nastroje\/porteruv-model-5-sil\/\">Pokra\u010dova\u0165 na Porterov model \u2192<\/a>\n        <\/div>\n\n        <div class=\"str9-pestle2-rec\">\n          <h3>M\u00e1te zdroje reagova\u0165?<\/h3>\n          <p>Ak viete, \u010do sa men\u00ed, overte pomocou VRIO, \u010di m\u00e1te zdroje na vyu\u017eitie zmeny.<\/p>\n          <a href=\"https:\/\/strate9y.com\/?page_id=33850\">Pokra\u010dova\u0165 na VRIO \u2192<\/a>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <section class=\"str9-pestle2-section str9-pestle2-dark\" style=\"background:#080808;\">\n    <div class=\"str9-pestle2-wrap\">\n      <div class=\"str9-pestle2-title\">\n        <div class=\"str9-pestle2-kicker\">\u010co \u010falej?<\/div>\n        <h2>Ste na zmeny v prostred\u00ed skuto\u010dne pripraven\u00ed?<\/h2>\n        <p>\n          PESTLE uk\u00e1\u017ee, \u010do sa deje okolo v\u00e1s. STRATE9Y\u00ae biznis diagnostika pom\u00f4\u017ee ur\u010di\u0165,\n          \u010di je v\u00e1\u0161 biznis model, ponuka a strat\u00e9gia pripraven\u00e1 reagova\u0165.\n        <\/p>\n        <div style=\"margin-top:28px;\">\n          <a class=\"str9-pestle2-btn\" href=\"https:\/\/strate9y.com\/sk\/strate9y-biznis-diagnostika\/\">Chcem STRATE9Y\u00ae diagnostiku \u2192<\/a>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <section class=\"str9-pestle2-section soft\">\n    <div class=\"str9-pestle2-wrap\">\n      <div class=\"str9-pestle2-title\">\n        <h2>FAQ<\/h2>\n      <\/div>\n\n      <div class=\"str9-pestle2-faq\">\n        <details>\n          <summary>Pre\u010do sa hodnot\u00ed ka\u017ed\u00fd faktor zvl\u00e1\u0161\u0165?<\/summary>\n          <p>Preto\u017ee faktory v rovnakej oblasti m\u00f4\u017eu ma\u0165 odli\u0161n\u00fd dopad, pravdepodobnos\u0165 aj typ. Napr\u00edklad infl\u00e1cia m\u00f4\u017ee by\u0165 hrozba, zatia\u013e \u010do dot\u00e1cie m\u00f4\u017eu by\u0165 pr\u00edle\u017eitos\u0165.<\/p>\n        <\/details>\n\n        <details>\n          <summary>\u010co znamen\u00e1 priority score?<\/summary>\n          <p>Priority score je v\u00fdpo\u010det dopad \u00d7 pravdepodobnos\u0165 \u00d7 naliehavos\u0165 preveden\u00fd na \u0161k\u00e1lu 1\u2013100.<\/p>\n        <\/details>\n\n        <details>\n          <summary>Ak\u00fd je rozdiel medzi PESTLE a SWOT?<\/summary>\n          <p>PESTLE analyzuje vonkaj\u0161ie prostredie. SWOT prep\u00e1ja vonkaj\u0161ie pr\u00edle\u017eitosti a hrozby s intern\u00fdmi siln\u00fdmi a slab\u00fdmi str\u00e1nkami.<\/p>\n        <\/details>\n\n        <details>\n          <summary>Ko\u013eko faktorov m\u00e1m zada\u0165?<\/summary>\n          <p>Ide\u00e1lne 2\u20135 faktorov v ka\u017edej oblasti. D\u00f4le\u017eit\u00e9 je zad\u00e1va\u0165 konkr\u00e9tne faktory, ktor\u00e9 m\u00f4\u017eu ovplyvni\u0165 strat\u00e9giu.<\/p>\n        <\/details>\n      <\/div>\n    <\/div>\n  <\/section>\n<\/div>\n\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf\/2.5.1\/jspdf.umd.min.js\"><\/script>\n\n<script>\n(function(){\n  function startPestle2(){\n    const root = document.getElementById('str9-pestle2');\n    if(!root || root.dataset.initialized === 'true') return;\n    root.dataset.initialized = 'true';\n\n    const CATEGORIES = [\n      {\n        id:'P',\n        letter:'P',\n        color:'var(--p)',\n        pdf:'Politick\u00e9',\n        name:'Politick\u00e9 faktory',\n        eyebrow:'Oblas\u0165 1 zo 6 \u00b7 Politick\u00e9 faktory',\n        title:'Ak\u00e9 politick\u00e9 zmeny m\u00f4\u017eu ovplyvni\u0165 v\u00e1\u0161 biznis?',\n        desc:'Zamerajte sa na politick\u00fa stabilitu, dane, dot\u00e1cie, regul\u00e1cie, verejn\u00e9 obstar\u00e1vanie alebo geopolitiku.',\n        hint:'<strong>Tip:<\/strong> Politick\u00fd faktor m\u00f4\u017ee by\u0165 hrozba aj pr\u00edle\u017eitos\u0165. Ka\u017ed\u00fd faktor preto vyhodnocujte samostatne.',\n        chips:['Zmena da\u0148ovej politiky','Nov\u00e9 regul\u00e1cie E\u00da','Dota\u010dn\u00e9 programy','Politick\u00e1 nestabilita','Verejn\u00e9 obstar\u00e1vanie','Geopolitick\u00e9 nap\u00e4tie']\n      },\n      {\n        id:'E',\n        letter:'E',\n        color:'var(--e)',\n        pdf:'Ekonomick\u00e9',\n        name:'Ekonomick\u00e9 faktory',\n        eyebrow:'Oblas\u0165 2 zo 6 \u00b7 Ekonomick\u00e9 faktory',\n        title:'Ak\u00e9 ekonomick\u00e9 zmeny m\u00f4\u017eu ovplyvni\u0165 dopyt, n\u00e1klady alebo cenu?',\n        desc:'Sledujte infl\u00e1ciu, \u00farokov\u00e9 sadzby, k\u00fapnu silu, kurz mien, cenu energi\u00ed, mzdy a financovanie.',\n        hint:'<strong>Tip:<\/strong> Ekonomick\u00e9 faktory \u010dasto rozhoduj\u00fa o mar\u017ei, cash-flow a ochote z\u00e1kazn\u00edka nakupova\u0165.',\n        chips:['Infl\u00e1cia','\u00darokov\u00e9 sadzby','Pokles k\u00fapnej sily','Rast miezd','Ceny energi\u00ed','Kurz mien']\n      },\n      {\n        id:'S',\n        letter:'S',\n        color:'var(--s)',\n        pdf:'Soci\u00e1lne',\n        name:'Soci\u00e1lne faktory',\n        eyebrow:'Oblas\u0165 3 zo 6 \u00b7 Soci\u00e1lne faktory',\n        title:'Ako sa men\u00ed spr\u00e1vanie, hodnoty alebo o\u010dak\u00e1vania z\u00e1kazn\u00edkov?',\n        desc:'Zamerajte sa na demografiu, \u017eivotn\u00fd \u0161t\u00fdl, o\u010dak\u00e1vania gener\u00e1ci\u00ed, pr\u00e1cu na dia\u013eku, zdravie alebo udr\u017eate\u013enos\u0165.',\n        hint:'<strong>Tip:<\/strong> Soci\u00e1lne zmeny \u010dasto vytv\u00e1raj\u00fa nov\u00e9 potreby sk\u00f4r, ne\u017e s\u00fa vidite\u013en\u00e9 v \u010d\u00edslach.',\n        chips:['Starnutie popul\u00e1cie','Gener\u00e1cia Z','Home office','Wellbeing','Udr\u017eate\u013enos\u0165','Zmena n\u00e1kupn\u00e9ho spr\u00e1vania']\n      },\n      {\n        id:'T',\n        letter:'T',\n        color:'var(--t)',\n        pdf:'Technologick\u00e9',\n        name:'Technologick\u00e9 faktory',\n        eyebrow:'Oblas\u0165 4 zo 6 \u00b7 Technologick\u00e9 faktory',\n        title:'Ak\u00e9 technol\u00f3gie m\u00f4\u017eu zmeni\u0165 sp\u00f4sob tvorby alebo doru\u010denia hodnoty?',\n        desc:'Sledujte AI, automatiz\u00e1ciu, digitaliz\u00e1ciu, d\u00e1ta, kyberbezpe\u010dnos\u0165, nov\u00e9 platformy alebo technologick\u00e9 \u0161tandardy.',\n        hint:'<strong>Tip:<\/strong> Technol\u00f3gia m\u00f4\u017ee by\u0165 hrozba, ak v\u00e1s nahrad\u00ed, ale pr\u00edle\u017eitos\u0165, ak ju vyu\u017eijete sk\u00f4r.',\n        chips:['AI n\u00e1stroje','Automatiz\u00e1cia','Kyberbezpe\u010dnos\u0165','Digitaliz\u00e1cia','Nov\u00e9 platformy','D\u00e1ta a analytika']\n      },\n      {\n        id:'L',\n        letter:'L',\n        color:'var(--l)',\n        pdf:'Legislat\u00edvne',\n        name:'Legislat\u00edvne faktory',\n        eyebrow:'Oblas\u0165 5 zo 6 \u00b7 Legislat\u00edvne faktory',\n        title:'Ak\u00e9 z\u00e1kony alebo pravidl\u00e1 m\u00f4\u017eu zmeni\u0165 va\u0161e mo\u017enosti?',\n        desc:'Zamerajte sa na GDPR, pracovn\u00e9 pr\u00e1vo, ochranu spotrebite\u013ea, licencie, ESG reporting, AI regul\u00e1ciu alebo odvetvov\u00e9 \u0161tandardy.',\n        hint:'<strong>Tip:<\/strong> Legislat\u00edva m\u00f4\u017ee by\u0165 hrozba aj bari\u00e9ra vstupu pre konkurenciu.',\n        chips:['GDPR','Pracovn\u00e9 pr\u00e1vo','ESG reporting','AI regul\u00e1cia','Ochrana spotrebite\u013ea','Licen\u010dn\u00e9 po\u017eiadavky']\n      },\n      {\n        id:'Env',\n        letter:'E\u00b2',\n        color:'var(--env)',\n        pdf:'Environment\u00e1lne',\n        name:'Environment\u00e1lne faktory',\n        eyebrow:'Oblas\u0165 6 zo 6 \u00b7 Environment\u00e1lne faktory',\n        title:'Ak\u00e9 environment\u00e1lne zmeny m\u00f4\u017eu ovplyvni\u0165 n\u00e1klady, reput\u00e1ciu alebo prev\u00e1dzku?',\n        desc:'Sledujte ceny energi\u00ed, uhl\u00edkov\u00fa stopu, klimatick\u00e9 zmeny, dod\u00e1vate\u013esk\u00e9 re\u0165azce, udr\u017eate\u013enos\u0165 a tlak z\u00e1kazn\u00edkov.',\n        hint:'<strong>Tip:<\/strong> Environment\u00e1lny faktor m\u00f4\u017ee by\u0165 reputa\u010dn\u00e9 riziko, regula\u010dn\u00e1 povinnos\u0165 aj trhov\u00e1 pr\u00edle\u017eitos\u0165.',\n        chips:['Ceny energi\u00ed','Uhl\u00edkov\u00e1 stopa','Klimatick\u00e1 regul\u00e1cia','Udr\u017eate\u013en\u00e9 dod\u00e1vky','Extr\u00e9mne po\u010dasie','ESG tlak']\n      }\n    ];\n\n    let current = 0;\n    let filter = 'all';\n    let factors = {};\n    CATEGORIES.forEach(category => { factors[category.id] = []; });\n\n    const els = {\n      steps: root.querySelector('[data-steps]'),\n      panel: root.querySelector('[data-panel]'),\n      canvas: root.querySelector('[data-canvas]'),\n      progress: root.querySelector('[data-progress]'),\n      progressText: root.querySelector('[data-progress-text]'),\n      fillHint: root.querySelector('[data-fill-hint]'),\n      filters: root.querySelector('[data-filters]'),\n      exportBtn: root.querySelector('[data-export]'),\n      exportBig: root.querySelector('[data-export-big]'),\n      kpiTotal: root.querySelector('[data-kpi-total]'),\n      kpiOpp: root.querySelector('[data-kpi-opp]'),\n      kpiThreat: root.querySelector('[data-kpi-threat]'),\n      kpiCritical: root.querySelector('[data-kpi-critical]'),\n      diagnosis: root.querySelector('[data-diagnosis]'),\n      priorityList: root.querySelector('[data-priority-list]'),\n      heatmap: root.querySelector('[data-heatmap]'),\n      bridgeOpp: root.querySelector('[data-bridge-opp]'),\n      bridgeThreat: root.querySelector('[data-bridge-threat]')\n    };\n\n    function esc(text){\n      const div = document.createElement('div');\n      div.textContent = String(text || '');\n      return div.innerHTML;\n    }\n\n    function getCategory(id){\n      return CATEGORIES.find(category => category.id === id);\n    }\n\n    function score(factor){\n      return Math.round((factor.impact * factor.probability * factor.speed \/ 125) * 100);\n    }\n\n    function level(value){\n      if(value >= 75) return 'KRITICK\u00c1';\n      if(value >= 50) return 'VYSOK\u00c1';\n      if(value >= 25) return 'STREDN\u00c1';\n      return 'N\u00cdZKA';\n    }\n\n    function allFactors(){\n      return CATEGORIES.flatMap(category => factors[category.id].map((factor, index) => ({\n        ...factor,\n        category,\n        index,\n        score: score(factor)\n      })));\n    }\n\n    function filteredFactors(){\n      let arr = allFactors().sort((a,b) => b.score - a.score);\n\n      if(filter === 'opp') arr = arr.filter(factor => factor.type === 'O');\n      if(filter === 'threat') arr = arr.filter(factor => factor.type === 'T');\n      if(filter === 'top5') arr = arr.slice(0,5);\n      if(filter === 'top10') arr = arr.slice(0,10);\n      if(filter.startsWith('cat:')) {\n        const categoryId = filter.replace('cat:', '');\n        arr = arr.filter(factor => factor.category.id === categoryId);\n      }\n\n      return arr;\n    }\n\n    function completedCategories(){\n      return CATEGORIES.filter(category => factors[category.id].length > 0).length;\n    }\n\n    function addFactor(categoryId, name){\n      const value = String(name || '').trim();\n      if(!value) return;\n\n      const exists = factors[categoryId].some(factor => factor.name.toLowerCase() === value.toLowerCase());\n      if(!exists){\n        factors[categoryId].push({\n          name: value,\n          type: 'T',\n          impact: 3,\n          probability: 3,\n          speed: 3\n        });\n      }\n\n      renderAll();\n    }\n\n    function removeFactor(categoryId, index){\n      factors[categoryId].splice(index, 1);\n      renderAll();\n    }\n\n    function updateFactor(categoryId, index, key, value){\n      if(!factors[categoryId] || !factors[categoryId][index]) return;\n      factors[categoryId][index][key] = value;\n      renderAll();\n    }\n\n    function buildSteps(){\n      els.steps.innerHTML = '';\n\n      CATEGORIES.forEach((category, index) => {\n        const button = document.createElement('button');\n        button.type = 'button';\n        button.className = 'str9-pestle2-dot';\n        button.textContent = category.letter;\n        button.title = category.name;\n        button.addEventListener('click', () => {\n          current = index;\n          renderAll();\n        });\n        els.steps.appendChild(button);\n      });\n    }\n\n    function updateStepDots(){\n      root.querySelectorAll('.str9-pestle2-dot').forEach((button, index) => {\n        button.classList.remove('active', 'done');\n\n        const category = CATEGORIES[index];\n        if(index === current) button.classList.add('active');\n        if(factors[category.id].length > 0) button.classList.add('done');\n      });\n    }\n\n    function buildFilters(){\n      const items = [\n        ['all','V\u0161etko'],\n        ['opp','Pr\u00edle\u017eitosti'],\n        ['threat','Hrozby'],\n        ['top5','TOP 5'],\n        ['top10','TOP 10']\n      ].concat(CATEGORIES.map(category => ['cat:' + category.id, category.letter]));\n\n      els.filters.innerHTML = items.map(item =>\n        '<button type=\"button\" class=\"str9-pestle2-filter ' + (filter === item[0] ? 'active' : '') + '\" data-filter=\"' + esc(item[0]) + '\">' + esc(item[1]) + '<\/button>'\n      ).join('');\n\n      els.filters.querySelectorAll('[data-filter]').forEach(button => {\n        button.addEventListener('click', () => {\n          filter = button.getAttribute('data-filter');\n          buildFilters();\n          renderResults();\n        });\n      });\n    }\n\n    function ratingHtml(categoryId, index, key, currentValue){\n      let html = '<div class=\"str9-pestle2-rating\">';\n      for(let i = 1; i <= 5; i++){\n        html += '<button type=\"button\" class=\"str9-pestle2-rate ' + (currentValue === i ? 'selected' : '') + '\" data-rate-category=\"' + esc(categoryId) + '\" data-rate-index=\"' + index + '\" data-rate-key=\"' + esc(key) + '\" data-rate-value=\"' + i + '\">' + i + '<\/button>';\n      }\n      html += '<\/div>';\n      return html;\n    }\n\n    function factorCardHtml(category, factor, index){\n      const factorScore = score(factor);\n      return `\n        <div class=\"str9-pestle2-factor-card ${factor.type === 'O' ? 'opportunity' : 'threat'}\">\n          <div class=\"str9-pestle2-factor-head\">\n            <div class=\"str9-pestle2-factor-name\">${esc(factor.name)}<\/div>\n            <button type=\"button\" class=\"str9-pestle2-remove\" data-remove-category=\"${esc(category.id)}\" data-remove-index=\"${index}\" aria-label=\"Odstr\u00e1ni\u0165 faktor\">\u00d7<\/button>\n          <\/div>\n\n          <div class=\"str9-pestle2-type-row\">\n            <button type=\"button\" class=\"str9-pestle2-type o ${factor.type === 'O' ? 'active' : ''}\" data-type-category=\"${esc(category.id)}\" data-type-index=\"${index}\" data-type-value=\"O\">Pr\u00edle\u017eitos\u0165<\/button>\n            <button type=\"button\" class=\"str9-pestle2-type t ${factor.type === 'T' ? 'active' : ''}\" data-type-category=\"${esc(category.id)}\" data-type-index=\"${index}\" data-type-value=\"T\">Hrozba<\/button>\n          <\/div>\n\n          <div class=\"str9-pestle2-score-grid\">\n            <div class=\"str9-pestle2-score\">\n              <div class=\"str9-pestle2-score-head\"><strong>Dopad<\/strong><span>${factor.impact}<\/span><\/div>\n              ${ratingHtml(category.id, index, 'impact', factor.impact)}\n            <\/div>\n\n            <div class=\"str9-pestle2-score\">\n              <div class=\"str9-pestle2-score-head\"><strong>Pravdepodobnos\u0165<\/strong><span>${factor.probability}<\/span><\/div>\n              ${ratingHtml(category.id, index, 'probability', factor.probability)}\n            <\/div>\n\n            <div class=\"str9-pestle2-score\">\n              <div class=\"str9-pestle2-score-head\"><strong>Naliehavos\u0165<\/strong><span>${factor.speed}<\/span><\/div>\n              ${ratingHtml(category.id, index, 'speed', factor.speed)}\n            <\/div>\n          <\/div>\n\n          <div class=\"str9-pestle2-priority-box\">\n            <div>\n              <div class=\"str9-pestle2-priority-num\">${factorScore}<\/div>\n              <div class=\"str9-pestle2-priority-label\">Priority score<\/div>\n            <\/div>\n            <div class=\"str9-pestle2-priority-bar\">\n              <div class=\"str9-pestle2-priority-fill\" style=\"width:${factorScore}%;\"><\/div>\n            <\/div>\n            <div class=\"str9-pestle2-priority-level\">${level(factorScore)}<\/div>\n          <\/div>\n        <\/div>\n      `;\n    }\n\n    function renderPanel(){\n      const category = CATEGORIES[current];\n\n      els.panel.innerHTML = `\n        <div class=\"str9-pestle2-q-eyebrow\">${esc(category.eyebrow)}<\/div>\n        <div class=\"str9-pestle2-q-title\">${esc(category.title)}<\/div>\n        <div class=\"str9-pestle2-q-desc\">${esc(category.desc)}<\/div>\n        <div class=\"str9-pestle2-q-hint\">${category.hint}<\/div>\n\n        <div class=\"str9-pestle2-chip-label\">R\u00fdchle pridanie<\/div>\n        <div class=\"str9-pestle2-chips\">\n          ${category.chips.map((chip, index) => '<button type=\"button\" class=\"str9-pestle2-chip\" data-chip-index=\"' + index + '\">' + esc(chip) + '<\/button>').join('')}\n        <\/div>\n\n        <div class=\"str9-pestle2-custom\">\n          <input class=\"str9-pestle2-input\" type=\"text\" placeholder=\"Nap\u00ed\u0161te vlastn\u00fd faktor\u2026\" data-custom-input>\n          <button type=\"button\" class=\"str9-pestle2-add-btn\" data-add-custom>Prida\u0165<\/button>\n        <\/div>\n\n        <div class=\"str9-pestle2-factors\">\n          ${factors[category.id].length ? factors[category.id].map((factor, index) => factorCardHtml(category, factor, index)).join('') : '<div class=\"str9-pestle2-empty\">Zatia\u013e nie je pridan\u00fd \u017eiadny faktor v tejto oblasti.<\/div>'}\n        <\/div>\n\n        <div class=\"str9-pestle2-nav\">\n          <button type=\"button\" class=\"str9-pestle2-prev\" data-prev ${current === 0 ? 'disabled' : ''}>\u2190 Sp\u00e4\u0165<\/button>\n          <button type=\"button\" class=\"str9-pestle2-next\" data-next>${current === CATEGORIES.length - 1 ? 'Dokon\u010di\u0165 \u2713' : '\u010ealej \u2192'}<\/button>\n        <\/div>\n      `;\n\n      els.panel.querySelectorAll('[data-chip-index]').forEach(button => {\n        button.addEventListener('click', () => {\n          const index = Number(button.getAttribute('data-chip-index'));\n          addFactor(category.id, category.chips[index]);\n        });\n      });\n\n      const input = els.panel.querySelector('[data-custom-input]');\n      const addButton = els.panel.querySelector('[data-add-custom]');\n\n      if(addButton && input){\n        addButton.addEventListener('click', () => {\n          addFactor(category.id, input.value);\n          input.value = '';\n        });\n\n        input.addEventListener('keydown', event => {\n          if(event.key === 'Enter'){\n            event.preventDefault();\n            addFactor(category.id, input.value);\n            input.value = '';\n          }\n        });\n      }\n\n      els.panel.querySelectorAll('[data-remove-index]').forEach(button => {\n        button.addEventListener('click', () => {\n          removeFactor(button.getAttribute('data-remove-category'), Number(button.getAttribute('data-remove-index')));\n        });\n      });\n\n      els.panel.querySelectorAll('[data-type-value]').forEach(button => {\n        button.addEventListener('click', () => {\n          updateFactor(\n            button.getAttribute('data-type-category'),\n            Number(button.getAttribute('data-type-index')),\n            'type',\n            button.getAttribute('data-type-value')\n          );\n        });\n      });\n\n      els.panel.querySelectorAll('[data-rate-key]').forEach(button => {\n        button.addEventListener('click', () => {\n          updateFactor(\n            button.getAttribute('data-rate-category'),\n            Number(button.getAttribute('data-rate-index')),\n            button.getAttribute('data-rate-key'),\n            Number(button.getAttribute('data-rate-value'))\n          );\n        });\n      });\n\n      const prev = els.panel.querySelector('[data-prev]');\n      const next = els.panel.querySelector('[data-next]');\n\n      if(prev){\n        prev.addEventListener('click', () => {\n          if(current > 0){\n            current--;\n            renderAll();\n          }\n        });\n      }\n\n      if(next){\n        next.addEventListener('click', () => {\n          if(current < CATEGORIES.length - 1){\n            current++;\n            renderAll();\n          } else {\n            root.querySelectorAll('.str9-pestle2-block').forEach(block => block.classList.remove('active'));\n            const firstPriority = root.querySelector('.str9-pestle2-priority-panel');\n            if(firstPriority) firstPriority.scrollIntoView({behavior:'smooth', block:'start'});\n          }\n        });\n      }\n    }\n\n    function renderCanvas(){\n      els.canvas.innerHTML = CATEGORIES.map(category => {\n        const items = factors[category.id].slice().sort((a,b) => score(b) - score(a)).slice(0,3);\n\n        return `\n          <div class=\"str9-pestle2-block ${category.id === CATEGORIES[current].id ? 'active' : ''}\" data-cat-block=\"${esc(category.id)}\">\n            <div class=\"str9-pestle2-block-head\">\n              <div class=\"str9-pestle2-block-letter\" style=\"background:${category.color};\">${esc(category.letter)}<\/div>\n              <div class=\"str9-pestle2-block-name\">${esc(category.name)}<\/div>\n              <div class=\"str9-pestle2-block-count\">${factors[category.id].length}<\/div>\n            <\/div>\n            ${items.length ? items.map(factor => `\n              <div class=\"str9-pestle2-mini\">\n                <strong>${esc(factor.name)}<\/strong>\n                <span>${factor.type === 'O' ? 'Pr\u00edle\u017eitos\u0165' : 'Hrozba'} \u00b7 sk\u00f3re ${score(factor)}<\/span>\n              <\/div>\n            `).join('') : '<div class=\"str9-pestle2-empty\">Zatia\u013e bez faktorov.<\/div>'}\n          <\/div>\n        `;\n      }).join('');\n\n      els.canvas.querySelectorAll('[data-cat-block]').forEach(block => {\n        block.addEventListener('click', () => {\n          const categoryId = block.getAttribute('data-cat-block');\n          const index = CATEGORIES.findIndex(category => category.id === categoryId);\n          if(index > -1){\n            current = index;\n            renderAll();\n          }\n        });\n      });\n    }\n\n    function renderPriorityList(arr){\n      const list = arr.length ? arr.slice(0,10).map((factor, index) => `\n        <div class=\"str9-pestle2-priority-item\">\n          <div class=\"str9-pestle2-rank\">${index + 1}<\/div>\n          <div>\n            <strong>${esc(factor.name)}<\/strong>\n            <span>${esc(factor.category.name)} \u00b7 sk\u00f3re ${factor.score} \u00b7 ${level(factor.score)}<\/span>\n          <\/div>\n          <div class=\"str9-pestle2-tag ${factor.type === 'O' ? 'o' : 't'}\">${factor.type === 'O' ? 'Pr\u00edle\u017eitos\u0165' : 'Hrozba'}<\/div>\n        <\/div>\n      `).join('') : '<div class=\"str9-pestle2-empty\">Pridajte faktory na zobrazenie prior\u00edt.<\/div>';\n\n      els.priorityList.innerHTML = list;\n    }\n\n    function renderHeatmap(){\n      const matrix = {};\n      allFactors().forEach(factor => {\n        const key = factor.impact + '-' + factor.probability;\n        matrix[key] = (matrix[key] || 0) + 1;\n      });\n\n      let html = '';\n      for(let impact = 5; impact >= 1; impact--){\n        for(let probability = 1; probability <= 5; probability++){\n          const count = matrix[impact + '-' + probability] || 0;\n          const intensity = count ? Math.min(0.18 + count * 0.16, 0.92) : 0.08;\n          const bg = count ? 'rgba(232,8,15,' + intensity + ')' : 'rgba(0,0,0,.08)';\n          html += '<div class=\"str9-pestle2-cell\" style=\"background:' + bg + ';\">' + (count || '') + '<\/div>';\n        }\n      }\n\n      els.heatmap.innerHTML = html;\n    }\n\n    function renderBridge(){\n      const opportunities = allFactors().filter(factor => factor.type === 'O').sort((a,b) => b.score - a.score).slice(0,6);\n      const threats = allFactors().filter(factor => factor.type === 'T').sort((a,b) => b.score - a.score).slice(0,6);\n\n      els.bridgeOpp.innerHTML = opportunities.length\n        ? opportunities.map(factor => '<li>' + esc(factor.name) + ' <strong>(' + factor.score + ')<\/strong><\/li>').join('')\n        : '<li>Zatia\u013e \u017eiadne pr\u00edle\u017eitosti.<\/li>';\n\n      els.bridgeThreat.innerHTML = threats.length\n        ? threats.map(factor => '<li>' + esc(factor.name) + ' <strong>(' + factor.score + ')<\/strong><\/li>').join('')\n        : '<li>Zatia\u013e \u017eiadne hrozby.<\/li>';\n    }\n\n    function renderDiagnosis(total, opportunities, threats, critical){\n      if(total === 0){\n        els.diagnosis.textContent = 'Pridajte prv\u00fd faktor na zobrazenie diagn\u00f3zy.';\n        return;\n      }\n\n      const highest = allFactors().sort((a,b) => b.score - a.score)[0];\n      const dominantType = threats > opportunities ? 'hrozieb' : opportunities > threats ? 'pr\u00edle\u017eitost\u00ed' : 'vyrovnan\u00fd pomer pr\u00edle\u017eitost\u00ed a hrozieb';\n\n      let text = 'Zadan\u00fdch je ' + total + ' faktorov. Vidite\u013en\u00fd je ' + dominantType + '. ';\n      text += 'Najvy\u0161\u0161iu prioritu m\u00e1 \u201e' + highest.name + '\u201c (' + highest.category.name + ', sk\u00f3re ' + highest.score + '). ';\n\n      if(critical > 0){\n        text += 'M\u00e1te ' + critical + ' faktorov v kritickej priorite \u2014 tie by mali \u00eds\u0165 do \u010fal\u0161ieho strategick\u00e9ho rozhodovania ako prv\u00e9.';\n      } else {\n        text += 'Zatia\u013e nem\u00e1te kritick\u00fa prioritu, ale odpor\u00fa\u010da sa overi\u0165 TOP faktory v scen\u00e1roch a n\u00e1sledne ich prenies\u0165 do SWOT.';\n      }\n\n      els.diagnosis.textContent = text;\n    }\n\n    function renderResults(){\n      const arr = filteredFactors();\n      const all = allFactors();\n      const total = all.length;\n      const opportunities = all.filter(factor => factor.type === 'O').length;\n      const threats = all.filter(factor => factor.type === 'T').length;\n      const critical = all.filter(factor => factor.score >= 75).length;\n\n      els.kpiTotal.textContent = total;\n      els.kpiOpp.textContent = opportunities;\n      els.kpiThreat.textContent = threats;\n      els.kpiCritical.textContent = critical;\n\n      renderDiagnosis(total, opportunities, threats, critical);\n      renderPriorityList(arr);\n      renderCanvas();\n      renderHeatmap();\n      renderBridge();\n\n      if(total === 0){\n        els.fillHint.textContent = 'Za\u010dnite prid\u00e1va\u0165 faktory v\u013eavo \u2192';\n      } else {\n        els.fillHint.textContent = 'Vyhodnoten\u00fdch ' + total + ' faktorov';\n      }\n\n      const hasData = total > 0;\n      els.exportBtn.disabled = !hasData;\n      els.exportBig.style.display = hasData ? 'block' : 'none';\n    }\n\n    function updateProgress(){\n      const done = completedCategories();\n      els.progress.style.width = Math.round((done \/ CATEGORIES.length) * 100) + '%';\n      els.progressText.textContent = done + '\/' + CATEGORIES.length;\n    }\n\n    function renderAll(){\n      updateStepDots();\n      buildFilters();\n      renderPanel();\n      renderResults();\n      updateProgress();\n    }\n\n    function exportPdf(){\n      const all = allFactors().sort((a,b) => b.score - a.score);\n      if(!all.length) return;\n\n      if(!window.jspdf || !window.jspdf.jsPDF){\n        alert('PDF kni\u017enica sa nena\u010d\u00edtala. Sk\u00faste str\u00e1nku obnovi\u0165.');\n        return;\n      }\n\n      const doc = new window.jspdf.jsPDF({unit:'mm', format:'a4'});\n      const pageWidth = doc.internal.pageSize.getWidth();\n      const pageHeight = doc.internal.pageSize.getHeight();\n      const margin = 14;\n      let y = 18;\n\n      function line(text, size, bold){\n        if(y > pageHeight - 18){\n          doc.addPage();\n          y = 18;\n        }\n        doc.setFont('helvetica', bold ? 'bold' : 'normal');\n        doc.setFontSize(size);\n        const rows = doc.splitTextToSize(String(text || ''), pageWidth - margin * 2);\n        doc.text(rows, margin, y);\n        y += rows.length * (size * 0.42) + 4;\n      }\n\n      line('STRATE9Y\u00ae PESTLE anal\u00fdza', 18, true);\n      line('Vyhodnotenie faktorov prostredia pod\u013ea typu, dopadu, pravdepodobnosti a naliehavosti.', 10, false);\n\n      y += 4;\n      const total = all.length;\n      const opportunities = all.filter(f => f.type === 'O').length;\n      const threats = all.filter(f => f.type === 'T').length;\n      const critical = all.filter(f => f.score >= 75).length;\n\n      line('S\u00fahrn: ' + total + ' faktorov \u00b7 ' + opportunities + ' pr\u00edle\u017eitost\u00ed \u00b7 ' + threats + ' hrozieb \u00b7 ' + critical + ' TOP prior\u00edt', 11, true);\n\n      CATEGORIES.forEach(category => {\n        const categoryFactors = factors[category.id].slice().sort((a,b) => score(b) - score(a));\n        if(!categoryFactors.length) return;\n\n        y += 2;\n        line(category.name, 13, true);\n\n        categoryFactors.forEach(factor => {\n          line(\n            '- ' + factor.name + ' | ' + (factor.type === 'O' ? 'Pr\u00edle\u017eitos\u0165' : 'Hrozba') +\n            ' | dopad ' + factor.impact +\n            ' | pravdepodobnos\u0165 ' + factor.probability +\n            ' | naliehavos\u0165 ' + factor.speed +\n            ' | sk\u00f3re ' + score(factor),\n            9,\n            false\n          );\n        });\n      });\n\n      y += 4;\n      line('TOP priority', 13, true);\n      all.slice(0,10).forEach((factor, index) => {\n        line((index + 1) + '. ' + factor.name + ' \u2014 ' + factor.category.name + ' \u2014 ' + (factor.type === 'O' ? 'Pr\u00edle\u017eitos\u0165' : 'Hrozba') + ' \u2014 sk\u00f3re ' + factor.score, 9, false);\n      });\n\n      y += 4;\n      line('\u010eal\u0161\u00ed krok', 13, true);\n      line('Preneste TOP pr\u00edle\u017eitosti a hrozby do SWOT anal\u00fdzy a rozhodnite, ktor\u00e9 faktory vy\u017eaduj\u00fa scen\u00e1r, mitig\u00e1ciu alebo akt\u00edvne vyu\u017eitie.', 10, false);\n\n      doc.save('STRATE9Y-PESTLE-analyza.pdf');\n    }\n\n    buildSteps();\n    buildFilters();\n    renderAll();\n\n    if(els.exportBtn) els.exportBtn.addEventListener('click', exportPdf);\n    if(els.exportBig) els.exportBig.addEventListener('click', exportPdf);\n  }\n\n  if(document.readyState === 'loading'){\n    document.addEventListener('DOMContentLoaded', startPestle2);\n  } else {\n    startPestle2();\n  }\n\n  setTimeout(startPestle2, 400);\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>STRATE9Y\u00ae n\u00e1stroje \u00b7 PESTLE anal\u00fdza Vyhodno\u0165te ka\u017ed\u00fd faktor prostredia ako pr\u00edle\u017eitos\u0165 alebo hrozbu. Pridajte faktory do oblast\u00ed PESTLE, pri ka\u017edom [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":33986,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-34021","page","type-page","status-publish","hentry"],"acf":[],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"Hana Krchov\u00e1","author_link":"https:\/\/strate9y.com\/sk\/autor\/admin\/"},"uagb_comment_info":0,"uagb_excerpt":"STRATE9Y\u00ae n\u00e1stroje \u00b7 PESTLE anal\u00fdza Vyhodno\u0165te ka\u017ed\u00fd faktor prostredia ako pr\u00edle\u017eitos\u0165 alebo hrozbu. Pridajte faktory do oblast\u00ed PESTLE, pri ka\u017edom [&hellip;]","_links":{"self":[{"href":"https:\/\/strate9y.com\/sk\/wp-json\/wp\/v2\/pages\/34021","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/strate9y.com\/sk\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/strate9y.com\/sk\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/strate9y.com\/sk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/strate9y.com\/sk\/wp-json\/wp\/v2\/comments?post=34021"}],"version-history":[{"count":6,"href":"https:\/\/strate9y.com\/sk\/wp-json\/wp\/v2\/pages\/34021\/revisions"}],"predecessor-version":[{"id":34095,"href":"https:\/\/strate9y.com\/sk\/wp-json\/wp\/v2\/pages\/34021\/revisions\/34095"}],"up":[{"embeddable":true,"href":"https:\/\/strate9y.com\/sk\/wp-json\/wp\/v2\/pages\/33986"}],"wp:attachment":[{"href":"https:\/\/strate9y.com\/sk\/wp-json\/wp\/v2\/media?parent=34021"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}