{"id":2406,"date":"2024-05-09T11:25:03","date_gmt":"2024-05-09T11:25:03","guid":{"rendered":"https:\/\/www.zlati.legal\/?p=2406"},"modified":"2025-12-28T16:32:23","modified_gmt":"2025-12-28T16:32:23","slug":"calcul-concursul-de-infractiuni","status":"publish","type":"post","link":"https:\/\/zic.legal\/ro\/calcul-concursul-de-infractiuni\/","title":{"rendered":"Concursul de infrac\u021biuni \u00een Codul penal rom\u00e2n: Explica\u021bii \u0219i exemple practice"},"content":{"rendered":"<div id=\"zic-concurs-calculator-v2\" class=\"zic2\" data-zic2=\"1\">\r\n  <div class=\"zic2__wrap\">\r\n    <!-- Header -->\r\n    <header class=\"zic2__hero\">\r\n      <div class=\"zic2__brandbar\">\r\n        <div class=\"zic2__mark\" aria-hidden=\"true\">\r\n          <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n            <path d=\"M12 2L2 7l10 5 10-5-10-5z\"\/>\r\n            <path d=\"M2 17l10 5 10-5\"\/>\r\n            <path d=\"M2 12l10 5 10-5\"\/>\r\n          <\/svg>\r\n        <\/div>\r\n        <div class=\"zic2__headerText\">\r\n          <h2 class=\"zic2__title\">Calculator concurs de infrac\u021biuni<\/h2>\r\n          <p class=\"zic2__subtitle\">Calculeaz\u0103 pedeapsa rezultant\u0103 conform art. 39 Cod penal<\/p>\r\n        <\/div>\r\n      <\/div>\r\n    <\/header>\r\n\r\n    <!-- Formula info -->\r\n    <div class=\"zic2__formula\">\r\n      <div class=\"zic2__formulaIcon\">\r\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n          <circle cx=\"12\" cy=\"12\" r=\"10\"\/>\r\n          <path d=\"M12 16v-4\"\/>\r\n          <path d=\"M12 8h.01\"\/>\r\n        <\/svg>\r\n      <\/div>\r\n      <div class=\"zic2__formulaText\">\r\n        <strong>Formula:<\/strong> Pedeapsa cea mai grea + 1\/3 din totalul celorlalte pedepse\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- Card 1: Pedepse -->\r\n    <section class=\"zic2__card\" aria-labelledby=\"zic2-sec-pedepse\">\r\n      <div class=\"zic2__cardHeader\">\r\n        <div class=\"zic2__cardIcon zic2__cardIcon--purple\">\r\n          <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n            <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\"\/>\r\n            <path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/>\r\n          <\/svg>\r\n        <\/div>\r\n        <h3 id=\"zic2-sec-pedepse\" class=\"zic2__cardTitle\">Pedepse<\/h3>\r\n      <\/div>\r\n\r\n      <div class=\"zic2__btnGroup\">\r\n        <button type=\"button\" class=\"zic2__btn zic2__btn--outline\" data-action=\"add-prison\">\r\n          <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><path d=\"M12 5v14M5 12h14\"\/><\/svg>\r\n          \u00cenchisoare\r\n        <\/button>\r\n        <button type=\"button\" class=\"zic2__btn zic2__btn--outline\" data-action=\"add-fine\">\r\n          <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><path d=\"M12 5v14M5 12h14\"\/><\/svg>\r\n          Amend\u0103\r\n        <\/button>\r\n        <button type=\"button\" class=\"zic2__btn zic2__btn--success\" data-action=\"example\">\r\n          <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"\/><polyline points=\"14 2 14 8 20 8\"\/><line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"\/><line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"\/><\/svg>\r\n          Exemplu\r\n        <\/button>\r\n      <\/div>\r\n\r\n      <!-- Pedepse cu inchisoarea -->\r\n      <div class=\"zic2__section\">\r\n        <div class=\"zic2__sectionHeader\">\r\n          <span class=\"zic2__sectionTitle\">Pedepse cu \u00eenchisoarea<\/span>\r\n          <span class=\"zic2__badge\" data-live=\"prisonCount\">0<\/span>\r\n        <\/div>\r\n        <div class=\"zic2__rows\" data-rows=\"prison\"><\/div>\r\n        <div class=\"zic2__emptyState\" data-empty=\"prison\">\r\n          <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"><rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg>\r\n          <span>Adaug\u0103 o pedeaps\u0103 cu \u00eenchisoarea<\/span>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <!-- Amenzi -->\r\n      <div class=\"zic2__section\">\r\n        <div class=\"zic2__sectionHeader\">\r\n          <span class=\"zic2__sectionTitle\">Amenzi<\/span>\r\n          <span class=\"zic2__badge\" data-live=\"fineCount\">0<\/span>\r\n        <\/div>\r\n        <div class=\"zic2__rows\" data-rows=\"fine\"><\/div>\r\n        <div class=\"zic2__emptyState\" data-empty=\"fine\">\r\n          <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"><line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"23\"\/><path d=\"M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6\"\/><\/svg>\r\n          <span>Adaug\u0103 o amend\u0103 (op\u021bional)<\/span>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"zic2__error is-hidden\" role=\"alert\" aria-live=\"polite\" data-error=\"prison\"><\/div>\r\n\r\n      <!-- Hint -->\r\n      <div class=\"zic2__hint\">\r\n        <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><path d=\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\"\/><path d=\"M12 17h.01\"\/><\/svg>\r\n        <span>La <strong>\"Max lege\"<\/strong> completeaz\u0103 maximul special al infrac\u021biunii pentru verificarea art. 39 alin. (2).<\/span>\r\n      <\/div>\r\n    <\/section>\r\n\r\n    <!-- Card 2: Deduceri -->\r\n    <section class=\"zic2__card\" aria-labelledby=\"zic2-sec-deduceri\">\r\n      <div class=\"zic2__cardHeader\">\r\n        <div class=\"zic2__cardIcon zic2__cardIcon--blue\">\r\n          <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n            <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/>\r\n          <\/svg>\r\n        <\/div>\r\n        <h3 id=\"zic2-sec-deduceri\" class=\"zic2__cardTitle\">Deduceri <span class=\"zic2__optional\">(op\u021bional)<\/span><\/h3>\r\n      <\/div>\r\n\r\n      <div class=\"zic2__deduceriGrid\">\r\n        <div class=\"zic2__deduceriBox\">\r\n          <div class=\"zic2__deduceriLabel\">Durat\u0103 executat\u0103 \/ re\u021binere<\/div>\r\n          <div class=\"zic2__inputGroup\">\r\n            <div class=\"zic2__field\">\r\n              <label class=\"zic2__label\" for=\"zic2-ded-ani\">Ani<\/label>\r\n              <input id=\"zic2-ded-ani\" class=\"zic2__input\" type=\"number\" min=\"0\" max=\"100\" inputmode=\"numeric\" placeholder=\"0\" autocomplete=\"off\">\r\n            <\/div>\r\n            <div class=\"zic2__field\">\r\n              <label class=\"zic2__label\" for=\"zic2-ded-luni\">Luni<\/label>\r\n              <input id=\"zic2-ded-luni\" class=\"zic2__input\" type=\"number\" min=\"0\" max=\"11\" inputmode=\"numeric\" placeholder=\"0\" autocomplete=\"off\">\r\n            <\/div>\r\n            <div class=\"zic2__field\">\r\n              <label class=\"zic2__label\" for=\"zic2-ded-zile\">Zile<\/label>\r\n              <input id=\"zic2-ded-zile\" class=\"zic2__input\" type=\"number\" min=\"0\" max=\"29\" inputmode=\"numeric\" placeholder=\"0\" autocomplete=\"off\">\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"zic2__deduceriBox\">\r\n          <div class=\"zic2__deduceriLabel\">Amend\u0103 achitat\u0103<\/div>\r\n          <div class=\"zic2__field\">\r\n            <label class=\"zic2__label\" for=\"zic2-amenda-dedusa\">Sum\u0103 (lei)<\/label>\r\n            <input id=\"zic2-amenda-dedusa\" class=\"zic2__input\" type=\"number\" min=\"0\" max=\"999999999\" inputmode=\"numeric\" placeholder=\"0\" autocomplete=\"off\">\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/section>\r\n\r\n    <!-- Actions -->\r\n    <div class=\"zic2__actions\">\r\n      <button type=\"button\" class=\"zic2__btn zic2__btn--primary zic2__btn--large\" data-action=\"calculate\">\r\n        <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><polyline points=\"9 11 12 14 22 4\"\/><path d=\"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11\"\/><\/svg>\r\n        Calculeaz\u0103\r\n      <\/button>\r\n      <button type=\"button\" class=\"zic2__btn zic2__btn--secondary\" data-action=\"reset\">\r\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\"\/><path d=\"M3 3v5h5\"\/><\/svg>\r\n        Reseteaz\u0103\r\n      <\/button>\r\n      <button type=\"button\" class=\"zic2__btn zic2__btn--secondary\" data-action=\"export-pdf\">\r\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"\/><polyline points=\"14 2 14 8 20 8\"\/><path d=\"M12 18v-6\"\/><path d=\"M9 15l3 3 3-3\"\/><\/svg>\r\n        Descarc\u0103 PDF\r\n      <\/button>\r\n    <\/div>\r\n\r\n    <!-- Result -->\r\n    <section class=\"zic2__card zic2__resultCard is-hidden\" data-result aria-live=\"polite\">\r\n      <div class=\"zic2__cardHeader\">\r\n        <div class=\"zic2__cardIcon zic2__cardIcon--green\">\r\n          <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg>\r\n        <\/div>\r\n        <h3 class=\"zic2__cardTitle\">Rezultat calcul<\/h3>\r\n      <\/div>\r\n      <div class=\"zic2__resultBody\" data-result-content><\/div>\r\n    <\/section>\r\n\r\n    <!-- Disclaimer -->\r\n    <div class=\"zic2__disclaimer\">\r\n      <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"\/><line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"\/><line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"\/><\/svg>\r\n      <div>\r\n        <strong>Disclaimer:<\/strong> Acest calculator este oferit exclusiv \u00een scop informativ \u0219i educativ. Rezultatele generate nu constituie consultan\u021b\u0103 juridic\u0103 \u0219i nu pot \u00eenlocui sfatul unui avocat specializat.\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- Footer -->\r\n    <footer class=\"zic2__footer\">\r\n      <a href=\"https:\/\/zic.legal\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"zic2__footerLink\">\r\n        \u00a9 2025 ZIC Legal\r\n      <\/a>\r\n    <\/footer>\r\n  <\/div>\r\n<\/div>\r\n\r\n<style>\r\n\/* ============================================================\r\n   ZIC Calculator v3.0 - Concurs de Infrac\u021biuni (SECURIZAT)\r\n   Theme: Purple\/Mov | Fully Responsive | Optimized\r\n   Security: XSS Protection, Input Validation, Safe DOM\r\n   ============================================================ *\/\r\n\r\n\/* === CSS Variables === *\/\r\n#zic-concurs-calculator-v2 {\r\n  --zic-primary: #8A88FF;\r\n  --zic-primary-dark: #6F6CFF;\r\n  --zic-primary-light: rgba(138,136,255,.08);\r\n  --zic-primary-border: rgba(138,136,255,.25);\r\n\r\n  --zic-success: #10B981;\r\n  --zic-success-light: rgba(16,185,129,.08);\r\n  --zic-success-border: rgba(16,185,129,.25);\r\n\r\n  --zic-danger: #EF4444;\r\n  --zic-danger-light: rgba(239,68,68,.08);\r\n  --zic-danger-border: rgba(239,68,68,.25);\r\n\r\n  --zic-warning: #F59E0B;\r\n  --zic-warning-light: rgba(245,158,11,.08);\r\n  --zic-warning-border: rgba(245,158,11,.25);\r\n\r\n  --zic-blue: #3B82F6;\r\n  --zic-blue-light: rgba(59,130,246,.08);\r\n\r\n  --zic-ink: #1F2937;\r\n  --zic-ink-light: #374151;\r\n  --zic-muted: #6B7280;\r\n  --zic-light: #9CA3AF;\r\n\r\n  --zic-bg: #F9FAFB;\r\n  --zic-surface: #FFFFFF;\r\n  --zic-border: #E5E7EB;\r\n\r\n  --zic-shadow-sm: 0 1px 2px rgba(0,0,0,.05);\r\n  --zic-shadow: 0 4px 6px -1px rgba(0,0,0,.1), 0 2px 4px -1px rgba(0,0,0,.06);\r\n  --zic-shadow-lg: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -2px rgba(0,0,0,.05);\r\n\r\n  --zic-radius: 16px;\r\n  --zic-radius-sm: 12px;\r\n  --zic-radius-xs: 8px;\r\n\r\n  --zic-transition: 150ms ease;\r\n\r\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\r\n  color: var(--zic-ink);\r\n  line-height: 1.5;\r\n  -webkit-font-smoothing: antialiased;\r\n}\r\n\r\n#zic-concurs-calculator-v2 *,\r\n#zic-concurs-calculator-v2 *::before,\r\n#zic-concurs-calculator-v2 *::after {\r\n  box-sizing: border-box;\r\n}\r\n\r\n\/* === WordPress\/Avada Override Protection === *\/\r\n#zic-concurs-calculator-v2 input[type=\"number\"],\r\n#zic-concurs-calculator-v2 input[type=\"text\"] {\r\n  -webkit-appearance: none !important;\r\n  -moz-appearance: textfield !important;\r\n  appearance: none !important;\r\n  background-image: none !important;\r\n  box-shadow: none !important;\r\n}\r\n\r\n#zic-concurs-calculator-v2 button:not(.zic2__btn--primary) {\r\n  background-image: none !important;\r\n}\r\n\r\n#zic-concurs-calculator-v2 button {\r\n  text-shadow: none !important;\r\n  letter-spacing: normal !important;\r\n}\r\n\r\n#zic-concurs-calculator-v2 h2,\r\n#zic-concurs-calculator-v2 h3 {\r\n  text-transform: none !important;\r\n  letter-spacing: normal !important;\r\n}\r\n\r\n#zic-concurs-calculator-v2 a {\r\n  text-decoration: none;\r\n}\r\n\r\n#zic-concurs-calculator-v2 a:hover {\r\n  text-decoration: underline;\r\n}\r\n\r\n\/* === Layout === *\/\r\n#zic-concurs-calculator-v2 .zic2__wrap {\r\n  max-width: 720px;\r\n  margin: 0 auto;\r\n  padding: 16px;\r\n}\r\n\r\n\/* === Header === *\/\r\n#zic-concurs-calculator-v2 .zic2__hero {\r\n  margin-bottom: 16px;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__brandbar {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 14px;\r\n  background: linear-gradient(135deg, var(--zic-primary), var(--zic-primary-dark));\r\n  border-radius: var(--zic-radius);\r\n  padding: 20px;\r\n  color: #fff;\r\n  box-shadow: var(--zic-shadow-lg);\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__mark {\r\n  width: 48px;\r\n  height: 48px;\r\n  background: rgba(255,255,255,.2);\r\n  border-radius: 12px;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  flex-shrink: 0;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__headerText {\r\n  flex: 1;\r\n  min-width: 0;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__title {\r\n  margin: 0;\r\n  font-size: 20px;\r\n  font-weight: 700;\r\n  line-height: 1.2;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__subtitle {\r\n  margin: 4px 0 0;\r\n  font-size: 14px;\r\n  opacity: 0.9;\r\n}\r\n\r\n\/* === Formula Box === *\/\r\n#zic-concurs-calculator-v2 .zic2__formula {\r\n  display: flex;\r\n  align-items: flex-start;\r\n  gap: 10px;\r\n  background: var(--zic-primary-light);\r\n  border: 1px solid var(--zic-primary-border);\r\n  border-radius: var(--zic-radius-sm);\r\n  padding: 12px 14px;\r\n  margin-bottom: 16px;\r\n  font-size: 14px;\r\n  color: var(--zic-ink-light);\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__formulaIcon {\r\n  color: var(--zic-primary-dark);\r\n  flex-shrink: 0;\r\n  margin-top: 1px;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__formulaText strong {\r\n  color: var(--zic-ink);\r\n}\r\n\r\n\/* === Cards === *\/\r\n#zic-concurs-calculator-v2 .zic2__card {\r\n  background: var(--zic-surface);\r\n  border: 1px solid var(--zic-border);\r\n  border-radius: var(--zic-radius);\r\n  padding: 20px;\r\n  margin-bottom: 16px;\r\n  box-shadow: var(--zic-shadow-sm);\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__cardHeader {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 12px;\r\n  margin-bottom: 16px;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__cardIcon {\r\n  width: 36px;\r\n  height: 36px;\r\n  border-radius: 10px;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  flex-shrink: 0;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__cardIcon--purple {\r\n  background: var(--zic-primary-light);\r\n  color: var(--zic-primary-dark);\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__cardIcon--blue {\r\n  background: var(--zic-blue-light);\r\n  color: var(--zic-blue);\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__cardIcon--green {\r\n  background: var(--zic-success-light);\r\n  color: var(--zic-success);\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__cardTitle {\r\n  margin: 0;\r\n  font-size: 17px;\r\n  font-weight: 700;\r\n  color: var(--zic-ink);\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__optional {\r\n  font-weight: 400;\r\n  color: var(--zic-muted);\r\n  font-size: 14px;\r\n}\r\n\r\n\/* === Buttons === *\/\r\n#zic-concurs-calculator-v2 .zic2__btnGroup {\r\n  display: flex;\r\n  flex-wrap: wrap;\r\n  gap: 8px;\r\n  margin-bottom: 20px;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__btn {\r\n  display: inline-flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  gap: 6px;\r\n  padding: 10px 16px;\r\n  font-size: 14px;\r\n  font-weight: 600;\r\n  border-radius: var(--zic-radius-sm);\r\n  border: 1px solid transparent;\r\n  cursor: pointer;\r\n  transition: all var(--zic-transition);\r\n  white-space: nowrap;\r\n  text-decoration: none;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__btn:focus {\r\n  outline: none;\r\n  box-shadow: 0 0 0 3px var(--zic-primary-border);\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__btn:active {\r\n  transform: translateY(1px);\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__btn--primary {\r\n  background: linear-gradient(135deg, var(--zic-primary), var(--zic-primary-dark));\r\n  color: #fff;\r\n  box-shadow: 0 4px 14px rgba(138,136,255,.35);\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__btn--primary:hover {\r\n  box-shadow: 0 6px 20px rgba(138,136,255,.45);\r\n  transform: translateY(-1px);\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__btn--large {\r\n  padding: 14px 24px;\r\n  font-size: 15px;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__btn--secondary {\r\n  background: var(--zic-surface);\r\n  border-color: var(--zic-border);\r\n  color: var(--zic-ink-light);\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__btn--secondary:hover {\r\n  background: var(--zic-bg);\r\n  border-color: var(--zic-primary-border);\r\n  color: var(--zic-primary-dark);\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__btn--outline {\r\n  background: var(--zic-surface);\r\n  border-color: var(--zic-primary-border);\r\n  color: var(--zic-primary-dark);\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__btn--outline:hover {\r\n  background: var(--zic-primary-light);\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__btn--success {\r\n  background: var(--zic-success-light);\r\n  border-color: var(--zic-success-border);\r\n  color: var(--zic-success);\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__btn--success:hover {\r\n  background: rgba(16,185,129,.15);\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__btn--danger {\r\n  background: var(--zic-danger-light);\r\n  border-color: var(--zic-danger-border);\r\n  color: var(--zic-danger);\r\n  padding: 8px 12px;\r\n  font-size: 13px;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__btn--danger:hover {\r\n  background: rgba(239,68,68,.15);\r\n}\r\n\r\n\/* === Sections === *\/\r\n#zic-concurs-calculator-v2 .zic2__section {\r\n  margin-bottom: 20px;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__section:last-of-type {\r\n  margin-bottom: 16px;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__sectionHeader {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n  margin-bottom: 10px;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__sectionTitle {\r\n  font-size: 13px;\r\n  font-weight: 700;\r\n  color: var(--zic-primary-dark);\r\n  text-transform: uppercase;\r\n  letter-spacing: 0.5px;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__badge {\r\n  display: inline-flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  min-width: 24px;\r\n  height: 24px;\r\n  padding: 0 8px;\r\n  background: var(--zic-primary-light);\r\n  color: var(--zic-primary-dark);\r\n  font-size: 12px;\r\n  font-weight: 700;\r\n  border-radius: 12px;\r\n}\r\n\r\n\/* === Rows (Pedepse) === *\/\r\n#zic-concurs-calculator-v2 .zic2__rows {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 10px;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__row {\r\n  background: var(--zic-bg);\r\n  border: 1px solid var(--zic-border);\r\n  border-radius: var(--zic-radius-sm);\r\n  padding: 14px;\r\n  transition: border-color var(--zic-transition);\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__row:hover {\r\n  border-color: var(--zic-primary-border);\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__rowHeader {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n  margin-bottom: 12px;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__rowTag {\r\n  display: inline-flex;\r\n  align-items: center;\r\n  gap: 6px;\r\n  font-size: 13px;\r\n  font-weight: 700;\r\n  color: var(--zic-ink-light);\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__rowTag svg {\r\n  color: var(--zic-muted);\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__rowGrid {\r\n  display: grid;\r\n  grid-template-columns: 1fr 1fr;\r\n  gap: 10px;\r\n}\r\n\r\n\/* === Empty State === *\/\r\n#zic-concurs-calculator-v2 .zic2__emptyState {\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: center;\r\n  justify-content: center;\r\n  gap: 8px;\r\n  padding: 24px;\r\n  background: var(--zic-bg);\r\n  border: 2px dashed var(--zic-border);\r\n  border-radius: var(--zic-radius-sm);\r\n  color: var(--zic-light);\r\n  font-size: 13px;\r\n  text-align: center;\r\n}\r\n\r\n\/* === Hint === *\/\r\n#zic-concurs-calculator-v2 .zic2__hint {\r\n  display: flex;\r\n  align-items: flex-start;\r\n  gap: 8px;\r\n  padding: 10px 12px;\r\n  background: var(--zic-bg);\r\n  border-radius: var(--zic-radius-xs);\r\n  font-size: 12px;\r\n  color: var(--zic-muted);\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__hint svg {\r\n  flex-shrink: 0;\r\n  margin-top: 1px;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__hint strong {\r\n  color: var(--zic-ink-light);\r\n}\r\n\r\n\/* === Fields === *\/\r\n#zic-concurs-calculator-v2 .zic2__field {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 4px;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__label {\r\n  font-size: 12px;\r\n  font-weight: 600;\r\n  color: var(--zic-muted);\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__input {\r\n  width: 100%;\r\n  padding: 10px 12px;\r\n  font-size: 15px;\r\n  font-family: inherit;\r\n  color: var(--zic-ink);\r\n  background: var(--zic-surface);\r\n  border: 2px solid var(--zic-border);\r\n  border-radius: var(--zic-radius-xs);\r\n  outline: none;\r\n  transition: border-color var(--zic-transition), box-shadow var(--zic-transition);\r\n  -moz-appearance: textfield;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__input::-webkit-outer-spin-button,\r\n#zic-concurs-calculator-v2 .zic2__input::-webkit-inner-spin-button {\r\n  -webkit-appearance: none;\r\n  margin: 0;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__input::placeholder {\r\n  color: var(--zic-light);\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__input:focus {\r\n  border-color: var(--zic-primary);\r\n  box-shadow: 0 0 0 3px var(--zic-primary-light);\r\n}\r\n\r\n\/* === Deduceri Grid === *\/\r\n#zic-concurs-calculator-v2 .zic2__deduceriGrid {\r\n  display: grid;\r\n  gap: 16px;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__deduceriBox {\r\n  background: var(--zic-bg);\r\n  border-radius: var(--zic-radius-sm);\r\n  padding: 14px;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__deduceriLabel {\r\n  font-size: 13px;\r\n  font-weight: 700;\r\n  color: var(--zic-ink-light);\r\n  margin-bottom: 10px;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__inputGroup {\r\n  display: grid;\r\n  grid-template-columns: repeat(3, 1fr);\r\n  gap: 10px;\r\n}\r\n\r\n\/* === Actions === *\/\r\n#zic-concurs-calculator-v2 .zic2__actions {\r\n  display: flex;\r\n  flex-wrap: wrap;\r\n  gap: 10px;\r\n  margin-bottom: 16px;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__actions .zic2__btn--primary {\r\n  flex: 1;\r\n  min-width: 200px;\r\n}\r\n\r\n\/* === Error === *\/\r\n#zic-concurs-calculator-v2 .zic2__error {\r\n  margin-top: 12px;\r\n  padding: 12px;\r\n  background: var(--zic-danger-light);\r\n  border: 1px solid var(--zic-danger-border);\r\n  border-radius: var(--zic-radius-xs);\r\n  color: var(--zic-danger);\r\n  font-size: 13px;\r\n  font-weight: 500;\r\n}\r\n\r\n\/* === Result === *\/\r\n#zic-concurs-calculator-v2 .zic2__resultCard {\r\n  border-color: var(--zic-success-border);\r\n  background: linear-gradient(135deg, rgba(16,185,129,.02), rgba(16,185,129,.06));\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__resultBody {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 16px;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__kpi {\r\n  background: var(--zic-surface);\r\n  border: 1px solid var(--zic-border);\r\n  border-radius: var(--zic-radius-sm);\r\n  padding: 16px;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__kpiLabel {\r\n  font-size: 12px;\r\n  font-weight: 600;\r\n  color: var(--zic-muted);\r\n  text-transform: uppercase;\r\n  letter-spacing: 0.5px;\r\n  margin-bottom: 6px;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__kpiValue {\r\n  font-size: 22px;\r\n  font-weight: 800;\r\n  color: var(--zic-primary-dark);\r\n  margin: 0;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__detailsList {\r\n  margin: 0;\r\n  padding-left: 20px;\r\n  font-size: 14px;\r\n  color: var(--zic-ink-light);\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__detailsList li {\r\n  margin-bottom: 6px;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__detailsList li:last-child {\r\n  margin-bottom: 0;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__alert {\r\n  display: flex;\r\n  align-items: flex-start;\r\n  gap: 10px;\r\n  padding: 12px 14px;\r\n  border-radius: var(--zic-radius-xs);\r\n  font-size: 13px;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__alert--warning {\r\n  background: var(--zic-warning-light);\r\n  border: 1px solid var(--zic-warning-border);\r\n  color: #92400E;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__alert--danger {\r\n  background: var(--zic-danger-light);\r\n  border: 1px solid var(--zic-danger-border);\r\n  color: var(--zic-danger);\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__alert svg {\r\n  flex-shrink: 0;\r\n  margin-top: 1px;\r\n}\r\n\r\n\/* === Disclaimer === *\/\r\n#zic-concurs-calculator-v2 .zic2__disclaimer {\r\n  display: flex;\r\n  align-items: flex-start;\r\n  gap: 10px;\r\n  padding: 14px;\r\n  background: var(--zic-bg);\r\n  border: 1px solid var(--zic-border);\r\n  border-radius: var(--zic-radius-sm);\r\n  font-size: 12px;\r\n  color: var(--zic-muted);\r\n  line-height: 1.5;\r\n  margin-bottom: 16px;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__disclaimer svg {\r\n  flex-shrink: 0;\r\n  color: var(--zic-warning);\r\n  margin-top: 1px;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__disclaimer strong {\r\n  color: var(--zic-ink-light);\r\n}\r\n\r\n\/* === Footer === *\/\r\n#zic-concurs-calculator-v2 .zic2__footer {\r\n  text-align: center;\r\n  padding: 8px 0;\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__footerLink {\r\n  color: var(--zic-primary-dark);\r\n  text-decoration: none;\r\n  font-size: 13px;\r\n  font-weight: 600;\r\n  transition: color var(--zic-transition);\r\n}\r\n\r\n#zic-concurs-calculator-v2 .zic2__footerLink:hover {\r\n  color: var(--zic-primary);\r\n  text-decoration: underline;\r\n}\r\n\r\n\/* === Utility === *\/\r\n#zic-concurs-calculator-v2 .is-hidden {\r\n  display: none !important;\r\n}\r\n\r\n\/* === RESPONSIVE === *\/\r\n\r\n\/* Small mobile (max 500px) *\/\r\n@media (max-width: 500px) {\r\n  #zic-concurs-calculator-v2 .zic2__actions {\r\n    flex-direction: column;\r\n  }\r\n\r\n  #zic-concurs-calculator-v2 .zic2__actions .zic2__btn {\r\n    width: 100%;\r\n    min-width: unset;\r\n  }\r\n\r\n  #zic-concurs-calculator-v2 .zic2__btnGroup {\r\n    flex-direction: column;\r\n  }\r\n\r\n  #zic-concurs-calculator-v2 .zic2__btnGroup .zic2__btn {\r\n    width: 100%;\r\n  }\r\n\r\n  #zic-concurs-calculator-v2 .zic2__rowGrid {\r\n    grid-template-columns: 1fr !important;\r\n  }\r\n\r\n  #zic-concurs-calculator-v2 .zic2__inputGroup {\r\n    grid-template-columns: 1fr;\r\n  }\r\n\r\n  #zic-concurs-calculator-v2 .zic2__deduceriGrid {\r\n    grid-template-columns: 1fr;\r\n  }\r\n}\r\n\r\n\/* Tablet (640px+) *\/\r\n@media (min-width: 640px) {\r\n  #zic-concurs-calculator-v2 .zic2__wrap {\r\n    padding: 24px;\r\n  }\r\n\r\n  #zic-concurs-calculator-v2 .zic2__title {\r\n    font-size: 24px;\r\n  }\r\n\r\n  #zic-concurs-calculator-v2 .zic2__rowGrid {\r\n    grid-template-columns: repeat(4, 1fr);\r\n  }\r\n\r\n  #zic-concurs-calculator-v2 .zic2__deduceriGrid {\r\n    grid-template-columns: 1.5fr 1fr;\r\n  }\r\n}\r\n\r\n\/* Desktop (768px+) *\/\r\n@media (min-width: 768px) {\r\n  #zic-concurs-calculator-v2 .zic2__card {\r\n    padding: 24px;\r\n  }\r\n\r\n  #zic-concurs-calculator-v2 .zic2__brandbar {\r\n    padding: 24px;\r\n  }\r\n\r\n  #zic-concurs-calculator-v2 .zic2__mark {\r\n    width: 56px;\r\n    height: 56px;\r\n  }\r\n\r\n  #zic-concurs-calculator-v2 .zic2__title {\r\n    font-size: 26px;\r\n  }\r\n}\r\n\r\n\/* Large screens (1024px+) *\/\r\n@media (min-width: 1024px) {\r\n  #zic-concurs-calculator-v2 .zic2__wrap {\r\n    max-width: 900px;\r\n  }\r\n}\r\n\r\n\/* Print styles *\/\r\n@media print {\r\n  #zic-concurs-calculator-v2 .zic2__btnGroup,\r\n  #zic-concurs-calculator-v2 .zic2__actions,\r\n  #zic-concurs-calculator-v2 .zic2__hint,\r\n  #zic-concurs-calculator-v2 .zic2__emptyState,\r\n  #zic-concurs-calculator-v2 .zic2__footer {\r\n    display: none !important;\r\n  }\r\n\r\n  #zic-concurs-calculator-v2 .zic2__card {\r\n    box-shadow: none;\r\n    border: 1px solid #ddd;\r\n    break-inside: avoid;\r\n  }\r\n\r\n  #zic-concurs-calculator-v2 .zic2__resultCard.is-hidden {\r\n    display: block !important;\r\n  }\r\n}\r\n<\/style>\r\n\r\n<script>\r\n(function() {\r\n  'use strict';\r\n\r\n  \/\/ === SECURITY: Safe DOM Element Creation ===\r\n  \/\/ Creeaz\u0103 elemente DOM \u00een mod sigur, f\u0103r\u0103 innerHTML cu date nesanitizate\r\n  const createElement = (tag, attrs = {}, children = []) => {\r\n    const el = document.createElement(tag);\r\n\r\n    \/\/ Seteaz\u0103 atributele \u00een mod sigur (doar atribute permise)\r\n    const allowedAttrs = ['class', 'id', 'type', 'min', 'max', 'placeholder',\r\n                          'inputmode', 'autocomplete', 'for', 'role', 'aria-live',\r\n                          'aria-hidden', 'aria-labelledby', 'aria-label', 'data-field', 'data-action',\r\n                          'data-row', 'data-rows', 'data-empty', 'data-live',\r\n                          'data-error', 'data-result', 'data-result-content',\r\n                          'href', 'target', 'rel', 'width', 'height', 'viewBox',\r\n                          'fill', 'stroke', 'stroke-width', 'stroke-linecap',\r\n                          'stroke-linejoin', 'd', 'cx', 'cy', 'r', 'x', 'y',\r\n                          'x1', 'y1', 'x2', 'y2', 'rx', 'ry', 'points'];\r\n\r\n    for (const [key, value] of Object.entries(attrs)) {\r\n      if (key === 'textContent') {\r\n        el.textContent = value;\r\n      } else if (allowedAttrs.includes(key) || key.startsWith('data-')) {\r\n        el.setAttribute(key, String(value));\r\n      }\r\n    }\r\n\r\n    children.forEach(child => {\r\n      if (typeof child === 'string') {\r\n        el.appendChild(document.createTextNode(child));\r\n      } else if (child instanceof Node) {\r\n        el.appendChild(child);\r\n      }\r\n    });\r\n\r\n    return el;\r\n  };\r\n\r\n  \/\/ === Constants ===\r\n  const ROOT_ID = 'zic-concurs-calculator-v2';\r\n  const MONTHS_IN_YEAR = 12;\r\n  const DAYS_IN_MONTH = 30;\r\n  const MAX_DAYS = 29; \/\/ Zile maxime per lun\u0103 (0-29 = 30 valori posibile)\r\n  const MAX_MONTHS = 11; \/\/ Luni maxime (0-11 = 12 valori posibile)\r\n  const MAX_GENERAL_MONTHS = 30 * MONTHS_IN_YEAR; \/\/ 30 years\r\n\r\n  \/\/ SECURITY: Limite pentru validare input\r\n  const MAX_YEARS = 100;\r\n  const MAX_FINE_AMOUNT = 999999999;\r\n  const MAX_PENALTIES = 50; \/\/ Limit\u0103 pentru num\u0103rul de pedepse\r\n\r\n  \/\/ === State ===\r\n  let lastResult = null;\r\n\r\n  \/\/ === DOM References ===\r\n  const root = document.getElementById(ROOT_ID);\r\n  if (!root) {\r\n    console.warn('ZIC Calculator: Element root nu a fost g\u0103sit');\r\n    return;\r\n  }\r\n\r\n  const $ = (sel) => root.querySelector(sel);\r\n\r\n  const elements = {\r\n    prisonRows: $('[data-rows=\"prison\"]'),\r\n    fineRows: $('[data-rows=\"fine\"]'),\r\n    prisonEmpty: $('[data-empty=\"prison\"]'),\r\n    fineEmpty: $('[data-empty=\"fine\"]'),\r\n    prisonCount: $('[data-live=\"prisonCount\"]'),\r\n    fineCount: $('[data-live=\"fineCount\"]'),\r\n    error: $('[data-error=\"prison\"]'),\r\n    resultCard: $('[data-result]'),\r\n    resultContent: $('[data-result-content]'),\r\n    dedYears: $('#zic2-ded-ani'),\r\n    dedMonths: $('#zic2-ded-luni'),\r\n    dedDays: $('#zic2-ded-zile'),\r\n    dedFine: $('#zic2-amenda-dedusa')\r\n  };\r\n\r\n  \/\/ Verific\u0103 dac\u0103 toate elementele esen\u021biale exist\u0103\r\n  const requiredElements = [\r\n    'prisonRows', 'fineRows', 'prisonEmpty', 'fineEmpty',\r\n    'prisonCount', 'fineCount', 'error', 'resultCard', 'resultContent',\r\n    'dedYears', 'dedMonths', 'dedDays', 'dedFine'\r\n  ];\r\n  for (const key of requiredElements) {\r\n    if (!elements[key]) {\r\n      console.error(`ZIC Calculator: Element esen\u021bial lips\u0103 - ${key}`);\r\n      return;\r\n    }\r\n  }\r\n\r\n  \/\/ === SECURITY: Strict Numeric Validation ===\r\n  const toInt = (val) => {\r\n    if (val === null || val === undefined || val === '') return 0;\r\n    \/\/ Elimin\u0103 orice caracter non-numeric (nu sunt necesare numere negative \u00een acest calculator)\r\n    const cleaned = String(val).replace(\/[^\\d]\/g, '');\r\n    const n = parseInt(cleaned, 10);\r\n    \/\/ Verific\u0103 pentru NaN, Infinity \u0219i valori invalide\r\n    if (!Number.isFinite(n) || Number.isNaN(n)) return 0;\r\n    return n;\r\n  };\r\n\r\n  const clamp = (val, min = 0, max = Infinity) => {\r\n    const n = toInt(val);\r\n    \/\/ Double-check pentru siguran\u021b\u0103\r\n    if (!Number.isFinite(n)) return min;\r\n    return Math.max(min, Math.min(max, n));\r\n  };\r\n\r\n  const formatNumber = (n) => {\r\n    \/\/ SECURITY: Asigur\u0103-te c\u0103 n este un num\u0103r valid\r\n    const num = Number.isFinite(n) ? n : 0;\r\n    return num.toLocaleString('ro-RO');\r\n  };\r\n\r\n  \/\/ === Duration Helpers ===\r\n  const toMonths = (years, months, days) => {\r\n    const y = clamp(years, 0, MAX_YEARS);\r\n    const m = clamp(months, 0, MAX_MONTHS);\r\n    const d = clamp(days, 0, MAX_DAYS);\r\n    return (y * MONTHS_IN_YEAR) + m + (d \/ DAYS_IN_MONTH);\r\n  };\r\n\r\n  const fromMonths = (totalMonths) => {\r\n    \/\/ SECURITY: Validare strict\u0103\r\n    let t = Number.isFinite(totalMonths) ? Math.max(0, totalMonths) : 0;\r\n    let years = Math.floor(t \/ MONTHS_IN_YEAR);\r\n    let months = Math.floor(t % MONTHS_IN_YEAR);\r\n    \/\/ Folosim DAYS_IN_MONTH pentru calcul dar limit\u0103m la MAX_DAYS\r\n    let days = Math.round((t % 1) * DAYS_IN_MONTH);\r\n\r\n    if (days > MAX_DAYS) { days = 0; months++; }\r\n    if (months > MAX_MONTHS) { months = 0; years++; }\r\n\r\n    return { years, months, days };\r\n  };\r\n\r\n  const formatDuration = (d) => {\r\n    \/\/ SECURITY: Validare obiect \u0219i valori\r\n    if (!d || typeof d !== 'object') return '0 zile';\r\n\r\n    const years = clamp(d.years, 0, MAX_YEARS);\r\n    const months = clamp(d.months, 0, MAX_MONTHS);\r\n    const days = clamp(d.days, 0, MAX_DAYS);\r\n\r\n    const parts = [];\r\n    if (years > 0) parts.push(`${years} ${years === 1 ? 'an' : 'ani'}`);\r\n    if (months > 0) parts.push(`${months} ${months === 1 ? 'lun\u0103' : 'luni'}`);\r\n    if (days > 0 || parts.length === 0) parts.push(`${days} ${days === 1 ? 'zi' : 'zile'}`);\r\n    return parts.join(', ');\r\n  };\r\n\r\n  const formatCurrency = (amount) => {\r\n    const safeAmount = clamp(amount, 0, MAX_FINE_AMOUNT);\r\n    return formatNumber(Math.floor(safeAmount)) + ' lei';\r\n  };\r\n\r\n  \/\/ === UI Helpers ===\r\n  const showError = (msg) => {\r\n    \/\/ SECURITY: Folose\u0219te textContent \u00een loc de innerHTML\r\n    elements.error.textContent = msg;\r\n    elements.error.classList.remove('is-hidden');\r\n  };\r\n\r\n  const hideError = () => {\r\n    elements.error.textContent = '';\r\n    elements.error.classList.add('is-hidden');\r\n  };\r\n\r\n  const updateCounts = () => {\r\n    const prisonCount = elements.prisonRows.querySelectorAll('[data-row=\"prison\"]').length;\r\n    const fineCount = elements.fineRows.querySelectorAll('[data-row=\"fine\"]').length;\r\n\r\n    \/\/ SECURITY: Folose\u0219te textContent\r\n    elements.prisonCount.textContent = String(clamp(prisonCount, 0, MAX_PENALTIES));\r\n    elements.fineCount.textContent = String(clamp(fineCount, 0, MAX_PENALTIES));\r\n\r\n    elements.prisonEmpty.classList.toggle('is-hidden', prisonCount > 0);\r\n    elements.fineEmpty.classList.toggle('is-hidden', fineCount > 0);\r\n  };\r\n\r\n  \/\/ === SECURITY: Safe Field Creation ===\r\n  const createField = (label, attrs = {}) => {\r\n    const id = `zic2_${Math.random().toString(36).substr(2, 9)}`;\r\n\r\n    const field = createElement('div', { class: 'zic2__field' });\r\n\r\n    const labelEl = createElement('label', {\r\n      class: 'zic2__label',\r\n      for: id\r\n    }, [label]);\r\n\r\n    const inputEl = createElement('input', {\r\n      class: 'zic2__input',\r\n      type: 'number',\r\n      id: id,\r\n      autocomplete: 'off',\r\n      min: attrs.min !== undefined ? String(attrs.min) : '0',\r\n      max: attrs.max !== undefined ? String(attrs.max) : String(MAX_FINE_AMOUNT),\r\n      placeholder: attrs.placeholder || '0',\r\n      inputmode: attrs.inputmode || 'numeric',\r\n      'data-field': attrs['data-field'] || ''\r\n    });\r\n\r\n    field.appendChild(labelEl);\r\n    field.appendChild(inputEl);\r\n\r\n    \/\/ SECURITY: Previne input non-numeric\r\n    inputEl.addEventListener('input', (e) => {\r\n      const value = e.target.value;\r\n      \/\/ Elimin\u0103 caractere non-numerice\r\n      e.target.value = value.replace(\/[^\\d]\/g, '');\r\n    });\r\n\r\n    return field;\r\n  };\r\n\r\n  \/\/ === SECURITY: Safe SVG Creation ===\r\n  const createSvgIcon = (type) => {\r\n    const svgNS = 'http:\/\/www.w3.org\/2000\/svg';\r\n    const svg = document.createElementNS(svgNS, 'svg');\r\n    svg.setAttribute('width', '14');\r\n    svg.setAttribute('height', '14');\r\n    svg.setAttribute('viewBox', '0 0 24 24');\r\n    svg.setAttribute('fill', 'none');\r\n    svg.setAttribute('stroke', 'currentColor');\r\n    svg.setAttribute('stroke-width', '2');\r\n\r\n    if (type === 'prison') {\r\n      const rect = document.createElementNS(svgNS, 'rect');\r\n      rect.setAttribute('x', '3');\r\n      rect.setAttribute('y', '11');\r\n      rect.setAttribute('width', '18');\r\n      rect.setAttribute('height', '11');\r\n      rect.setAttribute('rx', '2');\r\n      svg.appendChild(rect);\r\n\r\n      const path = document.createElementNS(svgNS, 'path');\r\n      path.setAttribute('d', 'M7 11V7a5 5 0 0 1 10 0v4');\r\n      svg.appendChild(path);\r\n    } else if (type === 'fine') {\r\n      const line = document.createElementNS(svgNS, 'line');\r\n      line.setAttribute('x1', '12');\r\n      line.setAttribute('y1', '1');\r\n      line.setAttribute('x2', '12');\r\n      line.setAttribute('y2', '23');\r\n      svg.appendChild(line);\r\n\r\n      const path = document.createElementNS(svgNS, 'path');\r\n      path.setAttribute('d', 'M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6');\r\n      svg.appendChild(path);\r\n    } else if (type === 'warning') {\r\n      const path = document.createElementNS(svgNS, 'path');\r\n      path.setAttribute('d', 'M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z');\r\n      svg.appendChild(path);\r\n\r\n      const line1 = document.createElementNS(svgNS, 'line');\r\n      line1.setAttribute('x1', '12');\r\n      line1.setAttribute('y1', '9');\r\n      line1.setAttribute('x2', '12');\r\n      line1.setAttribute('y2', '13');\r\n      svg.appendChild(line1);\r\n\r\n      const line2 = document.createElementNS(svgNS, 'line');\r\n      line2.setAttribute('x1', '12');\r\n      line2.setAttribute('y1', '17');\r\n      line2.setAttribute('x2', '12.01');\r\n      line2.setAttribute('y2', '17');\r\n      svg.appendChild(line2);\r\n    } else if (type === 'danger') {\r\n      const circle = document.createElementNS(svgNS, 'circle');\r\n      circle.setAttribute('cx', '12');\r\n      circle.setAttribute('cy', '12');\r\n      circle.setAttribute('r', '10');\r\n      svg.appendChild(circle);\r\n\r\n      const line1 = document.createElementNS(svgNS, 'line');\r\n      line1.setAttribute('x1', '12');\r\n      line1.setAttribute('y1', '8');\r\n      line1.setAttribute('x2', '12');\r\n      line1.setAttribute('y2', '12');\r\n      svg.appendChild(line1);\r\n\r\n      const line2 = document.createElementNS(svgNS, 'line');\r\n      line2.setAttribute('x1', '12');\r\n      line2.setAttribute('y1', '16');\r\n      line2.setAttribute('x2', '12.01');\r\n      line2.setAttribute('y2', '16');\r\n      svg.appendChild(line2);\r\n    }\r\n\r\n    svg.setAttribute('width', '16');\r\n    svg.setAttribute('height', '16');\r\n    return svg;\r\n  };\r\n\r\n  \/\/ === SECURITY: Safe Row Builders ===\r\n  const createPrisonRow = () => {\r\n    \/\/ SECURITY: Verific\u0103 limita de pedepse\r\n    const currentCount = elements.prisonRows.querySelectorAll('[data-row=\"prison\"]').length;\r\n    if (currentCount >= MAX_PENALTIES) {\r\n      showError(`Limita maxim\u0103 de ${MAX_PENALTIES} pedepse a fost atins\u0103.`);\r\n      return null;\r\n    }\r\n\r\n    const row = createElement('div', { class: 'zic2__row', 'data-row': 'prison' });\r\n\r\n    const header = createElement('div', { class: 'zic2__rowHeader' });\r\n\r\n    const tag = createElement('span', { class: 'zic2__rowTag' });\r\n    tag.appendChild(createSvgIcon('prison'));\r\n    tag.appendChild(document.createTextNode(' Pedeaps\u0103 \u00eenchisoare'));\r\n\r\n    const deleteBtn = createElement('button', {\r\n      type: 'button',\r\n      class: 'zic2__btn zic2__btn--danger',\r\n      'data-action': 'delete-row',\r\n      'aria-label': '\u0218terge aceast\u0103 pedeaps\u0103 cu \u00eenchisoarea'\r\n    }, ['\u0218terge']);\r\n\r\n    header.appendChild(tag);\r\n    header.appendChild(deleteBtn);\r\n\r\n    const grid = createElement('div', { class: 'zic2__rowGrid' });\r\n    grid.appendChild(createField('Ani', { min: 0, max: MAX_YEARS, placeholder: '0', inputmode: 'numeric', 'data-field': 'years' }));\r\n    grid.appendChild(createField('Luni', { min: 0, max: MAX_MONTHS, placeholder: '0', inputmode: 'numeric', 'data-field': 'months' }));\r\n    grid.appendChild(createField('Zile', { min: 0, max: MAX_DAYS, placeholder: '0', inputmode: 'numeric', 'data-field': 'days' }));\r\n    grid.appendChild(createField('Max lege (ani)', { min: 0, max: MAX_YEARS, placeholder: 'ex: 20', inputmode: 'numeric', 'data-field': 'maxLaw' }));\r\n\r\n    row.appendChild(header);\r\n    row.appendChild(grid);\r\n\r\n    return row;\r\n  };\r\n\r\n  const createFineRow = () => {\r\n    \/\/ SECURITY: Verific\u0103 limita de amenzi\r\n    const currentCount = elements.fineRows.querySelectorAll('[data-row=\"fine\"]').length;\r\n    if (currentCount >= MAX_PENALTIES) {\r\n      showError(`Limita maxim\u0103 de ${MAX_PENALTIES} amenzi a fost atins\u0103.`);\r\n      return null;\r\n    }\r\n\r\n    const row = createElement('div', { class: 'zic2__row', 'data-row': 'fine' });\r\n\r\n    const header = createElement('div', { class: 'zic2__rowHeader' });\r\n\r\n    const tag = createElement('span', { class: 'zic2__rowTag' });\r\n    tag.appendChild(createSvgIcon('fine'));\r\n    tag.appendChild(document.createTextNode(' Amend\u0103'));\r\n\r\n    const deleteBtn = createElement('button', {\r\n      type: 'button',\r\n      class: 'zic2__btn zic2__btn--danger',\r\n      'data-action': 'delete-row',\r\n      'aria-label': '\u0218terge aceast\u0103 amend\u0103'\r\n    }, ['\u0218terge']);\r\n\r\n    header.appendChild(tag);\r\n    header.appendChild(deleteBtn);\r\n\r\n    const field = createField('Sum\u0103 (lei)', { min: 0, max: MAX_FINE_AMOUNT, placeholder: '0', inputmode: 'numeric', 'data-field': 'amount' });\r\n\r\n    row.appendChild(header);\r\n    row.appendChild(field);\r\n\r\n    return row;\r\n  };\r\n\r\n  \/\/ === Data Collection ===\r\n  const collectPrisonData = () => {\r\n    const rows = elements.prisonRows.querySelectorAll('[data-row=\"prison\"]');\r\n    const items = [];\r\n\r\n    rows.forEach(row => {\r\n      const years = clamp(row.querySelector('[data-field=\"years\"]')?.value, 0, MAX_YEARS);\r\n      const months = clamp(row.querySelector('[data-field=\"months\"]')?.value, 0, MAX_MONTHS);\r\n      const days = clamp(row.querySelector('[data-field=\"days\"]')?.value, 0, MAX_DAYS);\r\n      const maxLaw = clamp(row.querySelector('[data-field=\"maxLaw\"]')?.value, 0, MAX_YEARS);\r\n\r\n      const totalMonths = toMonths(years, months, days);\r\n      if (totalMonths > 0) {\r\n        items.push({ years, months, days, maxLaw, totalMonths });\r\n      }\r\n    });\r\n\r\n    return items;\r\n  };\r\n\r\n  const collectFineData = () => {\r\n    const rows = elements.fineRows.querySelectorAll('[data-row=\"fine\"]');\r\n    const items = [];\r\n\r\n    rows.forEach(row => {\r\n      const amount = clamp(row.querySelector('[data-field=\"amount\"]')?.value, 0, MAX_FINE_AMOUNT);\r\n      if (amount > 0) items.push(amount);\r\n    });\r\n\r\n    return items;\r\n  };\r\n\r\n  \/\/ === Calculations ===\r\n  const calculatePrison = (items) => {\r\n    if (items.length === 0) return null;\r\n\r\n    \/\/ Sort by total months descending\r\n    const sorted = [...items].sort((a, b) => b.totalMonths - a.totalMonths);\r\n    const maxPenalty = sorted[0].totalMonths;\r\n    const otherPenalties = sorted.slice(1).reduce((sum, p) => sum + p.totalMonths, 0);\r\n    const increment = otherPenalties \/ 3;\r\n    const resultant = maxPenalty + increment;\r\n\r\n    \/\/ Check for life imprisonment (art. 39 alin. 2)\r\n    const hasInfraction20Years = items.some(p => clamp(p.maxLaw, 0, MAX_YEARS) >= 20);\r\n    const excess = resultant - MAX_GENERAL_MONTHS;\r\n    const lifeImprisonment = excess >= 120 && hasInfraction20Years;\r\n    const exceedsMaximum = resultant > MAX_GENERAL_MONTHS;\r\n\r\n    \/\/ Apply deductions\r\n    const deductionMonths = toMonths(\r\n      elements.dedYears.value,\r\n      elements.dedMonths.value,\r\n      elements.dedDays.value\r\n    );\r\n\r\n    const beforeDeduction = lifeImprisonment ? resultant : Math.min(resultant, MAX_GENERAL_MONTHS);\r\n    const finalMonths = Math.max(0, beforeDeduction - deductionMonths);\r\n\r\n    return {\r\n      max: fromMonths(maxPenalty),\r\n      sumOthers: fromMonths(otherPenalties),\r\n      increment: fromMonths(increment),\r\n      resultant: fromMonths(resultant),\r\n      final: fromMonths(finalMonths),\r\n      exceedsMaximum,\r\n      lifeImprisonment\r\n    };\r\n  };\r\n\r\n  const calculateFine = (items) => {\r\n    if (items.length === 0) return null;\r\n\r\n    const sorted = [...items].sort((a, b) => b - a);\r\n    const maxFine = sorted[0];\r\n    const otherFines = sorted.slice(1).reduce((sum, f) => sum + f, 0);\r\n    const increment = Math.floor(otherFines \/ 3);\r\n    const resultant = maxFine + increment;\r\n\r\n    const deduction = clamp(elements.dedFine.value, 0, MAX_FINE_AMOUNT);\r\n    const final = Math.max(0, resultant - deduction);\r\n\r\n    return { max: maxFine, sumOthers: otherFines, increment, resultant, final };\r\n  };\r\n\r\n  \/\/ === SECURITY: Safe Render Result (DOM-based, no innerHTML) ===\r\n  const renderResult = (prison, fine) => {\r\n    \/\/ Clear existing content safely\r\n    while (elements.resultContent.firstChild) {\r\n      elements.resultContent.removeChild(elements.resultContent.firstChild);\r\n    }\r\n\r\n    if (prison) {\r\n      \/\/ KPI Section\r\n      const kpiDiv = createElement('div', { class: 'zic2__kpi' });\r\n      const kpiLabel = createElement('div', { class: 'zic2__kpiLabel' }, ['Pedeaps\u0103 final\u0103 cu \u00eenchisoarea']);\r\n      const kpiValue = createElement('p', { class: 'zic2__kpiValue' }, [\r\n        formatDuration(prison.final) + (prison.lifeImprisonment ? ' *' : '')\r\n      ]);\r\n      kpiDiv.appendChild(kpiLabel);\r\n      kpiDiv.appendChild(kpiValue);\r\n      elements.resultContent.appendChild(kpiDiv);\r\n\r\n      \/\/ Details List\r\n      const detailsList = createElement('ul', { class: 'zic2__detailsList' });\r\n\r\n      const li1 = createElement('li');\r\n      li1.appendChild(document.createTextNode('Pedeapsa cea mai grea: '));\r\n      const strong1 = createElement('strong', {}, [formatDuration(prison.max)]);\r\n      li1.appendChild(strong1);\r\n      detailsList.appendChild(li1);\r\n\r\n      detailsList.appendChild(createElement('li', {}, ['Suma celorlalte pedepse: ' + formatDuration(prison.sumOthers)]));\r\n      detailsList.appendChild(createElement('li', {}, ['Spor obligatoriu (1\/3): ' + formatDuration(prison.increment)]));\r\n      detailsList.appendChild(createElement('li', {}, ['Pedeaps\u0103 rezultant\u0103: ' + formatDuration(prison.resultant)]));\r\n\r\n      elements.resultContent.appendChild(detailsList);\r\n\r\n      \/\/ Warning Alert\r\n      if (prison.exceedsMaximum) {\r\n        const warningAlert = createElement('div', { class: 'zic2__alert zic2__alert--warning' });\r\n        warningAlert.appendChild(createSvgIcon('warning'));\r\n        const warningSpan = createElement('span', {}, ['Pedeapsa rezultant\u0103 dep\u0103\u0219e\u0219te maximul general de 30 de ani.']);\r\n        warningAlert.appendChild(warningSpan);\r\n        elements.resultContent.appendChild(warningAlert);\r\n      }\r\n\r\n      \/\/ Danger Alert (Life Imprisonment)\r\n      if (prison.lifeImprisonment) {\r\n        const dangerAlert = createElement('div', { class: 'zic2__alert zic2__alert--danger' });\r\n        dangerAlert.appendChild(createSvgIcon('danger'));\r\n        const dangerSpan = createElement('span');\r\n        const boldStar = createElement('strong', {}, ['*']);\r\n        dangerSpan.appendChild(boldStar);\r\n        dangerSpan.appendChild(document.createTextNode(' Posibilitatea aplic\u0103rii deten\u021biunii pe via\u021b\u0103 (art. 39 alin. 2 C.pen.)'));\r\n        dangerAlert.appendChild(dangerSpan);\r\n        elements.resultContent.appendChild(dangerAlert);\r\n      }\r\n    }\r\n\r\n    if (fine) {\r\n      \/\/ KPI Section for Fine\r\n      const fineKpiDiv = createElement('div', { class: 'zic2__kpi' });\r\n      const fineKpiLabel = createElement('div', { class: 'zic2__kpiLabel' }, ['Amend\u0103 final\u0103']);\r\n      const fineKpiValue = createElement('p', { class: 'zic2__kpiValue' }, [formatCurrency(fine.final)]);\r\n      fineKpiDiv.appendChild(fineKpiLabel);\r\n      fineKpiDiv.appendChild(fineKpiValue);\r\n      elements.resultContent.appendChild(fineKpiDiv);\r\n\r\n      \/\/ Fine Details List\r\n      const fineDetailsList = createElement('ul', { class: 'zic2__detailsList' });\r\n\r\n      const fineLi1 = createElement('li');\r\n      fineLi1.appendChild(document.createTextNode('Amenda cea mai mare: '));\r\n      const fineStrong1 = createElement('strong', {}, [formatCurrency(fine.max)]);\r\n      fineLi1.appendChild(fineStrong1);\r\n      fineDetailsList.appendChild(fineLi1);\r\n\r\n      fineDetailsList.appendChild(createElement('li', {}, ['Suma celorlalte amenzi: ' + formatCurrency(fine.sumOthers)]));\r\n      fineDetailsList.appendChild(createElement('li', {}, ['Spor obligatoriu (1\/3): ' + formatCurrency(fine.increment)]));\r\n\r\n      elements.resultContent.appendChild(fineDetailsList);\r\n    }\r\n\r\n    elements.resultCard.classList.remove('is-hidden');\r\n    setTimeout(() => {\r\n      elements.resultCard.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\r\n    }, 100);\r\n  };\r\n\r\n  \/\/ === Actions ===\r\n  const calculate = () => {\r\n    hideError();\r\n\r\n    const prisonData = collectPrisonData();\r\n    const fineData = collectFineData();\r\n\r\n    if (prisonData.length === 0 && fineData.length === 0) {\r\n      showError('Introduce\u021bi cel pu\u021bin o pedeaps\u0103 (\u00eenchisoare sau amend\u0103) cu valori valide.');\r\n      elements.resultCard.classList.add('is-hidden');\r\n      return;\r\n    }\r\n\r\n    const prisonResult = calculatePrison(prisonData);\r\n    const fineResult = calculateFine(fineData);\r\n\r\n    lastResult = {\r\n      prison: prisonResult,\r\n      fine: fineResult,\r\n      timestamp: new Date().toISOString()\r\n    };\r\n\r\n    renderResult(prisonResult, fineResult);\r\n  };\r\n\r\n  const reset = () => {\r\n    \/\/ Clear all rows safely\r\n    while (elements.prisonRows.firstChild) {\r\n      elements.prisonRows.removeChild(elements.prisonRows.firstChild);\r\n    }\r\n    while (elements.fineRows.firstChild) {\r\n      elements.fineRows.removeChild(elements.fineRows.firstChild);\r\n    }\r\n\r\n    elements.dedYears.value = '';\r\n    elements.dedMonths.value = '';\r\n    elements.dedDays.value = '';\r\n    elements.dedFine.value = '';\r\n\r\n    hideError();\r\n    elements.resultCard.classList.add('is-hidden');\r\n\r\n    while (elements.resultContent.firstChild) {\r\n      elements.resultContent.removeChild(elements.resultContent.firstChild);\r\n    }\r\n\r\n    lastResult = null;\r\n\r\n    \/\/ Add one empty prison row\r\n    const newRow = createPrisonRow();\r\n    if (newRow) {\r\n      elements.prisonRows.appendChild(newRow);\r\n    }\r\n    updateCounts();\r\n  };\r\n\r\n  const loadExample = () => {\r\n    \/\/ Clear existing rows\r\n    while (elements.prisonRows.firstChild) {\r\n      elements.prisonRows.removeChild(elements.prisonRows.firstChild);\r\n    }\r\n    while (elements.fineRows.firstChild) {\r\n      elements.fineRows.removeChild(elements.fineRows.firstChild);\r\n    }\r\n    hideError();\r\n\r\n    const examples = [\r\n      { years: 3, months: 0, days: 0, maxLaw: 10 },\r\n      { years: 2, months: 6, days: 0, maxLaw: 7 },\r\n      { years: 1, months: 0, days: 0, maxLaw: 5 }\r\n    ];\r\n\r\n    examples.forEach(data => {\r\n      const row = createPrisonRow();\r\n      if (row) {\r\n        row.querySelector('[data-field=\"years\"]').value = data.years;\r\n        row.querySelector('[data-field=\"months\"]').value = data.months;\r\n        row.querySelector('[data-field=\"days\"]').value = data.days;\r\n        row.querySelector('[data-field=\"maxLaw\"]').value = data.maxLaw;\r\n        elements.prisonRows.appendChild(row);\r\n      }\r\n    });\r\n\r\n    elements.dedYears.value = '';\r\n    elements.dedMonths.value = '';\r\n    elements.dedDays.value = '';\r\n    elements.dedFine.value = '';\r\n\r\n    updateCounts();\r\n    elements.resultCard.classList.add('is-hidden');\r\n  };\r\n\r\n  \/\/ === SECURITY: Safe PDF Export ===\r\n  const exportPDF = () => {\r\n    if (!lastResult || (!lastResult.prison && !lastResult.fine)) {\r\n      alert('Calculeaz\u0103 mai \u00eent\u00e2i rezultatul pentru a genera PDF-ul.');\r\n      return;\r\n    }\r\n\r\n    \/\/ SECURITY: Ad\u0103ug\u0103m 'noopener' pentru a preveni accesul la window.opener\r\n    const printWindow = window.open('about:blank', '_blank', 'noopener');\r\n    if (!printWindow) {\r\n      alert('Permite pop-up-urile pentru a genera PDF-ul.');\r\n      return;\r\n    }\r\n\r\n    const { prison, fine } = lastResult;\r\n    const date = new Date().toLocaleDateString('ro-RO', {\r\n      year: 'numeric', month: 'long', day: 'numeric'\r\n    });\r\n\r\n    \/\/ SECURITY: Construire document folosind DOM API\r\n    const doc = printWindow.document;\r\n    doc.open();\r\n\r\n    \/\/ Write minimal HTML structure\r\n    doc.write('<!DOCTYPE html><html lang=\"ro\"><head><meta charset=\"UTF-8\"><title>Raport Calculator Concurs - ZIC Legal<\/title><\/head><body><\/body><\/html>');\r\n    doc.close();\r\n\r\n    \/\/ Add styles safely\r\n    const style = doc.createElement('style');\r\n    style.textContent = `\r\n      * { box-sizing: border-box; margin: 0; padding: 0; }\r\n      body {\r\n        font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\r\n        max-width: 700px;\r\n        margin: 0 auto;\r\n        padding: 40px 30px;\r\n        color: #1F2937;\r\n        line-height: 1.6;\r\n      }\r\n      .header {\r\n        border-bottom: 3px solid #8A88FF;\r\n        padding-bottom: 20px;\r\n        margin-bottom: 30px;\r\n      }\r\n      .header h1 {\r\n        color: #6F6CFF;\r\n        font-size: 24px;\r\n        margin-bottom: 5px;\r\n      }\r\n      .header p {\r\n        color: #6B7280;\r\n        font-size: 14px;\r\n      }\r\n      .section {\r\n        background: #F9FAFB;\r\n        border-radius: 12px;\r\n        padding: 20px;\r\n        margin-bottom: 20px;\r\n      }\r\n      .section h2 {\r\n        font-size: 16px;\r\n        color: #374151;\r\n        margin-bottom: 15px;\r\n        padding-bottom: 10px;\r\n        border-bottom: 1px solid #E5E7EB;\r\n      }\r\n      .kpi {\r\n        font-size: 22px;\r\n        font-weight: 700;\r\n        color: #6F6CFF;\r\n        margin-bottom: 15px;\r\n      }\r\n      ul {\r\n        padding-left: 20px;\r\n      }\r\n      li {\r\n        margin-bottom: 8px;\r\n        color: #374151;\r\n      }\r\n      li strong {\r\n        color: #1F2937;\r\n      }\r\n      .alert {\r\n        padding: 12px 15px;\r\n        border-radius: 8px;\r\n        margin-top: 15px;\r\n        font-size: 13px;\r\n      }\r\n      .alert-warning {\r\n        background: #FEF3C7;\r\n        border: 1px solid #FCD34D;\r\n        color: #92400E;\r\n      }\r\n      .alert-danger {\r\n        background: #FEE2E2;\r\n        border: 1px solid #FECACA;\r\n        color: #DC2626;\r\n      }\r\n      .footer {\r\n        margin-top: 40px;\r\n        padding-top: 20px;\r\n        border-top: 1px solid #E5E7EB;\r\n        text-align: center;\r\n        color: #6B7280;\r\n        font-size: 12px;\r\n      }\r\n      .footer a {\r\n        color: #6F6CFF;\r\n        text-decoration: none;\r\n      }\r\n      .disclaimer {\r\n        margin-top: 30px;\r\n        padding: 15px;\r\n        background: #F3F4F6;\r\n        border-radius: 8px;\r\n        font-size: 11px;\r\n        color: #6B7280;\r\n      }\r\n      @media print {\r\n        body { padding: 20px; }\r\n        .section { break-inside: avoid; }\r\n      }\r\n    `;\r\n    doc.head.appendChild(style);\r\n\r\n    const body = doc.body;\r\n\r\n    \/\/ Header\r\n    const headerDiv = doc.createElement('div');\r\n    headerDiv.className = 'header';\r\n    const h1 = doc.createElement('h1');\r\n    h1.textContent = 'Calculator Concurs de Infrac\u021biuni';\r\n    const pDate = doc.createElement('p');\r\n    pDate.textContent = 'Raport generat la ' + date;\r\n    headerDiv.appendChild(h1);\r\n    headerDiv.appendChild(pDate);\r\n    body.appendChild(headerDiv);\r\n\r\n    \/\/ Prison section\r\n    if (prison) {\r\n      const sectionDiv = doc.createElement('div');\r\n      sectionDiv.className = 'section';\r\n\r\n      const h2 = doc.createElement('h2');\r\n      h2.textContent = 'Pedeaps\u0103 cu \u00eenchisoarea';\r\n      sectionDiv.appendChild(h2);\r\n\r\n      const kpiDiv = doc.createElement('div');\r\n      kpiDiv.className = 'kpi';\r\n      kpiDiv.textContent = formatDuration(prison.final) + (prison.lifeImprisonment ? ' *' : '');\r\n      sectionDiv.appendChild(kpiDiv);\r\n\r\n      const ul = doc.createElement('ul');\r\n\r\n      const li1 = doc.createElement('li');\r\n      li1.appendChild(doc.createTextNode('Pedeapsa cea mai grea: '));\r\n      const strong1 = doc.createElement('strong');\r\n      strong1.textContent = formatDuration(prison.max);\r\n      li1.appendChild(strong1);\r\n      ul.appendChild(li1);\r\n\r\n      const li2 = doc.createElement('li');\r\n      li2.textContent = 'Suma celorlalte pedepse: ' + formatDuration(prison.sumOthers);\r\n      ul.appendChild(li2);\r\n\r\n      const li3 = doc.createElement('li');\r\n      li3.textContent = 'Spor obligatoriu (1\/3): ' + formatDuration(prison.increment);\r\n      ul.appendChild(li3);\r\n\r\n      const li4 = doc.createElement('li');\r\n      li4.textContent = 'Pedeaps\u0103 rezultant\u0103: ' + formatDuration(prison.resultant);\r\n      ul.appendChild(li4);\r\n\r\n      sectionDiv.appendChild(ul);\r\n\r\n      if (prison.exceedsMaximum) {\r\n        const alertWarning = doc.createElement('div');\r\n        alertWarning.className = 'alert alert-warning';\r\n        alertWarning.textContent = 'Pedeapsa rezultant\u0103 dep\u0103\u0219e\u0219te maximul general de 30 de ani.';\r\n        sectionDiv.appendChild(alertWarning);\r\n      }\r\n\r\n      if (prison.lifeImprisonment) {\r\n        const alertDanger = doc.createElement('div');\r\n        alertDanger.className = 'alert alert-danger';\r\n        const starStrong = doc.createElement('strong');\r\n        starStrong.textContent = '*';\r\n        alertDanger.appendChild(starStrong);\r\n        alertDanger.appendChild(doc.createTextNode(' Posibilitatea aplic\u0103rii deten\u021biunii pe via\u021b\u0103 (art. 39 alin. 2 C.pen.)'));\r\n        sectionDiv.appendChild(alertDanger);\r\n      }\r\n\r\n      body.appendChild(sectionDiv);\r\n    }\r\n\r\n    \/\/ Fine section\r\n    if (fine) {\r\n      const fineSection = doc.createElement('div');\r\n      fineSection.className = 'section';\r\n\r\n      const h2Fine = doc.createElement('h2');\r\n      h2Fine.textContent = 'Amend\u0103';\r\n      fineSection.appendChild(h2Fine);\r\n\r\n      const kpiFine = doc.createElement('div');\r\n      kpiFine.className = 'kpi';\r\n      kpiFine.textContent = formatCurrency(fine.final);\r\n      fineSection.appendChild(kpiFine);\r\n\r\n      const ulFine = doc.createElement('ul');\r\n\r\n      const liF1 = doc.createElement('li');\r\n      liF1.appendChild(doc.createTextNode('Amenda cea mai mare: '));\r\n      const strongF1 = doc.createElement('strong');\r\n      strongF1.textContent = formatCurrency(fine.max);\r\n      liF1.appendChild(strongF1);\r\n      ulFine.appendChild(liF1);\r\n\r\n      const liF2 = doc.createElement('li');\r\n      liF2.textContent = 'Suma celorlalte amenzi: ' + formatCurrency(fine.sumOthers);\r\n      ulFine.appendChild(liF2);\r\n\r\n      const liF3 = doc.createElement('li');\r\n      liF3.textContent = 'Spor obligatoriu (1\/3): ' + formatCurrency(fine.increment);\r\n      ulFine.appendChild(liF3);\r\n\r\n      fineSection.appendChild(ulFine);\r\n      body.appendChild(fineSection);\r\n    }\r\n\r\n    \/\/ Disclaimer\r\n    const disclaimerDiv = doc.createElement('div');\r\n    disclaimerDiv.className = 'disclaimer';\r\n    const strongDisclaimer = doc.createElement('strong');\r\n    strongDisclaimer.textContent = 'Disclaimer:';\r\n    disclaimerDiv.appendChild(strongDisclaimer);\r\n    disclaimerDiv.appendChild(doc.createTextNode(' Acest raport este oferit exclusiv \u00een scop informativ \u0219i educativ. Rezultatele generate nu constituie consultan\u021b\u0103 juridic\u0103 \u0219i nu pot \u00eenlocui sfatul unui avocat specializat.'));\r\n    body.appendChild(disclaimerDiv);\r\n\r\n    \/\/ Footer\r\n    const footerDiv = doc.createElement('div');\r\n    footerDiv.className = 'footer';\r\n    const p1 = doc.createElement('p');\r\n    p1.textContent = 'Generat cu Calculator Concurs de Infrac\u021biuni';\r\n    footerDiv.appendChild(p1);\r\n    const p2 = doc.createElement('p');\r\n    const link = doc.createElement('a');\r\n    link.href = 'https:\/\/zic.legal';\r\n    link.textContent = 'ZIC Legal';\r\n    link.setAttribute('rel', 'noopener noreferrer');\r\n    p2.appendChild(link);\r\n    footerDiv.appendChild(p2);\r\n    body.appendChild(footerDiv);\r\n\r\n    printWindow.focus();\r\n\r\n    setTimeout(() => {\r\n      printWindow.print();\r\n    }, 300);\r\n  };\r\n\r\n  \/\/ === SECURITY: Whitelist of valid actions ===\r\n  const VALID_ACTIONS = ['add-prison', 'add-fine', 'delete-row', 'calculate', 'reset', 'example', 'export-pdf'];\r\n\r\n  \/\/ === Event Handlers ===\r\n  const handleClick = (e) => {\r\n    const button = e.target.closest('[data-action]');\r\n    if (!button) return;\r\n\r\n    const action = button.dataset.action;\r\n\r\n    \/\/ SECURITY: Validate action is in whitelist\r\n    if (!VALID_ACTIONS.includes(action)) {\r\n      console.warn('ZIC Calculator: Invalid action attempted:', action);\r\n      return;\r\n    }\r\n\r\n    switch (action) {\r\n      case 'add-prison': {\r\n        const row = createPrisonRow();\r\n        if (row) {\r\n          elements.prisonRows.appendChild(row);\r\n          updateCounts();\r\n          \/\/ Focus management: mut\u0103 focusul pe primul input al r\u00e2ndului nou\r\n          const firstInput = row.querySelector('.zic2__input');\r\n          if (firstInput) firstInput.focus();\r\n        }\r\n        break;\r\n      }\r\n      case 'add-fine': {\r\n        const row = createFineRow();\r\n        if (row) {\r\n          elements.fineRows.appendChild(row);\r\n          updateCounts();\r\n          \/\/ Focus management: mut\u0103 focusul pe inputul de amend\u0103\r\n          const fineInput = row.querySelector('.zic2__input');\r\n          if (fineInput) fineInput.focus();\r\n        }\r\n        break;\r\n      }\r\n      case 'delete-row':\r\n        button.closest('[data-row]').remove();\r\n        hideError();\r\n        updateCounts();\r\n        break;\r\n      case 'calculate':\r\n        calculate();\r\n        break;\r\n      case 'reset':\r\n        reset();\r\n        break;\r\n      case 'example':\r\n        loadExample();\r\n        break;\r\n      case 'export-pdf':\r\n        exportPDF();\r\n        break;\r\n    }\r\n  };\r\n\r\n  const handleBlur = (e) => {\r\n    const input = e.target;\r\n    if (!input.matches('.zic2__input')) return;\r\n\r\n    const val = input.value.trim();\r\n    if (val === '') return; \/\/ Nu modifica c\u00e2mpurile goale\r\n\r\n    const field = input.dataset.field;\r\n    if (field === 'months' || input.id === 'zic2-ded-luni') {\r\n      input.value = clamp(val, 0, MAX_MONTHS);\r\n    } else if (field === 'days' || input.id === 'zic2-ded-zile') {\r\n      input.value = clamp(val, 0, MAX_DAYS);\r\n    } else if (field === 'years' || input.id === 'zic2-ded-ani') {\r\n      input.value = clamp(val, 0, MAX_YEARS);\r\n    } else if (field === 'maxLaw') {\r\n      input.value = clamp(val, 0, MAX_YEARS);\r\n    } else if (field === 'amount' || input.id === 'zic2-amenda-dedusa') {\r\n      input.value = clamp(val, 0, MAX_FINE_AMOUNT);\r\n    }\r\n  };\r\n\r\n  \/\/ === SECURITY: Validate input on keydown to prevent invalid characters ===\r\n  const handleKeydown = (e) => {\r\n    const input = e.target;\r\n    if (!input.matches('.zic2__input[type=\"number\"]')) return;\r\n\r\n    \/\/ Allow: backspace, delete, tab, escape, enter, arrows\r\n    const allowedKeys = ['Backspace', 'Delete', 'Tab', 'Escape', 'Enter', 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End'];\r\n    if (allowedKeys.includes(e.key)) return;\r\n\r\n    \/\/ Allow Ctrl+A, Ctrl+C, Ctrl+V, Ctrl+X\r\n    if ((e.ctrlKey || e.metaKey) && ['a', 'c', 'v', 'x'].includes(e.key.toLowerCase())) return;\r\n\r\n    \/\/ Block non-numeric characters (including dot, minus, etc.)\r\n    if (!\/^[0-9]$\/.test(e.key)) {\r\n      e.preventDefault();\r\n    }\r\n  };\r\n\r\n  \/\/ === SECURITY: Sanitize pasted content ===\r\n  const handlePaste = (e) => {\r\n    const input = e.target;\r\n    if (!input.matches('.zic2__input[type=\"number\"]')) return;\r\n\r\n    const pastedData = (e.clipboardData || window.clipboardData).getData('text');\r\n    \/\/ Only allow if pasted data contains only digits\r\n    if (!\/^\\d*$\/.test(pastedData)) {\r\n      e.preventDefault();\r\n      \/\/ Extract only digits from pasted content\r\n      const digitsOnly = pastedData.replace(\/\\D\/g, '');\r\n      if (digitsOnly) {\r\n        \/\/ Insert cleaned data at cursor position\r\n        const start = input.selectionStart;\r\n        const end = input.selectionEnd;\r\n        const currentValue = input.value;\r\n        input.value = currentValue.substring(0, start) + digitsOnly + currentValue.substring(end);\r\n        input.setSelectionRange(start + digitsOnly.length, start + digitsOnly.length);\r\n      }\r\n    }\r\n  };\r\n\r\n  \/\/ === Initialize ===\r\n  const init = () => {\r\n    root.addEventListener('click', handleClick);\r\n    root.addEventListener('blur', handleBlur, true);\r\n    \/\/ SECURITY: Add input validation handlers\r\n    root.addEventListener('keydown', handleKeydown, true);\r\n    root.addEventListener('paste', handlePaste, true);\r\n\r\n    \/\/ Adaug\u0103 listener pentru input non-numeric pe c\u00e2mpurile statice din HTML\r\n    const staticInputs = root.querySelectorAll('#zic2-ded-ani, #zic2-ded-luni, #zic2-ded-zile, #zic2-amenda-dedusa');\r\n    staticInputs.forEach(input => {\r\n      input.addEventListener('input', (e) => {\r\n        e.target.value = e.target.value.replace(\/[^\\d]\/g, '');\r\n      });\r\n    });\r\n\r\n    \/\/ Add initial prison row\r\n    const initialRow = createPrisonRow();\r\n    if (initialRow) {\r\n      elements.prisonRows.appendChild(initialRow);\r\n    }\r\n    updateCounts();\r\n  };\r\n\r\n  if (document.readyState === 'loading') {\r\n    document.addEventListener('DOMContentLoaded', init);\r\n  } else {\r\n    init();\r\n  }\r\n})();\r\n<\/script>\r\n\n\n\n<p>Concursul de infrac\u021biuni este o situa\u021bie juridic\u0103 \u00een care o persoan\u0103 comite dou\u0103 sau mai multe infrac\u021biuni \u00eenainte de a fi condamnat\u0103 definitiv pentru vreuna dintre ele.<\/p>\n<p>Folose\u0219te calculatorul nostru pentru calcularea automat\u0103 a pedepsei rezultante pentru concursul de infrac\u021biuni. <strong>Aten\u021bie!<\/strong> \u00cen prezent, folosind acest calculator po\u021bi calcula doar concursul de infrac\u021biuni, nu \u0219i recidiva.<\/p>\n<h3>Concursul real de infrac\u021biuni (art. 38 alin. 1 Cod penal)<\/h3>\n<ul>\n<li>Presupune s\u0103v\u00e2r\u0219irea a dou\u0103 sau mai multe infrac\u021biuni prin ac\u021biuni sau inac\u021biuni distincte;<\/li>\n<li>Fiecare infrac\u021biune \u00ee\u0219i p\u0103streaz\u0103 autonomia \u0219i se sanc\u021bioneaz\u0103 separat;<\/li>\n<li>Regula aplicabil\u0103 este cea a cumulului juridic cu spor obligatoriu.<\/li>\n<\/ul>\n<h3>Concursul formal de infrac\u021biuni (art. 38 alin. 2 Cod penal)<\/h3>\n<ul>\n<li>Presupune s\u0103v\u00e2r\u0219irea a dou\u0103 sau mai multe infrac\u021biuni prin aceea\u0219i ac\u021biune sau inac\u021biune;<\/li>\n<li>Regula aplicabil\u0103 este cea a cumulului juridic cu spor obligatoriu.<\/li>\n<\/ul>\n<h3>Modalitatea de calcul a pedepsei cu \u00eenchisoarea \u00een cazul concursului de infrac\u021biuni<\/h3>\n<p class=\"mb-2 whitespace-pre-wrap\">Potrivit art. 39 alin. (1) lit. b) \u0219i alin. (2) din Codul penal, \u00een caz de concurs de infrac\u021biuni, c\u00e2nd s-au stabilit numai pedepse cu \u00eenchisoarea, se aplic\u0103 regulile specifice pentru determinarea pedepsei rezultante.<\/p>\n<h4><strong>Regula general\u0103 (art. 39 alin. 1 lit. b Cod penal)<\/strong><\/h4>\n<p>Se aplic\u0103 pedeapsa cea mai grea stabilit\u0103 de c\u0103tre instan\u021b\u0103, la care se adaug\u0103 un spor de o treime din totalul celorlalte pedepse stabilite.<\/p>\n<p class=\"mb-2 whitespace-pre-wrap\">Exemplu:<\/p>\n<ul>\n<li>Infrac\u021biunea A: limite de pedeapsa \u00eentre 2 \u0219i 7 ani \u00eenchisoare; instan\u021ba stabile\u0219te 5 ani \u00eenchisoare;<\/li>\n<li>Infrac\u021biunea B: limite de pedeapsa \u00eentre 3 \u0219i 10 ani \u00eenchisoare; instan\u021ba stabile\u0219te 7 ani \u00eenchisoare;<\/li>\n<li>Infrac\u021biunea C: limite de pedeapsa \u00eentre 1 \u0219i 5 ani \u00eenchisoare; instan\u021ba stabile\u0219te 3 ani \u00eenchisoare;<\/li>\n<li>Pedeapsa rezultant\u0103: 7 ani (pedeapsa cea mai grea) + 2 ani \u0219i 8 luni (o treime din totalul celorlalte pedepse: 5 ani + 3 ani = 8 ani; o treime din 8 ani = 2 ani \u0219i 8 luni) = 9 ani \u0219i 8 luni \u00eenchisoare.<\/li>\n<\/ul>\n<h4><strong>Posibilitatea aplic\u0103rii pedepsei deten\u021biunii pe via\u021b\u0103 (art. 39 alin. 2 Cod penal)<\/strong><\/h4>\n<p>Dac\u0103, prin aplicarea regulii generale, s-ar dep\u0103\u0219i cu 10 ani sau mai mult maximul general al pedepsei \u00eenchisorii (care este de 30 de ani), iar pentru cel pu\u021bin una dintre infrac\u021biunile concurente pedeapsa prev\u0103zut\u0103 de lege este \u00eenchisoarea de 20 de ani sau mai mare, se poate aplica pedeapsa deten\u021biunii pe via\u021b\u0103.<\/p>\n<p class=\"mb-2 whitespace-pre-wrap\">Aceste reguli de calcul al pedepsei \u00een caz de concurs de infrac\u021biuni c\u00e2nd s-au stabilit pedepse cu \u00eenchisoarea au scopul de a asigura o sanc\u021bionare propor\u021bional\u0103 cu gravitatea faptelor comise \u0219i cu pericolul social reprezentat de infractor.<\/p>\n<p class=\"mb-2 whitespace-pre-wrap\">Este important de re\u021binut c\u0103, indiferent de regulile aplicabile, instan\u021ba are obliga\u021bia de a motiva \u00een concret modul de stabilire a pedepsei rezultante, \u021bin\u00e2nd cont de criteriile generale de individualizare a pedepsei prev\u0103zute \u00een art. 74 Cod penal:<\/p>\n<ul>\n<li class=\"mb-2 whitespace-pre-wrap\">\u00eemprejur\u0103rile \u0219i modul de comitere a infrac\u021biunii;<\/li>\n<li class=\"mb-2 whitespace-pre-wrap\">starea de pericol creat\u0103 pentru valoarea ocrotit\u0103;<\/li>\n<li class=\"mb-2 whitespace-pre-wrap\">natura \u0219i gravitatea rezultatului produs ori a altor consecin\u021be ale infrac\u021biunii;<\/li>\n<li class=\"mb-2 whitespace-pre-wrap\">motivul s\u0103v\u00e2r\u0219irii infrac\u021biunii \u0219i scopul urm\u0103rit;<\/li>\n<li class=\"mb-2 whitespace-pre-wrap\">natura \u0219i frecven\u021ba infrac\u021biunilor care constituie antecedente penale ale infractorului;<\/li>\n<li class=\"mb-2 whitespace-pre-wrap\">conduita dup\u0103 s\u0103v\u00e2r\u0219irea infrac\u021biunii \u0219i \u00een cursul procesului penal;<\/li>\n<li class=\"mb-2 whitespace-pre-wrap\">nivelul de educa\u021bie, v\u00e2rsta, starea de s\u0103n\u0103tate, situa\u021bia familial\u0103 \u0219i social\u0103.<\/li>\n<\/ul>\n\n\n<h3 class=\"wp-block-heading\"><strong>Informa\u021bii suplimentare<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Dac\u0103 ai nevoie de asisten\u021b\u0103 juridic\u0103 pentru a \u00een\u021belege modul de aplicare a acestor reguli \u00eentr-un caz concret sau pentru a beneficia de o ap\u0103rare eficient\u0103 \u00een fa\u021ba instan\u021bei, nu ezita s\u0103 ne contactezi.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/zic.legal\/team\/zlatigeorge\/\" target=\"_blank\" rel=\"noreferrer noopener\">George Zlati&nbsp;<\/a>este avocat de drept penal \u0219i lector universitar. Acesta este titular al disciplinei&nbsp;<em>Drept penal. Partea special\u0103<\/em>&nbsp;la nivel licen\u021b\u0103 \u0219i&nbsp;<em>Criminalitate informatic\u0103&nbsp;<\/em>la nivel de masterat, av\u00e2nd de asemenea un doctorat pe criminalitate informatic\u0103.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Concursul de infrac\u021biuni este o situa\u021bie juridic\u0103 \u00een care o persoan\u0103 comite dou\u0103 sau mai multe infrac\u021biuni \u00eenainte de a fi condamnat\u0103 definitiv pentru vreuna dintre ele. Folose\u0219te calculatorul nostru pentru calcularea automat\u0103 a pedepsei rezultante pentru concursul de infrac\u021biuni. Aten\u021bie! \u00cen prezent, folosind acest calculator po\u021bi calcula doar concursul de infrac\u021biuni,  [&#8230;]<\/p>\n","protected":false},"author":2,"featured_media":3960,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[2],"tags":[4,39,40],"class_list":["post-2406","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-diverse","tag-avocat-george-zlati","tag-concurs-de-infractiuni","tag-predeapsa-rezultanta"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Concursul de infrac\u021biuni \u00een Codul penal rom\u00e2n: Explica\u021bii \u0219i exemple practice | ZIC Legal<\/title>\n<meta name=\"description\" content=\"Calculator pentru concursul de infrac\u021biuni. Afl\u0103 pedeapsa rezultant\u0103 la concursul de infrac\u021biuni. Calculator \u0219i explica\u021bii cu exemple.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/zic.legal\/ro\/calcul-concursul-de-infractiuni\/\" \/>\n<meta property=\"og:locale\" content=\"ro_RO\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Concursul de infrac\u021biuni \u00een Codul penal rom\u00e2n: Explica\u021bii \u0219i exemple practice | ZIC Legal\" \/>\n<meta property=\"og:description\" content=\"Calculator pentru concursul de infrac\u021biuni. Afl\u0103 pedeapsa rezultant\u0103 la concursul de infrac\u021biuni. Calculator \u0219i explica\u021bii cu exemple.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/zic.legal\/ro\/calcul-concursul-de-infractiuni\/\" \/>\n<meta property=\"og:site_name\" content=\"ZIC Legal\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/profile.php?id=61573624655319\" \/>\n<meta property=\"article:published_time\" content=\"2024-05-09T11:25:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-12-28T16:32:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/zic.legal\/wp-content\/uploads\/2024\/05\/tools7.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1536\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"George Zlati\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Scris de\" \/>\n\t<meta name=\"twitter:data1\" content=\"George Zlati\" \/>\n\t<meta name=\"twitter:label2\" content=\"Timp estimat pentru citire\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/zic.legal\\\/calcul-concursul-de-infractiuni\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zic.legal\\\/calcul-concursul-de-infractiuni\\\/\"},\"author\":{\"name\":\"George Zlati\",\"@id\":\"https:\\\/\\\/zic.legal\\\/#\\\/schema\\\/person\\\/cffc51a7df5926dd9954aeb3bbbcc303\"},\"headline\":\"Concursul de infrac\u021biuni \u00een Codul penal rom\u00e2n: Explica\u021bii \u0219i exemple practice\",\"datePublished\":\"2024-05-09T11:25:03+00:00\",\"dateModified\":\"2025-12-28T16:32:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/zic.legal\\\/calcul-concursul-de-infractiuni\\\/\"},\"wordCount\":641,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/zic.legal\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/zic.legal\\\/calcul-concursul-de-infractiuni\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/zic.legal\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/tools7.webp\",\"keywords\":[\"avocat George Zlati\",\"concurs de infractiuni\",\"predeapsa rezultanta\"],\"articleSection\":[\"Diverse\"],\"inLanguage\":\"ro-RO\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/zic.legal\\\/calcul-concursul-de-infractiuni\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/zic.legal\\\/calcul-concursul-de-infractiuni\\\/\",\"url\":\"https:\\\/\\\/zic.legal\\\/calcul-concursul-de-infractiuni\\\/\",\"name\":\"Concursul de infrac\u021biuni \u00een Codul penal rom\u00e2n: Explica\u021bii \u0219i exemple practice | ZIC Legal\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zic.legal\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/zic.legal\\\/calcul-concursul-de-infractiuni\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/zic.legal\\\/calcul-concursul-de-infractiuni\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/zic.legal\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/tools7.webp\",\"datePublished\":\"2024-05-09T11:25:03+00:00\",\"dateModified\":\"2025-12-28T16:32:23+00:00\",\"description\":\"Calculator pentru concursul de infrac\u021biuni. Afl\u0103 pedeapsa rezultant\u0103 la concursul de infrac\u021biuni. Calculator \u0219i explica\u021bii cu exemple.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/zic.legal\\\/calcul-concursul-de-infractiuni\\\/#breadcrumb\"},\"inLanguage\":\"ro-RO\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/zic.legal\\\/calcul-concursul-de-infractiuni\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ro-RO\",\"@id\":\"https:\\\/\\\/zic.legal\\\/calcul-concursul-de-infractiuni\\\/#primaryimage\",\"url\":\"https:\\\/\\\/zic.legal\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/tools7.webp\",\"contentUrl\":\"https:\\\/\\\/zic.legal\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/tools7.webp\",\"width\":1536,\"height\":1024},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/zic.legal\\\/calcul-concursul-de-infractiuni\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/zic.legal\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Concursul de infrac\u021biuni \u00een Codul penal rom\u00e2n: Explica\u021bii \u0219i exemple practice\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/zic.legal\\\/#website\",\"url\":\"https:\\\/\\\/zic.legal\\\/\",\"name\":\"Zlati Ionescu Chiperi SCA\",\"description\":\"Not another brick in the law\",\"publisher\":{\"@id\":\"https:\\\/\\\/zic.legal\\\/#organization\"},\"alternateName\":\"Zlati Ionescu Chiperi - SCA\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/zic.legal\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ro-RO\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/zic.legal\\\/#organization\",\"name\":\"Zlati Ionescu Chiperi SCA\",\"url\":\"https:\\\/\\\/zic.legal\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ro-RO\",\"@id\":\"https:\\\/\\\/zic.legal\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/zic.legal\\\/wp-content\\\/uploads\\\/2025\\\/02\\\/Logo-Color-RGB@0.5x.png\",\"contentUrl\":\"https:\\\/\\\/zic.legal\\\/wp-content\\\/uploads\\\/2025\\\/02\\\/Logo-Color-RGB@0.5x.png\",\"width\":306,\"height\":306,\"caption\":\"Zlati Ionescu Chiperi SCA\"},\"image\":{\"@id\":\"https:\\\/\\\/zic.legal\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/profile.php?id=61573624655319\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/zic-legal\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/zic.legal\\\/#\\\/schema\\\/person\\\/cffc51a7df5926dd9954aeb3bbbcc303\",\"name\":\"George Zlati\",\"url\":\"https:\\\/\\\/zic.legal\\\/ro\\\/author\\\/zlatigeorge\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Concursul de infrac\u021biuni \u00een Codul penal rom\u00e2n: Explica\u021bii \u0219i exemple practice | ZIC Legal","description":"Calculator pentru concursul de infrac\u021biuni. Afl\u0103 pedeapsa rezultant\u0103 la concursul de infrac\u021biuni. Calculator \u0219i explica\u021bii cu exemple.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/zic.legal\/ro\/calcul-concursul-de-infractiuni\/","og_locale":"ro_RO","og_type":"article","og_title":"Concursul de infrac\u021biuni \u00een Codul penal rom\u00e2n: Explica\u021bii \u0219i exemple practice | ZIC Legal","og_description":"Calculator pentru concursul de infrac\u021biuni. Afl\u0103 pedeapsa rezultant\u0103 la concursul de infrac\u021biuni. Calculator \u0219i explica\u021bii cu exemple.","og_url":"https:\/\/zic.legal\/ro\/calcul-concursul-de-infractiuni\/","og_site_name":"ZIC Legal","article_publisher":"https:\/\/www.facebook.com\/profile.php?id=61573624655319","article_published_time":"2024-05-09T11:25:03+00:00","article_modified_time":"2025-12-28T16:32:23+00:00","og_image":[{"width":1536,"height":1024,"url":"https:\/\/zic.legal\/wp-content\/uploads\/2024\/05\/tools7.webp","type":"image\/webp"}],"author":"George Zlati","twitter_card":"summary_large_image","twitter_misc":{"Scris de":"George Zlati","Timp estimat pentru citire":"3 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/zic.legal\/calcul-concursul-de-infractiuni\/#article","isPartOf":{"@id":"https:\/\/zic.legal\/calcul-concursul-de-infractiuni\/"},"author":{"name":"George Zlati","@id":"https:\/\/zic.legal\/#\/schema\/person\/cffc51a7df5926dd9954aeb3bbbcc303"},"headline":"Concursul de infrac\u021biuni \u00een Codul penal rom\u00e2n: Explica\u021bii \u0219i exemple practice","datePublished":"2024-05-09T11:25:03+00:00","dateModified":"2025-12-28T16:32:23+00:00","mainEntityOfPage":{"@id":"https:\/\/zic.legal\/calcul-concursul-de-infractiuni\/"},"wordCount":641,"commentCount":0,"publisher":{"@id":"https:\/\/zic.legal\/#organization"},"image":{"@id":"https:\/\/zic.legal\/calcul-concursul-de-infractiuni\/#primaryimage"},"thumbnailUrl":"https:\/\/zic.legal\/wp-content\/uploads\/2024\/05\/tools7.webp","keywords":["avocat George Zlati","concurs de infractiuni","predeapsa rezultanta"],"articleSection":["Diverse"],"inLanguage":"ro-RO","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/zic.legal\/calcul-concursul-de-infractiuni\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/zic.legal\/calcul-concursul-de-infractiuni\/","url":"https:\/\/zic.legal\/calcul-concursul-de-infractiuni\/","name":"Concursul de infrac\u021biuni \u00een Codul penal rom\u00e2n: Explica\u021bii \u0219i exemple practice | ZIC Legal","isPartOf":{"@id":"https:\/\/zic.legal\/#website"},"primaryImageOfPage":{"@id":"https:\/\/zic.legal\/calcul-concursul-de-infractiuni\/#primaryimage"},"image":{"@id":"https:\/\/zic.legal\/calcul-concursul-de-infractiuni\/#primaryimage"},"thumbnailUrl":"https:\/\/zic.legal\/wp-content\/uploads\/2024\/05\/tools7.webp","datePublished":"2024-05-09T11:25:03+00:00","dateModified":"2025-12-28T16:32:23+00:00","description":"Calculator pentru concursul de infrac\u021biuni. Afl\u0103 pedeapsa rezultant\u0103 la concursul de infrac\u021biuni. Calculator \u0219i explica\u021bii cu exemple.","breadcrumb":{"@id":"https:\/\/zic.legal\/calcul-concursul-de-infractiuni\/#breadcrumb"},"inLanguage":"ro-RO","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zic.legal\/calcul-concursul-de-infractiuni\/"]}]},{"@type":"ImageObject","inLanguage":"ro-RO","@id":"https:\/\/zic.legal\/calcul-concursul-de-infractiuni\/#primaryimage","url":"https:\/\/zic.legal\/wp-content\/uploads\/2024\/05\/tools7.webp","contentUrl":"https:\/\/zic.legal\/wp-content\/uploads\/2024\/05\/tools7.webp","width":1536,"height":1024},{"@type":"BreadcrumbList","@id":"https:\/\/zic.legal\/calcul-concursul-de-infractiuni\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/zic.legal\/"},{"@type":"ListItem","position":2,"name":"Concursul de infrac\u021biuni \u00een Codul penal rom\u00e2n: Explica\u021bii \u0219i exemple practice"}]},{"@type":"WebSite","@id":"https:\/\/zic.legal\/#website","url":"https:\/\/zic.legal\/","name":"Zlati Ionescu Chiperi SCA","description":"Not another brick in the law","publisher":{"@id":"https:\/\/zic.legal\/#organization"},"alternateName":"Zlati Ionescu Chiperi - SCA","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/zic.legal\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ro-RO"},{"@type":"Organization","@id":"https:\/\/zic.legal\/#organization","name":"Zlati Ionescu Chiperi SCA","url":"https:\/\/zic.legal\/","logo":{"@type":"ImageObject","inLanguage":"ro-RO","@id":"https:\/\/zic.legal\/#\/schema\/logo\/image\/","url":"https:\/\/zic.legal\/wp-content\/uploads\/2025\/02\/Logo-Color-RGB@0.5x.png","contentUrl":"https:\/\/zic.legal\/wp-content\/uploads\/2025\/02\/Logo-Color-RGB@0.5x.png","width":306,"height":306,"caption":"Zlati Ionescu Chiperi SCA"},"image":{"@id":"https:\/\/zic.legal\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/profile.php?id=61573624655319","https:\/\/www.linkedin.com\/company\/zic-legal\/"]},{"@type":"Person","@id":"https:\/\/zic.legal\/#\/schema\/person\/cffc51a7df5926dd9954aeb3bbbcc303","name":"George Zlati","url":"https:\/\/zic.legal\/ro\/author\/zlatigeorge\/"}]}},"jetpack_featured_media_url":"https:\/\/zic.legal\/wp-content\/uploads\/2024\/05\/tools7.webp","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/zic.legal\/ro\/wp-json\/wp\/v2\/posts\/2406","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zic.legal\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zic.legal\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zic.legal\/ro\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/zic.legal\/ro\/wp-json\/wp\/v2\/comments?post=2406"}],"version-history":[{"count":7,"href":"https:\/\/zic.legal\/ro\/wp-json\/wp\/v2\/posts\/2406\/revisions"}],"predecessor-version":[{"id":4089,"href":"https:\/\/zic.legal\/ro\/wp-json\/wp\/v2\/posts\/2406\/revisions\/4089"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/zic.legal\/ro\/wp-json\/wp\/v2\/media\/3960"}],"wp:attachment":[{"href":"https:\/\/zic.legal\/ro\/wp-json\/wp\/v2\/media?parent=2406"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zic.legal\/ro\/wp-json\/wp\/v2\/categories?post=2406"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zic.legal\/ro\/wp-json\/wp\/v2\/tags?post=2406"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}