{"id":55619,"date":"2026-08-10T16:12:23","date_gmt":"2026-08-10T14:12:23","guid":{"rendered":"https:\/\/am-business.eu\/?page_id=55619"},"modified":"2026-08-10T16:13:00","modified_gmt":"2026-08-10T14:13:00","slug":"planovac-zisku","status":"publish","type":"page","link":"https:\/\/am-business.eu\/sk\/nastroje\/planovac-zisku\/","title":{"rendered":"Pl\u00e1nova\u010d zisku"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"55619\" class=\"elementor elementor-55619\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4943b5e e-con-full e-flex e-con e-parent\" data-id=\"4943b5e\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a814754 elementor-widget elementor-widget-html\" data-id=\"a814754\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\n  \/* Unique Namespace wrapper to override Elementor default styles *\/\n  .pno-custom-wrapper {\n    --primary: #4f46e5 !important;\n    --primary-hover: #4338ca !important;\n    --primary-light: rgba(79, 70, 229, 0.08) !important;\n    --c-profit: #10b981 !important;\n    --c-profit-bg: rgba(16, 185, 129, 0.1) !important;\n    --c-loss: #ef4444 !important;\n    --c-loss-bg: rgba(239, 68, 68, 0.08) !important;\n    --c-warn: #f59e0b !important;\n    --c-warn-bg: rgba(245, 158, 11, 0.1) !important;\n    --text-main: #1f2937 !important;\n    --text-muted: #6b7280 !important;\n    --bg-card: #ffffff !important;\n    --bg-page: #f8fafc !important;\n    --border-color: #e2e8f0 !important;\n    --radius: 16px !important;\n    --shadow-sm: 0 1px 3px rgba(0,0,0,0.05) !important;\n    --shadow-md: 0 4px 6px -1px rgba(0,0,0,0.05), 0 2px 4px -1px rgba(0,0,0,0.03) !important;\n    --purple: #4f46e5 !important;\n\n    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif !important;\n    color: var(--text-main) !important;\n    background: var(--bg-page) !important;\n    padding: 1rem 0 !important;\n    width: 100% !important;\n    box-sizing: border-box !important;\n  }\n\n  .pno-custom-wrapper * { \n    box-sizing: border-box !important; \n  }\n\n  .pno-custom-col {\n    max-width: 840px !important;\n    margin: 0 auto !important;\n    padding: 0 1rem !important;\n  }\n\n  .pno-custom-header-box {\n    display: flex !important;\n    align-items: center !important;\n    justify-content: space-between !important;\n    margin-bottom: 1.5rem !important;\n    flex-wrap: wrap !important;\n    gap: 1rem !important;\n  }\n\n  .pno-custom-wrapper h2.pno-custom-title {\n    font-size: 1.5rem !important;\n    font-weight: 800 !important;\n    margin: 0 !important;\n    padding: 0 !important;\n    color: var(--text-main) !important;\n    line-height: 1.2 !important;\n    border: none !important;\n  }\n\n  .pno-custom-currency-picker {\n    display: flex !important;\n    align-items: center !important;\n    gap: 0.5rem !important;\n    background: var(--bg-card) !important;\n    padding: 0.35rem !important;\n    border-radius: 10px !important;\n    border: 1px solid var(--border-color) !important;\n    box-shadow: var(--shadow-sm) !important;\n  }\n\n  .pno-custom-currency-label {\n    font-size: 0.8rem !important;\n    font-weight: 600 !important;\n    color: var(--text-muted) !important;\n    padding-left: 0.5rem !important;\n  }\n\n  .pno-custom-section {\n    font-size: 0.85rem !important;\n    font-weight: 700 !important;\n    letter-spacing: 0.05em !important;\n    text-transform: uppercase !important;\n    color: var(--primary) !important;\n    margin: 2rem 0 1rem !important;\n    display: flex !important;\n    align-items: center !important;\n    gap: 0.5rem !important;\n  }\n  .pno-custom-section::before {\n    content: '' !important;\n    display: inline-block !important;\n    width: 4px !important;\n    height: 16px !important;\n    background: var(--primary) !important;\n    border-radius: 2px !important;\n  }\n\n  \/* Intro Card *\/\n  .pno-custom-intro-card {\n    font-size: 0.92rem !important;\n    line-height: 1.6 !important;\n    color: var(--text-main) !important;\n    margin-bottom: 1.5rem !important;\n    background: var(--bg-card) !important;\n    padding: 1.25rem 1.5rem !important;\n    border-radius: var(--radius) !important;\n    border: 1px solid var(--border-color) !important;\n    box-shadow: var(--shadow-sm) !important;\n  }\n\n  \/* Inputs Grid *\/\n  .pno-custom-inputs {\n    display: grid !important;\n    grid-template-columns: repeat(2, 1fr) !important;\n    gap: 1rem !important;\n  }\n  .pno-custom-field {\n    background: var(--bg-card) !important;\n    border: 1px solid var(--border-color) !important;\n    border-radius: var(--radius) !important;\n    padding: 1.1rem !important;\n    display: flex !important;\n    flex-direction: column !important;\n    box-shadow: var(--shadow-sm) !important;\n    transition: all 0.2s ease !important;\n  }\n  .pno-custom-field:focus-within {\n    border-color: var(--primary) !important;\n    box-shadow: 0 0 0 4px var(--primary-light) !important;\n  }\n  .pno-custom-field__label {\n    font-size: 0.8rem !important;\n    font-weight: 600 !important;\n    color: var(--text-muted) !important;\n    margin-bottom: 0.5rem !important;\n    display: block !important;\n  }\n  .pno-custom-wrapper input.pno-custom-field__input {\n    font-size: 1.2rem !important;\n    font-weight: 700 !important;\n    width: 100% !important;\n    padding: 0.55rem 0.75rem !important;\n    border: 1px solid var(--border-color) !important;\n    border-radius: 8px !important;\n    outline: none !important;\n    color: var(--text-main) !important;\n    background: var(--bg-page) !important;\n    transition: all 0.2s ease !important;\n    height: auto !important;\n    margin: 0 !important;\n    box-shadow: none !important;\n  }\n  .pno-custom-wrapper input.pno-custom-field__input:focus {\n    border-color: var(--primary) !important;\n    background: #ffffff !important;\n  }\n  .pno-custom-field__hint {\n    font-size: 0.72rem !important;\n    color: var(--text-muted) !important;\n    margin-top: 0.4rem !important;\n  }\n  .pno-custom-field__conversion {\n    font-size: 0.75rem !important;\n    font-weight: 600 !important;\n    margin-top: 0.4rem !important;\n  }\n  .pno-custom-field__conversion--gray { color: var(--text-muted) !important; }\n  .pno-custom-field__conversion--orange { color: #d97706 !important; }\n  \n  \/* Sliders *\/\n  .pno-custom-wrapper input[type=\"range\"].pno-custom-field__slider {\n    -webkit-appearance: none !important;\n    appearance: none !important;\n    width: 100% !important;\n    height: 6px !important;\n    border-radius: 3px !important;\n    background: var(--border-color) !important;\n    outline: none !important;\n    margin-top: 0.75rem !important;\n    margin-bottom: 0 !important;\n    padding: 0 !important;\n    cursor: pointer !important;\n    border: none !important;\n  }\n  .pno-custom-wrapper input[type=\"range\"].pno-custom-field__slider::-webkit-slider-thumb {\n    -webkit-appearance: none !important;\n    width: 18px !important;\n    height: 18px !important;\n    border-radius: 50% !important;\n    background: var(--primary) !important;\n    cursor: pointer !important;\n    box-shadow: 0 2px 4px rgba(0,0,0,0.2) !important;\n    transition: transform 0.1s ease !important;\n    border: none !important;\n  }\n  .pno-custom-wrapper input[type=\"range\"].pno-custom-field__slider::-webkit-slider-thumb:hover { \n    transform: scale(1.15) !important; \n  }\n\n  \/* Toggle Button Group *\/\n  .pno-custom-toggle {\n    display: inline-flex !important;\n    background: var(--bg-page) !important;\n    border-radius: 8px !important;\n    padding: 2px !important;\n    border: 1px solid var(--border-color) !important;\n  }\n  .pno-custom-wrapper button.pno-custom-toggle__btn {\n    font-size: 0.72rem !important;\n    font-weight: 600 !important;\n    padding: 0.25rem 0.65rem !important;\n    border: none !important;\n    background: none !important;\n    border-radius: 6px !important;\n    cursor: pointer !important;\n    color: var(--text-muted) !important;\n    transition: all 0.2s ease !important;\n    line-height: 1.2 !important;\n    box-shadow: none !important;\n    margin: 0 !important;\n  }\n  .pno-custom-wrapper button.pno-custom-toggle__btn.is-active {\n    background: #ffffff !important;\n    color: var(--primary) !important;\n    box-shadow: var(--shadow-sm) !important;\n  }\n\n  \/* Advanced toggle *\/\n  .pno-custom-wrapper button.pno-custom-advanced-toggle {\n    width: 100% !important;\n    display: flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    gap: 0.5rem !important;\n    padding: 0.75rem !important;\n    margin-top: 1rem !important;\n    background: var(--bg-card) !important;\n    border: 1px dashed var(--border-color) !important;\n    border-radius: var(--radius) !important;\n    cursor: pointer !important;\n    font-size: 0.85rem !important;\n    font-weight: 600 !important;\n    color: var(--primary) !important;\n    transition: all 0.2s ease !important;\n    box-shadow: none !important;\n  }\n  .pno-custom-wrapper button.pno-custom-advanced-toggle:hover { \n    background: var(--primary-light) !important; \n    border-color: var(--primary) !important; \n  }\n  .pno-custom-advanced-toggle__arrow { \n    transition: transform 0.2s ease !important; \n    font-size: 0.7rem !important; \n    display: inline-block !important;\n  }\n  .pno-custom-wrapper button.pno-custom-advanced-toggle.is-open .pno-custom-advanced-toggle__arrow { \n    transform: rotate(90deg) !important; \n  }\n\n  .pno-custom-advanced-body {\n    max-height: 0 !important;\n    overflow: hidden !important;\n    transition: max-height 0.35s ease !important;\n  }\n  .pno-custom-advanced-body.is-open {\n    max-height: 1000px !important;\n    margin-top: 1rem !important;\n  }\n\n  \/* Results Cards Grid *\/\n  .pno-custom-results {\n    display: grid !important;\n    grid-template-columns: repeat(3, 1fr) !important;\n    gap: 1rem !important;\n    margin: 2rem 0 !important;\n  }\n  .pno-custom-card {\n    background: var(--bg-card) !important;\n    border: 1px solid var(--border-color) !important;\n    border-radius: var(--radius) !important;\n    padding: 1.25rem 1rem !important;\n    text-align: center !important;\n    box-shadow: var(--shadow-sm) !important;\n    transition: transform 0.2s ease, box-shadow 0.2s ease !important;\n  }\n  .pno-custom-card:hover {\n    transform: translateY(-2px) !important;\n    box-shadow: var(--shadow-md) !important;\n  }\n  .pno-custom-card__label {\n    font-size: 0.72rem !important;\n    font-weight: 700 !important;\n    color: var(--text-muted) !important;\n    margin-bottom: 0.4rem !important;\n    text-transform: uppercase !important;\n    letter-spacing: 0.05em !important;\n  }\n  .pno-custom-card__value {\n    font-size: 1.6rem !important;\n    font-weight: 800 !important;\n    line-height: 1.1 !important;\n    color: var(--text-main) !important;\n  }\n  .pno-custom-card__unit {\n    font-size: 0.85rem !important;\n    font-weight: 500 !important;\n    color: var(--text-muted) !important;\n  }\n  .pno-custom-card__sub {\n    font-size: 0.72rem !important;\n    color: var(--text-muted) !important;\n    margin-top: 0.35rem !important;\n  }\n  \n  .pno-custom-card--green { background: var(--c-profit-bg) !important; border-color: rgba(16, 185, 129, 0.3) !important; }\n  .pno-custom-card--green .pno-custom-card__value, .pno-custom-card--green .pno-custom-card__label { color: var(--c-profit) !important; }\n  \n  .pno-custom-card--red { background: var(--c-loss-bg) !important; border-color: rgba(239, 68, 68, 0.3) !important; }\n  .pno-custom-card--red .pno-custom-card__value, .pno-custom-card--red .pno-custom-card__label { color: var(--c-loss) !important; }\n\n  .pno-custom-card--warn { background: var(--c-warn-bg) !important; border-color: rgba(245, 158, 11, 0.3) !important; }\n  .pno-custom-card--warn .pno-custom-card__value, .pno-custom-card--warn .pno-custom-card__label { color: var(--c-warn) !important; }\n\n  \/* Semaphore Status Bar *\/\n  .pno-custom-status {\n    display: flex !important;\n    align-items: center !important;\n    gap: 1rem !important;\n    padding: 1.1rem 1.25rem !important;\n    border-radius: var(--radius) !important;\n    margin-bottom: 2rem !important;\n    background: var(--bg-card) !important;\n    border: 1px solid var(--border-color) !important;\n    box-shadow: var(--shadow-sm) !important;\n  }\n  .pno-custom-status__dot {\n    width: 14px !important;\n    height: 14px !important;\n    border-radius: 50% !important;\n    flex-shrink: 0 !important;\n  }\n  .pno-custom-status__text { font-size: 0.88rem !important; line-height: 1.4 !important; color: var(--text-main) !important; }\n  .pno-custom-status__text strong { display: block !important; font-size: 0.92rem !important; margin-bottom: 0.1rem !important; }\n  \n  .pno-custom-status--green { background: var(--c-profit-bg) !important; border-color: rgba(16, 185, 129, 0.3) !important; }\n  .pno-custom-status--green .pno-custom-status__dot { background: var(--c-profit) !important; box-shadow: 0 0 8px var(--c-profit) !important; }\n  .pno-custom-status--green strong { color: var(--c-profit) !important; }\n\n  .pno-custom-status--yellow { background: var(--c-warn-bg) !important; border-color: rgba(245, 158, 11, 0.3) !important; }\n  .pno-custom-status--yellow .pno-custom-status__dot { background: var(--c-warn) !important; box-shadow: 0 0 8px var(--c-warn) !important; }\n  .pno-custom-status--yellow strong { color: #d97706 !important; }\n\n  .pno-custom-status--red { background: var(--c-loss-bg) !important; border-color: rgba(239, 68, 68, 0.3) !important; }\n  .pno-custom-status--red .pno-custom-status__dot { background: var(--c-loss) !important; box-shadow: 0 0 8px var(--c-loss) !important; }\n  .pno-custom-status--red strong { color: var(--c-loss) !important; }\n\n  \/* Charts Container *\/\n  .pno-custom-charts { display: flex !important; flex-direction: column !important; gap: 1.25rem !important; }\n  .pno-custom-chart-box {\n    background: var(--bg-card) !important;\n    border: 1px solid var(--border-color) !important;\n    border-radius: var(--radius) !important;\n    padding: 1.25rem 1.5rem !important;\n    box-shadow: var(--shadow-sm) !important;\n  }\n  .pno-custom-chart-box__title { font-size: 0.98rem !important; font-weight: 700 !important; color: var(--text-main) !important; margin-bottom: 0.2rem !important; }\n  .pno-custom-chart-box__desc { font-size: 0.82rem !important; color: var(--text-muted) !important; margin-bottom: 1.25rem !important; }\n\n  \/* Waterfall *\/\n  .pno-custom-wf-row { display: flex !important; align-items: center !important; margin-bottom: 0.45rem !important; font-size: 0.82rem !important; }\n  .pno-custom-wf-row__sep { height: 1px !important; background: var(--border-color) !important; margin: 0.65rem 0 !important; }\n  .pno-custom-wf-row__label { width: 140px !important; font-weight: 600 !important; flex-shrink: 0 !important; color: var(--text-main) !important; }\n  .pno-custom-wf-row__track { flex-grow: 1 !important; height: 18px !important; background: #f1f5f9 !important; border-radius: 4px !important; position: relative !important; margin: 0 0.75rem !important; overflow: hidden !important; }\n  .pno-custom-wf-row__bar { height: 100% !important; position: absolute !important; border-radius: 4px !important; transition: all 0.3s ease !important; }\n  .pno-custom-wf-row--neutral .pno-custom-wf-row__bar { background: #94a3b8 !important; }\n  .pno-custom-wf-row--positive .pno-custom-wf-row__bar { background: var(--c-profit) !important; }\n  .pno-custom-wf-row--negative .pno-custom-wf-row__bar { background: var(--c-loss) !important; }\n  .pno-custom-wf-row--result .pno-custom-wf-row__bar { background: var(--primary) !important; }\n  .pno-custom-wf-row__val { width: 110px !important; text-align: right !important; font-weight: 700 !important; color: var(--text-main) !important; }\n\n  \/* Gauge *\/\n  .pno-custom-gauge-wrap { display: flex !important; flex-direction: column !important; align-items: center !important; position: relative !important; }\n  .pno-custom-gauge-svg { width: 100% !important; max-width: 260px !important; height: auto !important; }\n  .pno-custom-gauge-center { font-weight: 800 !important; fill: var(--text-main) !important; text-anchor: middle !important; }\n  .pno-custom-gauge-center-label { font-size: 10px !important; fill: var(--text-muted) !important; text-anchor: middle !important; }\n  .pno-custom-gauge-labels { display: flex !important; justify-content: space-between !important; width: 200px !important; font-size: 0.75rem !important; color: var(--text-muted) !important; font-weight: 600 !important; margin-top: -10px !important; }\n\n  \/* Sensitivity Chart & Table *\/\n  .pno-custom-sens-svg { width: 100% !important; height: auto !important; overflow: visible !important; }\n  .pno-custom-sens-grid { stroke: var(--border-color) !important; stroke-dasharray: 4 4 !important; stroke-width: 1 !important; }\n  .pno-custom-sens-line { stroke: var(--primary) !important; stroke-width: 3 !important; fill: none !important; }\n  .pno-custom-sens-dot--current { fill: var(--primary) !important; stroke: #ffffff !important; stroke-width: 3 !important; }\n  .pno-custom-sens-label { font-size: 10px !important; fill: var(--text-muted) !important; }\n  .pno-custom-sens-label-val { font-size: 11px !important; font-weight: 700 !important; fill: var(--primary) !important; }\n  .pno-custom-sens-label-be { font-size: 10px !important; fill: var(--c-warn) !important; font-weight: 700 !important; }\n\n  .pno-custom-wrapper table.pno-custom-sens-table { \n    width: 100% !important; \n    border-collapse: collapse !important; \n    font-size: 0.82rem !important; \n    margin-top: 0.5rem !important; \n    background: transparent !important;\n    border: none !important;\n  }\n  .pno-custom-wrapper table.pno-custom-sens-table th, \n  .pno-custom-wrapper table.pno-custom-sens-table td { \n    padding: 0.65rem 0.85rem !important; \n    text-align: center !important; \n    border-bottom: 1px solid var(--border-color) !important; \n    border-top: none !important;\n    border-left: none !important;\n    border-right: none !important;\n    background: transparent !important;\n  }\n  .pno-custom-wrapper table.pno-custom-sens-table th { font-weight: 600 !important; color: var(--text-muted) !important; background: #f8fafc !important; }\n  .pno-custom-wrapper table.pno-custom-sens-table td:first-child, \n  .pno-custom-wrapper table.pno-custom-sens-table th:first-child { text-align: left !important; font-weight: 600 !important; }\n  .pno-custom-sens-table__highlight { background: var(--primary-light) !important; font-weight: 700 !important; color: var(--primary) !important; }\n\n  .pno-custom-disclaimer {\n    font-size: 0.75rem !important;\n    color: var(--text-muted) !important;\n    text-align: center !important;\n    margin-top: 1.5rem !important;\n    line-height: 1.5 !important;\n  }\n\n  @media (max-width: 768px) {\n    .pno-custom-inputs { grid-template-columns: 1fr !important; }\n    .pno-custom-results { grid-template-columns: repeat(2, 1fr) !important; }\n    .pno-custom-wf-row__label { width: 110px !important; font-size: 0.75rem !important; }\n    .pno-custom-wf-row__val { width: 85px !important; font-size: 0.75rem !important; }\n  }\n  @media (max-width: 480px) {\n    .pno-custom-results { grid-template-columns: 1fr !important; }\n  }\n<\/style>\n\n<div class=\"pno-custom-wrapper\">\n  <div class=\"pno-custom-col\">\n\n    <!-- HEADER BAR WITH CURRENCY TOGGLE -->\n    <div class=\"pno-custom-header-box\">\n      <h2 class=\"pno-custom-title\">Kalkula\u010dka pl\u00e1novania zisku<\/h2>\n      <div class=\"pno-custom-currency-picker\">\n        <span class=\"pno-custom-currency-label\">Mena:<\/span>\n        <div class=\"pno-custom-toggle\" role=\"group\" aria-label=\"V\u00fdber meny\">\n          <button class=\"pno-custom-toggle__btn is-active\" id=\"pno_btnEUR\" type=\"button\">EUR (\u20ac)<\/button>\n          <button class=\"pno-custom-toggle__btn\" id=\"pno_btnCZK\" type=\"button\">CZK (K\u010d)<\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- INTRO -->\n    <div class=\"pno-custom-intro-card\">\n      <p style=\"margin:0 0 0.5rem\"><strong style=\"color:var(--purple)\">\u010co kalkula\u010dka vypo\u010d\u00edta?<\/strong><\/p>\n      <p style=\"margin:0 0 0.75rem\">Tento n\u00e1stroj na z\u00e1klade v\u00e1\u0161ho cie\u013eov\u00e9ho <strong>\u010dist\u00e9ho zisku<\/strong> ur\u010d\u00ed potrebn\u00fd reklamn\u00fd rozpo\u010det, po\u010det objedn\u00e1vok a po\u017eadovan\u00fd obrat.<\/p>\n      <p style=\"margin:0.75rem 0 0.5rem\"><strong style=\"color:var(--purple)\">Hlavn\u00e9 ukazovatele:<\/strong><\/p>\n      <ul style=\"margin:0;padding-left:1.25rem\">\n        <li style=\"margin-bottom:0.25rem\"><strong>Potrebn\u00fd reklamn\u00fd rozpo\u010det:<\/strong> Mesa\u010dn\u00e9 n\u00e1klady na reklamu pre dosiahnutie cie\u013eov\u00e9ho zisku.<\/li>\n        <li style=\"margin-bottom:0.25rem\"><strong>Potrebn\u00e9 objedn\u00e1vky:<\/strong> Po\u010det dokon\u010den\u00fdch n\u00e1kupov za mesiac.<\/li>\n        <li><strong>Podiel n\u00e1kladov na obrate:<\/strong> Percentu\u00e1lny podiel reklamn\u00fdch v\u00fddavkov z celkov\u00e9ho obratu.<\/li>\n      <\/ul>\n    <\/div>\n\n    <!-- INPUTS -->\n    <p class=\"pno-custom-section\">Vstupn\u00e9 hodnoty<\/p>\n    <div class=\"pno-custom-inputs\">\n      <div class=\"pno-custom-field\">\n        <label class=\"pno-custom-field__label\" for=\"pno_inputCilovyZisk\" id=\"pno_lblCilovyZisk\">Cie\u013eov\u00fd \u010dist\u00fd zisk (\u20ac\/mesiac)<\/label>\n        <input class=\"pno-custom-field__input\" type=\"text\" inputmode=\"numeric\" id=\"pno_inputCilovyZisk\" value=\"3 750\">\n        <div class=\"pno-custom-field__hint\">Ko\u013eko \u010dist\u00e9ho zisku chcete dosiahnu\u0165<\/div>\n      <\/div>\n      <div class=\"pno-custom-field\">\n        <label class=\"pno-custom-field__label\" for=\"pno_inputAOV\" id=\"pno_lblAOV\">Priemern\u00e1 hodnota objedn\u00e1vky (\u20ac)<\/label>\n        <input class=\"pno-custom-field__input\" type=\"text\" inputmode=\"numeric\" id=\"pno_inputAOV\" value=\"56\">\n        <div class=\"pno-custom-field__hint\">Priemern\u00e1 v\u00fd\u0161ka jednej objedn\u00e1vky<\/div>\n      <\/div>\n      <div class=\"pno-custom-field\">\n        <div style=\"display:flex;align-items:center;justify-content:space-between;margin-bottom:0.45rem\">\n          <label class=\"pno-custom-field__label\" for=\"pno_inputMarze\" id=\"pno_labelMarze\" style=\"margin-bottom:0\">Hrub\u00e1 mar\u017ea (%)<\/label>\n          <div class=\"pno-custom-toggle\" role=\"group\" aria-label=\"Typ vstupu\">\n            <button class=\"pno-custom-toggle__btn is-active\" id=\"pno_btnMarze\" type=\"button\">Mar\u017ea<\/button>\n            <button class=\"pno-custom-toggle__btn\" id=\"pno_btnPrirazka\" type=\"button\">Prir\u00e1\u017eka<\/button>\n          <\/div>\n        <\/div>\n        <input class=\"pno-custom-field__input\" type=\"number\" id=\"pno_inputMarze\" value=\"35\" min=\"1\" max=\"95\" step=\"1\">\n        <input class=\"pno-custom-field__slider\" type=\"range\" id=\"pno_sliderMarze\" min=\"1\" max=\"95\" step=\"1\" value=\"35\">\n        <div class=\"pno-custom-field__conversion pno-custom-field__conversion--gray\" id=\"pno_conversionHint\">= obchodn\u00e1 prir\u00e1\u017eka 53,8 %<\/div>\n      <\/div>\n      <div class=\"pno-custom-field\">\n        <label class=\"pno-custom-field__label\" for=\"pno_inputCR\">Konverzn\u00fd pomer (%)<\/label>\n        <input class=\"pno-custom-field__input\" type=\"number\" id=\"pno_inputCR\" value=\"2\" min=\"0.1\" max=\"15\" step=\"0.1\">\n        <input class=\"pno-custom-field__slider\" type=\"range\" id=\"pno_sliderCR\" min=\"0.1\" max=\"15\" step=\"0.1\" value=\"2\">\n        <div class=\"pno-custom-field__hint\">Priemer e-shopov (1\u20133 %)<\/div>\n      <\/div>\n      <div class=\"pno-custom-field\">\n        <label class=\"pno-custom-field__label\" for=\"pno_inputCPC\" id=\"pno_lblCPC\">Cena za kliknutie (\u20ac)<\/label>\n        <input class=\"pno-custom-field__input\" type=\"text\" inputmode=\"numeric\" id=\"pno_inputCPC\" value=\"0,20\">\n        <div class=\"pno-custom-field__hint\">Cena za jeden klik na reklamu<\/div>\n      <\/div>\n      <div class=\"pno-custom-field\">\n        <label class=\"pno-custom-field__label\" for=\"pno_inputFixKonv\" id=\"pno_lblFixKonv\">Fixn\u00e9 n\u00e1klady na konverziu (\u20ac)<\/label>\n        <input class=\"pno-custom-field__input\" type=\"text\" inputmode=\"numeric\" id=\"pno_inputFixKonv\" value=\"2\">\n        <div class=\"pno-custom-field__hint\">Baln\u00e9, doprava a logistika na 1 objedn\u00e1vku<\/div>\n      <\/div>\n    <\/div>\n\n    <!-- ADVANCED INPUTS TOGGLE -->\n    <button class=\"pno-custom-advanced-toggle\" id=\"pno_advancedToggle\" type=\"button\">\n      <span class=\"pno-custom-advanced-toggle__arrow\">&#9654;<\/span>\n      Pokro\u010dil\u00e9 nastavenia (Prev\u00e1dzkov\u00e9 n\u00e1klady, prov\u00edzia agent\u00fary, opakovanie n\u00e1kupu, vratky)\n    <\/button>\n    <div class=\"pno-custom-advanced-body\" id=\"pno_advancedBody\">\n      <div class=\"pno-custom-inputs\">\n        <div class=\"pno-custom-field\">\n          <label class=\"pno-custom-field__label\" for=\"pno_inputFixMesic\" id=\"pno_lblFixMesic\">Mesa\u010dn\u00e9 fixn\u00e9 prev\u00e1dzkov\u00e9 n\u00e1klady (\u20ac)<\/label>\n          <input class=\"pno-custom-field__input\" type=\"text\" inputmode=\"numeric\" id=\"pno_inputFixMesic\" value=\"0\">\n          <div class=\"pno-custom-field__hint\">Mzdy, n\u00e1jomn\u00e9, softv\u00e9r<\/div>\n        <\/div>\n        <div class=\"pno-custom-field\">\n          <label class=\"pno-custom-field__label\" for=\"pno_inputFee\" id=\"pno_lblFee\">Mesa\u010dn\u00fd poplatok za spravovanie rekl\u00e1m (\u20ac)<\/label>\n          <input class=\"pno-custom-field__input\" type=\"text\" inputmode=\"numeric\" id=\"pno_inputFee\" value=\"0\">\n          <div class=\"pno-custom-field__hint\">Mesa\u010dn\u00e1 odmena pre agent\u00faru alebo \u0161pecialistu<\/div>\n        <\/div>\n        <div class=\"pno-custom-field\">\n          <label class=\"pno-custom-field__label\" for=\"pno_inputLTV\">Po\u010det opakovan\u00fdch n\u00e1kupov za rok<\/label>\n          <input class=\"pno-custom-field__input\" type=\"number\" id=\"pno_inputLTV\" value=\"1\" min=\"1\" max=\"50\" step=\"0.1\">\n          <div class=\"pno-custom-field__hint\">Ko\u013ekokr\u00e1t za rok nak\u00fapi ten ist\u00fd z\u00e1kazn\u00edk<\/div>\n        <\/div>\n        <div class=\"pno-custom-field\">\n          <label class=\"pno-custom-field__label\" for=\"pno_inputVratky\">Vratky a storn\u00e1 (%)<\/label>\n          <input class=\"pno-custom-field__input\" type=\"number\" id=\"pno_inputVratky\" value=\"0\" min=\"0\" max=\"80\" step=\"1\">\n          <div class=\"pno-custom-field__hint\">Podiel zru\u0161en\u00fdch alebo vr\u00e1ten\u00fdch objedn\u00e1vok<\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- RESULTS CARDS -->\n    <div class=\"pno-custom-results\" id=\"pno_results\">\n      <div class=\"pno-custom-card pno-custom-card--green\" id=\"pno_cardRozpocet\">\n        <div class=\"pno-custom-card__label\">Potrebn\u00fd reklamn\u00fd rozpo\u010det<\/div>\n        <div class=\"pno-custom-card__value\" id=\"pno_valRozpocet\">\u2014<\/div>\n        <div class=\"pno-custom-card__sub\">invest\u00edcia do reklamy<\/div>\n      <\/div>\n      <div class=\"pno-custom-card\" id=\"pno_cardKonverze\">\n        <div class=\"pno-custom-card__label\">Potrebn\u00e9 objedn\u00e1vky<\/div>\n        <div class=\"pno-custom-card__value\" id=\"pno_valKonverze\">\u2014<\/div>\n        <div class=\"pno-custom-card__sub\">mesa\u010dn\u00fd po\u010det objedn\u00e1vok<\/div>\n      <\/div>\n      <div class=\"pno-custom-card\" id=\"pno_cardProkliky\">\n        <div class=\"pno-custom-card__label\">Potrebn\u00e9 n\u00e1v\u0161tevy<\/div>\n        <div class=\"pno-custom-card__value\" id=\"pno_valProkliky\">\u2014<\/div>\n        <div class=\"pno-custom-card__sub\">n\u00e1v\u0161tevn\u00edci z rekl\u00e1m<\/div>\n      <\/div>\n      <div class=\"pno-custom-card\" id=\"pno_cardObrat\">\n        <div class=\"pno-custom-card__label\">Potrebn\u00fd obrat<\/div>\n        <div class=\"pno-custom-card__value\" id=\"pno_valObrat\">\u2014<\/div>\n        <div class=\"pno-custom-card__sub\">celkov\u00fd obrat vygenerovan\u00fd reklamou<\/div>\n      <\/div>\n      <div class=\"pno-custom-card\" id=\"pno_cardCPA\">\n        <div class=\"pno-custom-card__label\">N\u00e1klady na konverziu<\/div>\n        <div class=\"pno-custom-card__value\" id=\"pno_valCPA\">\u2014<\/div>\n        <div class=\"pno-custom-card__sub\">cena za z\u00edskanie objedn\u00e1vky<\/div>\n      <\/div>\n      <div class=\"pno-custom-card\" id=\"pno_cardPNO\">\n        <div class=\"pno-custom-card__label\">Podiel n\u00e1kladov na obrate<\/div>\n        <div class=\"pno-custom-card__value\" id=\"pno_valPNO\">\u2014<\/div>\n        <div class=\"pno-custom-card__sub\">podiel n\u00e1kladov na reklamu z obratu<\/div>\n      <\/div>\n    <\/div>\n\n    <!-- SEMAPHORE -->\n    <div class=\"pno-custom-status pno-custom-status--green\" id=\"pno_statusBox\">\n      <div class=\"pno-custom-status__dot\"><\/div>\n      <div class=\"pno-custom-status__text\" id=\"pno_statusText\">\n        <strong>Pl\u00e1n je re\u00e1lny<\/strong>\n        Zadajte hodnoty pre vyhodnotenie.\n      <\/div>\n    <\/div>\n\n    <!-- VISUALIZATIONS -->\n    <p class=\"pno-custom-section\">Vizualiz\u00e1cia<\/p>\n    <div class=\"pno-custom-charts\">\n      <div class=\"pno-custom-chart-box\">\n        <div class=\"pno-custom-chart-box__title\">Rozpad jednej objedn\u00e1vky<\/div>\n        <p class=\"pno-custom-chart-box__desc\">Od tr\u017eby cez mar\u017eu a fixn\u00e9 n\u00e1klady a\u017e po \u010dist\u00fd zisk po odpo\u010d\u00edtan\u00ed reklamy.<\/p>\n        <div id=\"pno_chartWaterfall\"><\/div>\n      <\/div>\n\n      <div class=\"pno-custom-chart-box\">\n        <div class=\"pno-custom-chart-box__title\">Podiel n\u00e1kladov na obrate vs. Mar\u017ea<\/div>\n        <p class=\"pno-custom-chart-box__desc\">Zobrazuje pomer n\u00e1kladov na reklamu k mar\u017ei.<\/p>\n        <div id=\"pno_chartGauge\"><\/div>\n      <\/div>\n\n      <div class=\"pno-custom-chart-box\">\n        <div class=\"pno-custom-chart-box__title\">Potrebn\u00fd reklamn\u00fd rozpo\u010det v z\u00e1vislosti od cie\u013eov\u00e9ho zisku<\/div>\n        <p class=\"pno-custom-chart-box__desc\">Rast rozpo\u010dtu pri zvy\u0161ovan\u00ed cie\u013eov\u00e9ho zisku.<\/p>\n        <div id=\"pno_chartSensitivity\"><\/div>\n      <\/div>\n\n      <div class=\"pno-custom-chart-box\">\n        <div class=\"pno-custom-chart-box__title\">Anal\u00fdza citlivosti (\u010co ak\u2026?)<\/div>\n        <p class=\"pno-custom-chart-box__desc\">Zmena reklamn\u00e9ho rozpo\u010dtu pri posune o \u00b120 %.<\/p>\n        <div id=\"pno_chartSensTable\"><\/div>\n      <\/div>\n    <\/div>\n\n    <p class=\"pno-custom-disclaimer\">\n      Kalkula\u010dka sl\u00fa\u017ei ako orienta\u010dn\u00fd n\u00e1stroj.<br>\n      V praxi m\u00f4\u017ee by\u0165 pri vy\u0161\u0161om objeme potrebn\u00fd re\u00e1lny rozpo\u010det vy\u0161\u0161\u00ed.\n    <\/p>\n\n  <\/div>\n<\/div>\n\n<script>\n(function() {\n  'use strict';\n\n  var mode = 'marze';\n  var currency = 'EUR'; \/\/ 'EUR' | 'CZK'\n  var czkRate = 25;     \/\/ 1 EUR = 25 CZK\n\n  var els = {\n    cilovyZisk: document.getElementById('pno_inputCilovyZisk'),\n    aov:        document.getElementById('pno_inputAOV'),\n    marze:      document.getElementById('pno_inputMarze'),\n    cr:         document.getElementById('pno_inputCR'),\n    cpc:        document.getElementById('pno_inputCPC'),\n    fixKonv:    document.getElementById('pno_inputFixKonv'),\n    fixMesic:   document.getElementById('pno_inputFixMesic'),\n    fee:        document.getElementById('pno_inputFee'),\n    ltv:        document.getElementById('pno_inputLTV'),\n    vratky:     document.getElementById('pno_inputVratky')\n  };\n\n  var sliderCR = document.getElementById('pno_sliderCR');\n  var sliderMarze = document.getElementById('pno_sliderMarze');\n\n  var btnEUR = document.getElementById('pno_btnEUR');\n  var btnCZK = document.getElementById('pno_btnCZK');\n\n  btnEUR.addEventListener('click', function() { switchCurrency('EUR'); });\n  btnCZK.addEventListener('click', function() { switchCurrency('CZK'); });\n\n  function switchCurrency(newCurr) {\n    if (currency === newCurr) return;\n    \n    var moneyKeys = ['cilovyZisk', 'aov', 'cpc', 'fixKonv', 'fixMesic', 'fee'];\n    \n    if (newCurr === 'CZK') {\n      moneyKeys.forEach(function(k) {\n        var val = parseNum(els[k].value);\n        els[k].value = fmtNumRaw(val * czkRate, 'CZK');\n      });\n      btnCZK.classList.add('is-active');\n      btnEUR.classList.remove('is-active');\n    } else {\n      moneyKeys.forEach(function(k) {\n        var val = parseNum(els[k].value);\n        els[k].value = fmtNumRaw(val \/ czkRate, 'EUR');\n      });\n      btnEUR.classList.add('is-active');\n      btnCZK.classList.remove('is-active');\n    }\n\n    currency = newCurr;\n    updateCurrencyLabels();\n    calculate();\n  }\n\n  function updateCurrencyLabels() {\n    var symbol = currency === 'CZK' ? 'K\u010d' : '\u20ac';\n    document.getElementById('pno_lblCilovyZisk').textContent = 'Cie\u013eov\u00fd \u010dist\u00fd zisk (' + symbol + '\/mesiac)';\n    document.getElementById('pno_lblAOV').textContent = 'Priemern\u00e1 hodnota objedn\u00e1vky (' + symbol + ')';\n    document.getElementById('pno_lblCPC').textContent = 'Cena za kliknutie (' + symbol + ')';\n    document.getElementById('pno_lblFixKonv').textContent = 'Fixn\u00e9 n\u00e1klady na konverziu (' + symbol + ')';\n    document.getElementById('pno_lblFixMesic').textContent = 'Mesa\u010dn\u00e9 fixn\u00e9 prev\u00e1dzkov\u00e9 n\u00e1klady (' + symbol + ')';\n    document.getElementById('pno_lblFee').textContent = 'Mesa\u010dn\u00fd poplatok za spravovanie rekl\u00e1m (' + symbol + ')';\n  }\n\n  function fmtMoney(n) {\n    if (currency === 'EUR') {\n      return (Math.round(n * 100) \/ 100).toLocaleString('sk-SK', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' \u20ac';\n    }\n    return Math.round(n).toLocaleString('sk-SK') + ' K\u010d';\n  }\n\n  function fmtNumRaw(n, curr) {\n    if (curr === 'EUR') {\n      return (Math.round(n * 100) \/ 100).toString().replace('.', ',');\n    }\n    return Math.round(n).toString();\n  }\n\n  function fmtPct(n) { return n.toFixed(1).replace('.', ',') + ' %'; }\n  function fmtNum(n) { return Math.round(n).toLocaleString('sk-SK'); }\n  function fmtDec(n) { return n.toFixed(1).replace('.', ','); }\n  function parseNum(s) {\n    if (!s) return 0;\n    var clean = String(s).replace(\/\\s\/g, '').replace(',', '.');\n    return parseFloat(clean) || 0;\n  }\n\n  function prirazkaToMarze(p) { return p <= 0 ? 0 : (p \/ (100 + p)) * 100; }\n  function marzeToPrirazka(m) { return m >= 100 ? Infinity : m <= 0 ? 0 : (m \/ (100 - m)) * 100; }\n\n  var btnMarze = document.getElementById('pno_btnMarze');\n  var btnPrirazka = document.getElementById('pno_btnPrirazka');\n  var labelMarze = document.getElementById('pno_labelMarze');\n  var conversionHint = document.getElementById('pno_conversionHint');\n\n  btnMarze.addEventListener('click', function() {\n    if (mode === 'marze') return;\n    var p = parseFloat(els.marze.value) || 0;\n    var m = Math.round(prirazkaToMarze(p));\n    mode = 'marze';\n    els.marze.value = Math.max(1, Math.min(95, m));\n    els.marze.max = 95;\n    sliderMarze.max = 95;\n    sliderMarze.value = els.marze.value;\n    labelMarze.textContent = 'Hrub\u00e1 mar\u017ea (%)';\n    btnMarze.classList.add('is-active');\n    btnPrirazka.classList.remove('is-active');\n    calculate();\n  });\n\n  btnPrirazka.addEventListener('click', function() {\n    if (mode === 'prirazka') return;\n    var m = parseFloat(els.marze.value) || 0;\n    var p = Math.round(marzeToPrirazka(m));\n    mode = 'prirazka';\n    els.marze.value = Math.max(1, Math.min(300, p));\n    els.marze.max = 300;\n    sliderMarze.max = 300;\n    sliderMarze.value = els.marze.value;\n    labelMarze.textContent = 'Obchodn\u00e1 prir\u00e1\u017eka (%)';\n    btnPrirazka.classList.add('is-active');\n    btnMarze.classList.remove('is-active');\n    calculate();\n  });\n\n  var advToggle = document.getElementById('pno_advancedToggle');\n  var advBody = document.getElementById('pno_advancedBody');\n  advToggle.addEventListener('click', function() {\n    advToggle.classList.toggle('is-open');\n    advBody.classList.toggle('is-open');\n  });\n\n  sliderCR.addEventListener('input', function() { els.cr.value = this.value; calculate(); });\n  els.cr.addEventListener('input', function() { sliderCR.value = this.value; });\n  sliderMarze.addEventListener('input', function() { els.marze.value = this.value; calculate(); });\n  els.marze.addEventListener('input', function() { sliderMarze.value = this.value; });\n\n  Object.keys(els).forEach(function(k) {\n    els[k].addEventListener('input', calculate);\n  });\n\n  function calculate() {\n    var rawVal = parseFloat(els.marze.value) || 0;\n    var marze = mode === 'prirazka' ? prirazkaToMarze(rawVal) : rawVal;\n    var cilovyZisk = parseNum(els.cilovyZisk.value);\n    var aov = parseNum(els.aov.value);\n    var cr = parseFloat(els.cr.value) || 0;\n    var cpc = parseNum(els.cpc.value);\n    var fixKonv = parseNum(els.fixKonv.value);\n    var fixMesic = parseNum(els.fixMesic.value);\n    var mesicniFee = parseNum(els.fee.value);\n    var ltv = Math.max(1, parseFloat(els.ltv.value) || 1);\n    var vratky = Math.max(0, Math.min(80, parseFloat(els.vratky.value) || 0));\n\n    if (mode === 'prirazka') {\n      conversionHint.className = 'pno-custom-field__conversion pno-custom-field__conversion--orange';\n      conversionHint.textContent = '= mar\u017ea ' + fmtPct(marze) + ' (pou\u017eit\u00e1 na v\u00fdpo\u010det)';\n    } else {\n      conversionHint.className = 'pno-custom-field__conversion pno-custom-field__conversion--gray';\n      conversionHint.textContent = '= obchodn\u00e1 prir\u00e1\u017eka ' + fmtPct(marzeToPrirazka(marze));\n    }\n\n    if (aov <= 0 || cr <= 0 || cpc <= 0) return;\n\n    var marzeFrac = marze \/ 100;\n    var crFrac = cr \/ 100;\n    var vratkFrac = vratky \/ 100;\n\n    var hrubyZisk = aov * marzeFrac;\n    var cistyZiskNaKonverzi = hrubyZisk - fixKonv;\n    var cistyZiskEff = cistyZiskNaKonverzi * (1 - vratkFrac);\n    var cistyZiskLTV = cistyZiskEff * ltv;\n    var CPA = cpc \/ crFrac;\n\n    var ziskNaKonverzi = cistyZiskLTV - CPA;\n    var potrebneKonverze, feeNaKonv;\n\n    if (ziskNaKonverzi <= 0) {\n      renderUnreachable(marze, CPA, cistyZiskLTV, aov, fixKonv, cistyZiskNaKonverzi, ltv, vratkFrac);\n      return;\n    }\n\n    potrebneKonverze = (cilovyZisk + fixMesic) \/ ziskNaKonverzi;\n\n    if (mesicniFee > 0 && potrebneKonverze > 0) {\n      feeNaKonv = mesicniFee \/ potrebneKonverze;\n      ziskNaKonverzi = cistyZiskLTV - CPA - feeNaKonv;\n\n      if (ziskNaKonverzi <= 0) {\n        renderUnreachable(marze, CPA, cistyZiskLTV, aov, fixKonv, cistyZiskNaKonverzi, ltv, vratkFrac);\n        return;\n      }\n      potrebneKonverze = (cilovyZisk + fixMesic) \/ ziskNaKonverzi;\n      feeNaKonv = mesicniFee \/ potrebneKonverze;\n    } else {\n      feeNaKonv = 0;\n    }\n\n    var potrebneProkliky = potrebneKonverze \/ crFrac;\n    var potrebnyRozpocet = potrebneProkliky * cpc;\n    var potrebnyObrat = potrebneKonverze * aov;\n    var vysledniPNO = potrebnyObrat > 0 ? (potrebnyRozpocet \/ potrebnyObrat) * 100 : 0;\n    var breakevenPno = aov > 0 ? (marzeFrac - fixKonv \/ aov) * 100 : 0;\n\n    document.getElementById('pno_valRozpocet').innerHTML = fmtMoney(potrebnyRozpocet) + ' <span class=\"pno-custom-card__unit\">\/mesiac<\/span>';\n    document.getElementById('pno_valKonverze').innerHTML = fmtNum(Math.ceil(potrebneKonverze)) + ' <span class=\"pno-custom-card__unit\">objedn\u00e1vok\/mes.<\/span>';\n    document.getElementById('pno_valProkliky').innerHTML = fmtNum(Math.ceil(potrebneProkliky)) + ' <span class=\"pno-custom-card__unit\">n\u00e1v\u0161tev\/mes.<\/span>';\n    document.getElementById('pno_valObrat').innerHTML = fmtMoney(potrebnyObrat) + ' <span class=\"pno-custom-card__unit\">\/mesiac<\/span>';\n    document.getElementById('pno_valCPA').innerHTML = fmtMoney(CPA);\n    document.getElementById('pno_valPNO').innerHTML = fmtDec(vysledniPNO) + ' <span class=\"pno-custom-card__unit\">%<\/span>';\n\n    var cardPNO = document.getElementById('pno_cardPNO');\n    cardPNO.classList.remove('pno-custom-card--green', 'pno-custom-card--warn', 'pno-custom-card--red');\n    if (vysledniPNO < marze * 0.85) cardPNO.classList.add('pno-custom-card--green');\n    else if (vysledniPNO < marze) cardPNO.classList.add('pno-custom-card--warn');\n    else cardPNO.classList.add('pno-custom-card--red');\n\n    document.getElementById('pno_cardRozpocet').className = 'pno-custom-card pno-custom-card--green';\n\n    var statusBox = document.getElementById('pno_statusBox');\n    var statusText = document.getElementById('pno_statusText');\n    statusBox.className = 'pno-custom-status';\n\n    var ziskNaKonvFinal = cistyZiskLTV - CPA - feeNaKonv;\n\n    if (ziskNaKonvFinal > hrubyZisk * 0.15) {\n      statusBox.classList.add('pno-custom-status--green');\n      statusText.innerHTML = '<strong>Pl\u00e1n je re\u00e1lny<\/strong>Zisk na konverziu: ' + fmtMoney(ziskNaKonvFinal) + ', mesa\u010dne je potrebn\u00fdch ' + fmtNum(Math.ceil(potrebneKonverze)) + ' objedn\u00e1vok.';\n    } else if (ziskNaKonvFinal > 0) {\n      statusBox.classList.add('pno-custom-status--yellow');\n      statusText.innerHTML = '<strong>N\u00edzky zisk na konverziu<\/strong>Zisk z jednej konverzie je len ' + fmtMoney(ziskNaKonvFinal) + '. Je potrebn\u00fdch ' + fmtNum(Math.ceil(potrebneKonverze)) + ' objedn\u00e1vok.';\n    }\n\n    renderWaterfall(aov, marze, fixKonv, CPA, cistyZiskNaKonverzi, ltv, feeNaKonv, vratkFrac);\n    renderGauge(vysledniPNO, breakevenPno, marze);\n    renderSensitivityChart(cilovyZisk, fixMesic, aov, marzeFrac, fixKonv, crFrac, cpc, ltv, vratkFrac, mesicniFee, potrebnyRozpocet);\n    renderSensTable(cilovyZisk, fixMesic, aov, marzeFrac, fixKonv, crFrac, cpc, ltv, vratkFrac, mesicniFee);\n  }\n\n  function renderUnreachable(marze, CPA, cistyZiskLTV, aov, fixKonv, cistyZiskNaKonverzi, ltv, vratkFrac) {\n    document.getElementById('pno_valRozpocet').innerHTML = '\u2014';\n    document.getElementById('pno_valKonverze').innerHTML = '\u2014';\n    document.getElementById('pno_valProkliky').innerHTML = '\u2014';\n    document.getElementById('pno_valObrat').innerHTML = '\u2014';\n    document.getElementById('pno_valCPA').innerHTML = fmtMoney(CPA);\n    document.getElementById('pno_valPNO').innerHTML = '\u2014';\n\n    document.getElementById('pno_cardRozpocet').className = 'pno-custom-card pno-custom-card--red';\n    document.getElementById('pno_cardPNO').className = 'pno-custom-card pno-custom-card--red';\n\n    var statusBox = document.getElementById('pno_statusBox');\n    statusBox.className = 'pno-custom-status pno-custom-status--red';\n    document.getElementById('pno_statusText').innerHTML = '<strong>Cie\u013e nie je mo\u017en\u00e9 dosiahnu\u0165 s t\u00fdmito parametrami<\/strong>N\u00e1klady na konverziu (' + fmtMoney(CPA) + ') presahuj\u00fa \u010dist\u00fd zisk (' + fmtMoney(cistyZiskLTV) + '). Zn\u00ed\u017ete cenu za kliknutie alebo zv\u00fd\u0161te mar\u017eu\/hodnotu objedn\u00e1vky.';\n\n    renderWaterfall(aov, marze, fixKonv, CPA, cistyZiskNaKonverzi, ltv, 0, vratkFrac);\n    document.getElementById('pno_chartGauge').innerHTML = '';\n    document.getElementById('pno_chartSensitivity').innerHTML = '';\n    document.getElementById('pno_chartSensTable').innerHTML = '';\n  }\n\n  function renderWaterfall(aov, marze, fixKonv, cpa, cistyZisk, ltv, feeNaKonv, vratkFrac) {\n    if (aov <= 0) { document.getElementById('pno_chartWaterfall').innerHTML = ''; return; }\n    var cogs = aov * (1 - marze \/ 100);\n    var hrubyZisk = aov - cogs;\n    var vratkyKc = cistyZisk * vratkFrac;\n    var cistyZiskEff = cistyZisk * (1 - vratkFrac);\n    var cistyZiskLTV = cistyZiskEff * ltv;\n    var ziskPoFee = cistyZiskLTV - feeNaKonv;\n    var zisk = ziskPoFee - cpa;\n\n    var scale = ltv > 1 ? cistyZiskLTV : aov;\n    if (scale <= 0) scale = aov;\n    function pct(v) { return Math.max(0, Math.min(100, (v \/ scale) * 100)); }\n\n    var rows = [\n      { label: 'Objedn\u00e1vka', left: 0, width: pct(aov), cls: 'neutral', fmt: fmtMoney(aov) },\n      { label: 'N\u00e1kupn\u00e1 cena', left: pct(hrubyZisk), width: pct(cogs), cls: 'negative', fmt: '\u2212' + fmtMoney(cogs) },\n      { label: 'Hrub\u00fd zisk', left: 0, width: pct(hrubyZisk), cls: 'positive', fmt: fmtMoney(hrubyZisk) },\n      { sep: true },\n      { label: 'Fixn\u00e9 n\u00e1klady', left: pct(Math.max(0, hrubyZisk - fixKonv)), width: pct(fixKonv), cls: 'negative', fmt: '\u2212' + fmtMoney(fixKonv) },\n      { label: '\u010cist\u00fd zisk', left: 0, width: pct(Math.max(0, cistyZisk)), cls: 'positive', fmt: fmtMoney(cistyZisk) }\n    ];\n\n    if (vratkFrac > 0) {\n      rows.push({ label: 'Vratky', left: pct(Math.max(0, cistyZisk - vratkyKc)), width: pct(vratkyKc), cls: 'negative', fmt: '\u2212' + fmtMoney(vratkyKc) });\n    }\n\n    if (ltv > 1) {\n      rows.push({ sep: true });\n      rows.push({ label: '\u00d7 opakovan\u00fd n\u00e1kup', left: 0, width: pct(Math.max(0, cistyZiskLTV)), cls: 'positive', fmt: fmtMoney(cistyZiskLTV) });\n    }\n\n    if (feeNaKonv > 0) {\n      var beforeFee = ltv > 1 ? cistyZiskLTV : cistyZiskEff;\n      rows.push({ label: 'Poplatok za spr\u00e1vu', left: pct(Math.max(0, beforeFee - feeNaKonv)), width: pct(feeNaKonv), cls: 'negative', fmt: '\u2212' + fmtMoney(feeNaKonv) });\n    }\n\n    rows.push({ sep: true });\n    rows.push({ label: 'Reklama', left: pct(Math.max(0, ziskPoFee - cpa)), width: pct(cpa), cls: 'negative', fmt: '\u2212' + fmtMoney(cpa) });\n    rows.push({ label: 'Zisk\/z\u00e1kazn\u00edk', left: 0, width: pct(Math.abs(zisk)), cls: zisk >= 0 ? 'result' : 'result negative', fmt: (zisk < 0 ? '\u2212' : '') + fmtMoney(Math.abs(zisk)) });\n\n    var html = '';\n    rows.forEach(function(r) {\n      if (r.sep) { html += '<div class=\"pno-custom-wf-row__sep\"><\/div>'; return; }\n      html += '<div class=\"pno-custom-wf-row pno-custom-wf-row--' + r.cls + '\">';\n      html += '<div class=\"pno-custom-wf-row__label\">' + r.label + '<\/div>';\n      html += '<div class=\"pno-custom-wf-row__track\"><div class=\"pno-custom-wf-row__bar\" style=\"left:' + r.left + '%;width:' + r.width + '%\"><\/div><\/div>';\n      html += '<div class=\"pno-custom-wf-row__val\">' + r.fmt + '<\/div>';\n      html += '<\/div>';\n    });\n    document.getElementById('pno_chartWaterfall').innerHTML = html;\n  }\n\n  function renderGauge(currentPno, breakevenPno, marze) {\n    var maxVal = Math.max(marze * 1.1, currentPno * 1.2, 10);\n    var cx = 120, cy = 110, r = 85;\n    var startAngle = Math.PI;\n\n    function valToAngle(v) {\n      var frac = Math.max(0, Math.min(1, v \/ maxVal));\n      return startAngle - frac * Math.PI;\n    }\n    function polarToCart(angle, radius) {\n      return { x: cx + radius * Math.cos(angle), y: cy - radius * Math.sin(angle) };\n    }\n    function arcPath(fromVal, toVal, innerR, outerR) {\n      var a1 = valToAngle(fromVal);\n      var a2 = valToAngle(toVal);\n      var p1 = polarToCart(a1, outerR);\n      var p2 = polarToCart(a2, outerR);\n      var p3 = polarToCart(a2, innerR);\n      var p4 = polarToCart(a1, innerR);\n      var large = Math.abs(a1 - a2) > Math.PI ? 1 : 0;\n      return 'M' + p1.x + ',' + p1.y +\n             ' A' + outerR + ',' + outerR + ' 0 ' + large + ' 1 ' + p2.x + ',' + p2.y +\n             ' L' + p3.x + ',' + p3.y +\n             ' A' + innerR + ',' + innerR + ' 0 ' + large + ' 0 ' + p4.x + ',' + p4.y + ' Z';\n    }\n\n    var innerR = 65, outerR = 88;\n    var svg = '<svg class=\"pno-custom-gauge-svg\" viewBox=\"0 0 240 135\">';\n\n    var safeZone = breakevenPno * 0.85;\n    if (safeZone > 0) {\n      svg += '<path d=\"' + arcPath(0, Math.min(safeZone, maxVal), innerR, outerR) + '\" fill=\"rgba(16,185,129,0.2)\"\/>';\n    }\n    if (marze > safeZone) {\n      svg += '<path d=\"' + arcPath(Math.max(0, safeZone), Math.min(marze, maxVal), innerR, outerR) + '\" fill=\"rgba(245,158,11,0.2)\"\/>';\n    }\n    if (maxVal > marze) {\n      svg += '<path d=\"' + arcPath(Math.max(0, marze), maxVal, innerR, outerR) + '\" fill=\"rgba(239,68,68,0.2)\"\/>';\n    }\n\n    var beAngle = valToAngle(marze);\n    var bt1 = polarToCart(beAngle, innerR - 3);\n    var bt2 = polarToCart(beAngle, outerR + 3);\n    svg += '<line x1=\"' + bt1.x + '\" y1=\"' + bt1.y + '\" x2=\"' + bt2.x + '\" y2=\"' + bt2.y + '\" stroke=\"var(--c-warn)\" stroke-width=\"2\" stroke-dasharray=\"3 2\"\/>';\n\n    if (marze > 0 && marze < maxVal) {\n      var beLabelPos = polarToCart(beAngle, outerR + 14);\n      svg += '<text x=\"' + beLabelPos.x + '\" y=\"' + beLabelPos.y + '\" class=\"pno-custom-sens-label-be\" text-anchor=\"middle\">Mar\u017ea ' + marze.toFixed(0) + '%<\/text>';\n    }\n\n    var needleAngle = valToAngle(Math.min(currentPno, maxVal));\n    var needleTip = polarToCart(needleAngle, outerR - 5);\n    var needleBase1 = polarToCart(needleAngle + 0.08, 15);\n    var needleBase2 = polarToCart(needleAngle - 0.08, 15);\n    svg += '<polygon points=\"' + needleTip.x + ',' + needleTip.y + ' ' +\n           (cx + needleBase1.x - cx) + ',' + (cy - (needleBase1.y - cy)) + ' ' +\n           (cx + needleBase2.x - cx) + ',' + (cy - (needleBase2.y - cy)) + '\" fill=\"var(--primary)\" opacity=\"0.8\"\/>';\n    svg += '<circle cx=\"' + cx + '\" cy=\"' + cy + '\" r=\"6\" fill=\"var(--primary)\"\/>';\n\n    svg += '<text x=\"' + cx + '\" y=\"' + (cy - 18) + '\" class=\"pno-custom-gauge-center\" font-size=\"22\">' + currentPno.toFixed(1).replace('.', ',') + '%<\/text>';\n    svg += '<text x=\"' + cx + '\" y=\"' + (cy - 6) + '\" class=\"pno-custom-gauge-center-label\">Podiel n\u00e1kladov na obrate<\/text>';\n    svg += '<\/svg>';\n    svg += '<div class=\"pno-custom-gauge-labels\"><span>0 %<\/span><span>' + maxVal.toFixed(0) + ' %<\/span><\/div>';\n\n    document.getElementById('pno_chartGauge').innerHTML = '<div class=\"pno-custom-gauge-wrap\">' + svg + '<\/div>';\n  }\n\n  function renderSensitivityChart(cilovyZisk, fixMesic, aov, marzeFrac, fixKonv, crFrac, cpc, ltv, vratkFrac, mesicniFee, currentRozpocet) {\n    if (aov <= 0 || crFrac <= 0 || cpc <= 0) { document.getElementById('pno_chartSensitivity').innerHTML = ''; return; }\n\n    var W = 340, H = 170;\n    var pad = { t: 15, r: 15, b: 25, l: 55 };\n    var cW = W - pad.l - pad.r;\n    var cH = H - pad.t - pad.b;\n\n    var maxZisk = cilovyZisk * 2;\n    var points = [];\n    var step = maxZisk \/ 100;\n\n    for (var z = 0; z <= maxZisk; z += step) {\n      var rozpocet = calcRozpocet(z, fixMesic, aov, marzeFrac, fixKonv, crFrac, cpc, ltv, vratkFrac, mesicniFee);\n      if (rozpocet !== null) points.push({ zisk: z, rozpocet: rozpocet });\n    }\n\n    if (points.length < 2) { document.getElementById('pno_chartSensitivity').innerHTML = ''; return; }\n\n    var maxR = 0;\n    points.forEach(function(p) { if (p.rozpocet > maxR) maxR = p.rozpocet; });\n    maxR = maxR * 1.1 || 1;\n\n    function x(z) { return pad.l + (z \/ maxZisk) * cW; }\n    function y(r) { return pad.t + (1 - r \/ maxR) * cH; }\n\n    var svg = '<svg class=\"pno-custom-sens-svg\" viewBox=\"0 0 ' + W + ' ' + H + '\">';\n\n    var gridStep = niceStep(maxR, 4);\n    for (var gv = 0; gv <= maxR; gv += gridStep) {\n      if (gv === 0) continue;\n      svg += '<line x1=\"' + pad.l + '\" y1=\"' + y(gv) + '\" x2=\"' + (W - pad.r) + '\" y2=\"' + y(gv) + '\" class=\"pno-custom-sens-grid\"\/>';\n      svg += '<text x=\"' + (pad.l - 5) + '\" y=\"' + (y(gv) + 3) + '\" class=\"pno-custom-sens-label\" text-anchor=\"end\">' + fmtK(gv) + '<\/text>';\n    }\n\n    var area = 'M' + x(points[0].zisk) + ',' + y(0);\n    points.forEach(function(pt) { area += ' L' + x(pt.zisk) + ',' + y(pt.rozpocet); });\n    area += ' L' + x(points[points.length - 1].zisk) + ',' + y(0) + ' Z';\n    svg += '<path d=\"' + area + '\" fill=\"rgba(79,70,229,0.08)\"\/>';\n\n    var line = '';\n    points.forEach(function(pt, i) { line += (i === 0 ? 'M' : ' L') + x(pt.zisk) + ',' + y(pt.rozpocet); });\n    svg += '<path d=\"' + line + '\" class=\"pno-custom-sens-line\"\/>';\n\n    if (currentRozpocet > 0 && cilovyZisk > 0) {\n      svg += '<circle cx=\"' + x(cilovyZisk) + '\" cy=\"' + y(currentRozpocet) + '\" r=\"4\" class=\"pno-custom-sens-dot--current\"\/>';\n      svg += '<text x=\"' + (x(cilovyZisk) + 6) + '\" y=\"' + (y(currentRozpocet) - 5) + '\" class=\"pno-custom-sens-label-val\">' + fmtK(currentRozpocet) + '<\/text>';\n    }\n\n    svg += '<\/svg>';\n    document.getElementById('pno_chartSensitivity').innerHTML = svg;\n  }\n\n  function calcRozpocet(cilovyZisk, fixMesic, aov, marzeFrac, fixKonv, crFrac, cpc, ltv, vratkFrac, mesicniFee) {\n    var hrubyZisk = aov * marzeFrac;\n    var cistyZisk = hrubyZisk - fixKonv;\n    var cistyZiskEff = cistyZisk * (1 - vratkFrac);\n    var cistyZiskLTV = cistyZiskEff * ltv;\n    var CPA = cpc \/ crFrac;\n    var zisk = cistyZiskLTV - CPA;\n    if (zisk <= 0) return null;\n\n    var konverze = (cilovyZisk + fixMesic) \/ zisk;\n    if (mesicniFee > 0 && konverze > 0) {\n      var feeNaKonv = mesicniFee \/ konverze;\n      zisk = cistyZiskLTV - CPA - feeNaKonv;\n      if (zisk <= 0) return null;\n      konverze = (cilovyZisk + fixMesic) \/ zisk;\n    }\n    return konverze * CPA;\n  }\n\n  function renderSensTable(cilovyZisk, fixMesic, aov, marzeFrac, fixKonv, crFrac, cpc, ltv, vratkFrac, mesicniFee) {\n    if (aov <= 0 || crFrac <= 0 || cpc <= 0) { document.getElementById('pno_chartSensTable').innerHTML = ''; return; }\n\n    var scenarios = [\n      { label: 'Cena za kliknutie', vals: [cpc * 0.8, cpc, cpc * 1.2], param: 'cpc' },\n      { label: 'Konverzn\u00fd pomer', vals: [crFrac * 0.8, crFrac, crFrac * 1.2], param: 'cr' },\n      { label: 'Priemern\u00e1 hodnota objedn\u00e1vky', vals: [aov * 0.8, aov, aov * 1.2], param: 'aov' }\n    ];\n\n    var html = '<table class=\"pno-custom-sens-table\">';\n    html += '<thead><tr><th><\/th><th>\u221220 %<\/th><th>S\u00fa\u010dasnos\u0165<\/th><th>+20 %<\/th><\/tr><\/thead><tbody>';\n\n    scenarios.forEach(function(s) {\n      html += '<tr><td>' + s.label + '<\/td>';\n      s.vals.forEach(function(v, i) {\n        var r;\n        if (s.param === 'cpc') r = calcRozpocet(cilovyZisk, fixMesic, aov, marzeFrac, fixKonv, crFrac, v, ltv, vratkFrac, mesicniFee);\n        else if (s.param === 'cr') r = calcRozpocet(cilovyZisk, fixMesic, aov, marzeFrac, fixKonv, v, cpc, ltv, vratkFrac, mesicniFee);\n        else r = calcRozpocet(cilovyZisk, fixMesic, v, marzeFrac, fixKonv, crFrac, cpc, ltv, vratkFrac, mesicniFee);\n\n        var cls = i === 1 ? ' class=\"pno-custom-sens-table__highlight\"' : '';\n        var val = r !== null ? fmtMoney(r) : '\u2014';\n        html += '<td' + cls + '>' + val + '<\/td>';\n      });\n      html += '<\/tr>';\n    });\n\n    html += '<\/tbody><\/table>';\n    document.getElementById('pno_chartSensTable').innerHTML = html;\n  }\n\n  function niceStep(range, maxTicks) {\n    var rough = range \/ maxTicks;\n    if (rough <= 0) return 1;\n    var pow = Math.pow(10, Math.floor(Math.log10(rough)));\n    var norm = rough \/ pow;\n    var nice = norm <= 1.5 ? 1 : norm <= 3 ? 2 : norm <= 7 ? 5 : 10;\n    return nice * pow;\n  }\n\n  function fmtK(n) {\n    var sym = currency === 'CZK' ? 'K\u010d' : '\u20ac';\n    if (Math.abs(n) >= 1000000) return (n \/ 1000000).toFixed(1).replace('.', ',') + 'M ' + sym;\n    if (Math.abs(n) >= 1000) return (n \/ 1000).toFixed(0) + 'k ' + sym;\n    return Math.round(n).toString() + ' ' + sym;\n  }\n\n  calculate();\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Kalkula\u010dka pl\u00e1novania zisku Mena: EUR (\u20ac) CZK (K\u010d) \u010co kalkula\u010dka vypo\u010d\u00edta? Tento n\u00e1stroj na z\u00e1klade v\u00e1\u0161ho cie\u013eov\u00e9ho \u010dist\u00e9ho zisku ur\u010d\u00ed potrebn\u00fd reklamn\u00fd rozpo\u010det, po\u010det objedn\u00e1vok a po\u017eadovan\u00fd obrat. Hlavn\u00e9 ukazovatele: Potrebn\u00fd reklamn\u00fd rozpo\u010det: Mesa\u010dn\u00e9 n\u00e1klady na reklamu pre dosiahnutie cie\u013eov\u00e9ho zisku. Potrebn\u00e9 objedn\u00e1vky: Po\u010det dokon\u010den\u00fdch n\u00e1kupov za mesiac. Podiel n\u00e1kladov na obrate: Percentu\u00e1lny podiel reklamn\u00fdch [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":0,"parent":54916,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"_seopress_titles_title":"","_seopress_titles_desc":"","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"","_seopress_redirections_param":"","_seopress_redirections_type":0,"_seopress_analysis_target_kw":"","_seopress_news_disabled":"","_seopress_video_disabled":"","_seopress_video":[],"_seopress_pro_schemas_manual":[],"_seopress_pro_rich_snippets_disable_all":"","_seopress_pro_rich_snippets_disable":[],"_seopress_pro_schemas":[],"footnotes":""},"class_list":["post-55619","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/am-business.eu\/sk\/wp-json\/wp\/v2\/pages\/55619","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/am-business.eu\/sk\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/am-business.eu\/sk\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/am-business.eu\/sk\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/am-business.eu\/sk\/wp-json\/wp\/v2\/comments?post=55619"}],"version-history":[{"count":4,"href":"https:\/\/am-business.eu\/sk\/wp-json\/wp\/v2\/pages\/55619\/revisions"}],"predecessor-version":[{"id":55623,"href":"https:\/\/am-business.eu\/sk\/wp-json\/wp\/v2\/pages\/55619\/revisions\/55623"}],"up":[{"embeddable":true,"href":"https:\/\/am-business.eu\/sk\/wp-json\/wp\/v2\/pages\/54916"}],"wp:attachment":[{"href":"https:\/\/am-business.eu\/sk\/wp-json\/wp\/v2\/media?parent=55619"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}