{"id":28056,"date":"2026-06-03T18:36:14","date_gmt":"2026-06-03T18:36:14","guid":{"rendered":"https:\/\/yasateknoloji.com\/?page_id=28056"},"modified":"2026-07-13T17:21:16","modified_gmt":"2026-07-13T17:21:16","slug":"teklif-alin","status":"publish","type":"page","link":"https:\/\/yasateknoloji.com\/en\/teklif-alin\/","title":{"rendered":"Get a Quote"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"28056\" class=\"elementor elementor-28056\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-82573f0 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-parent\" data-id=\"82573f0\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ff46333 elementor-widget__width-inherit elementor-widget elementor-widget-html\" data-id=\"ff46333\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/xlsx\/0.18.5\/xlsx.full.min.js\"><\/script>\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jszip\/3.10.1\/jszip.min.js\"><\/script>\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/three.js\/r128\/three.min.js\"><\/script>\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/html2pdf.js\/0.10.1\/html2pdf.bundle.min.js\"><\/script>\n\n<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700&display=swap');\n.page-title-area.overlay-bg.style-1 {\n  display: none !important;\n}\n\n\/* WP Temas\u0131 ile \u00e7ak\u0131\u015fmamas\u0131 i\u00e7in izolasyon *\/\n.yasa-pcb-app {\n  font-family: \"Inter\", system-ui, sans-serif;\n  background: #f0f4f8;\n  color: #1a2332;\n  width: 100%;\n}\n.yasa-pcb-app * {\n  box-sizing: border-box;\n}\n\n\/* HERO *\/\n.yasa-pcb-app .hero {background:#f0f4f8;padding:72px 48px 56px;text-align:center;position:relative;overflow:hidden;}\n.yasa-pcb-app .hero-bg {position:absolute;inset:0;pointer-events:none;}\n.yasa-pcb-app .hero h1 {font-size:42px;font-weight:700;color:#1a2332;margin-bottom:14px;line-height:1.15;position:relative;}\n.yasa-pcb-app .hero h1 span {color:#3b82f6;}\n.yasa-pcb-app .hero p {font-size:16px;color:#1a2332;max-width:520px;margin:0 auto 40px;line-height:1.7;position:relative;}\n.yasa-pcb-app .hero-badges {display:flex;gap:10px;justify-content:center;flex-wrap:wrap;position:relative;}\n.yasa-pcb-app .badge {padding:6px 14px;border-radius:20px;font-size:12px;font-weight:500;border:1px solid;}\n.yasa-pcb-app .badge-blue {background:rgba(59,130,246,.1);border-color:rgba(59,130,246,.3);color:#60a5fa;}\n.yasa-pcb-app .badge-green {background:rgba(34,197,94,.1);border-color:rgba(34,197,94,.3);color:#4ade80;}\n.yasa-pcb-app .badge-purple {background:rgba(168,85,247,.1);border-color:rgba(168,85,247,.3);color:#c084fc;}\n\n\/* ADIMLAR *\/\n.yasa-pcb-app .steps {display:flex;gap:0;max-width:760px;margin:56px auto 0;position:relative;}\n.yasa-pcb-app .steps::before {content:\"\";position:absolute;top:28px;left:calc(16.66% + 28px);right:calc(16.66% + 28px);height:1px;background:linear-gradient(90deg,#3b82f6,#8b5cf6);z-index:0;}\n.yasa-pcb-app .step {flex:1;text-align:center;position:relative;z-index:1;}\n.yasa-pcb-app .step-circle {width:56px;height:56px;border-radius:50%;border:2px solid #3b82f6;background:#ffffff;display:flex;align-items:center;justify-content:center;margin:0 auto 14px;font-size:18px;font-weight:700;color:#3b82f6;position:relative;}\n.yasa-pcb-app .step.done .step-circle {background:#3b82f6;color:white;border-color:#3b82f6;}\n.yasa-pcb-app .step-title {font-size:13px;font-weight:600;color:#1a2332;margin-bottom:4px;}\n.yasa-pcb-app .step-sub {font-size:11px;color:#1a2332;}\n\n\/* MAIN & KART *\/\n.yasa-pcb-app .main {max-width:820px;margin:0 auto;padding:48px 24px 80px;}\n.yasa-pcb-app .card {background:#ffffff;border:1px solid #e2e8f0;border-radius:16px;padding:32px;margin-bottom:20px;transition:border-color .3s;}\n.yasa-pcb-app .card:hover {border-color:rgba(59,130,246,.3);}\n.yasa-pcb-app .card-title {font-size:16px;font-weight:600;color:#1a2332;margin-bottom:24px;display:flex;align-items:center;gap:10px;}\n.yasa-pcb-app .card-title-icon {width:32px;height:32px;border-radius:8px;background:rgba(59,130,246,.15);display:flex;align-items:center;justify-content:center;font-size:16px;}\n\n\/* DOSYA Y\u00dcKLEME *\/\n.yasa-pcb-app .file-grid {display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-bottom:16px;}\n.yasa-pcb-app .dz {border:1.5px dashed rgba(100,116,139,.4);border-radius:12px;padding:24px 14px;text-align:center;cursor:pointer;transition:all .25s;position:relative;background:#f1f5f9;}\n.yasa-pcb-app .dz:hover,.yasa-pcb-app .dz.drag {border-color:#3b82f6;background:rgba(59,130,246,.06);}\n.yasa-pcb-app .dz.loaded {border-color:#22c55e;border-style:solid;background:rgba(34,197,94,.06);}\n.yasa-pcb-app .dz input[type=file] {position:absolute;inset:0;opacity:0;cursor:pointer;width:100%;height:100%;}\n.yasa-pcb-app .dz-icon-wrap {width:52px;height:52px;border-radius:12px;background:rgba(59,130,246,.1);border:1px solid #bfdbfe;display:flex;align-items:center;justify-content:center;margin:0 auto 12px;transition:all .25s;}\n.yasa-pcb-app .dz.loaded .dz-icon-wrap {background:rgba(34,197,94,.1);border-color:rgba(34,197,94,.3);}\n.yasa-pcb-app .dz-label {font-size:13px;font-weight:600;color:#1a2332;margin-bottom:3px;}\n.yasa-pcb-app .dz-sub {font-size:11px;color:#1a2332;}\n.yasa-pcb-app .dz-status {font-size:11px;color:#4ade80;font-weight:500;margin-top:6px;display:none;}\n.yasa-pcb-app .dz.loaded .dz-status {display:block;}\n\n\/* PROGRESS & INPUTS *\/\n.yasa-pcb-app .progress {background:#f1f5f9;border-radius:12px;padding:16px 20px;margin-bottom:16px;display:flex;align-items:center;gap:16px;}\n.yasa-pcb-app .prog-bar {flex:1;height:6px;background:rgba(51,65,85,.8);border-radius:3px;overflow:hidden;}\n.yasa-pcb-app .prog-fill {height:100%;border-radius:3px;background:linear-gradient(90deg,#3b82f6,#8b5cf6);transition:width .5s cubic-bezier(.4,0,.2,1);width:0%;}\n.yasa-pcb-app .prog-text {font-size:12px;color:#1a2332;white-space:nowrap;}\n.yasa-pcb-app .adet-row {background:#f1f5f9;border:1px solid #bfdbfe;border-radius:12px;padding:16px 20px;display:flex;align-items:center;gap:16px;margin-bottom:16px;}\n.yasa-pcb-app .adet-label {font-size:13px;font-weight:500;color:#374151;flex:1;}\n.yasa-pcb-app .adet-label span {color:#1a2332;font-size:11px;display:block;margin-top:2px;}\n.yasa-pcb-app .adet-input {width:100px;padding:8px 12px;background:#f8fafc;border:1px solid rgba(59,130,246,.3);border-radius:8px;color:#1a2332;font-size:15px;font-weight:600;outline:none;text-align:center;}\n.yasa-pcb-app .file-note {font-size:11px;color:#374151;background:#f8fafc;padding:10px 14px;border-radius:8px;margin-bottom:20px;display:flex;align-items:center;gap:8px;}\n\n\/* BUTTONS *\/\n.yasa-pcb-app .btn-ana {width:100%;padding:15px;border-radius:12px;border:none;font-size:15px;font-weight:600;cursor:pointer;transition:all .2s;position:relative;}\n.yasa-pcb-app .btn-ana:not(:disabled) {background:linear-gradient(135deg,#2563eb,#7c3aed);color:white;}\n.yasa-pcb-app .btn-ana:disabled {background:#f1f5f9;color:#374151;cursor:not-allowed;border:1px solid rgba(51,65,85,.5);}\n.yasa-pcb-app .btn-send {width:100%;padding:15px;border-radius:12px;border:none;background:linear-gradient(135deg,#059669,#0891b2);color:white;font-size:15px;font-weight:600;cursor:pointer;margin-top:8px;}\n.yasa-pcb-app .btn-send:disabled {background:#f1f5f9;color:#374151;cursor:not-allowed;}\n\n\/* SONU\u00c7 & F\u0130YAT *\/\n.yasa-pcb-app .result-box {display:none;background:#f8fafc;border:1px solid #bfdbfe;border-radius:16px;padding:28px;margin-bottom:20px;}\n.yasa-pcb-app .result-grid {display:grid;grid-template-columns:repeat(2,1fr);gap:12px;margin-bottom:20px;}\n.yasa-pcb-app .res-item {background:#f1f5f9;border:1px solid rgba(51,65,85,.5);border-radius:10px;padding:14px 16px;}\n.yasa-pcb-app .res-label {font-size:10px;text-transform:uppercase;letter-spacing:.8px;color:#1a2332;margin-bottom:6px;}\n.yasa-pcb-app .res-val {font-size:22px;font-weight:700;color:#1a2332;}\n.yasa-pcb-app .res-sub {font-size:11px;color:#374151;margin-top:2px;}\n.yasa-pcb-app .price-banner {background:linear-gradient(135deg,rgba(37,99,235,.15),rgba(124,58,237,.15));border:1px solid rgba(59,130,246,.3);border-radius:12px;padding:20px 24px;display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;}\n.yasa-pcb-app .price-left-label {font-size:13px;font-weight:500;color:#93c5fd;}\n.yasa-pcb-app .price-amount {font-size:32px;font-weight:700;color:#1a2332;}\n.yasa-pcb-app .price-warning {font-size:11px;color:#fbbf24;background:rgba(251,191,36,.08);border:1px solid rgba(251,191,36,.2);border-radius:8px;padding:8px 12px;margin-bottom:12px;display:none;}\n.yasa-pcb-app .result-note {font-size:12px;color:#1a2332;background:#f8fafc;border-radius:8px;padding:12px 14px;line-height:1.7;}\n.yasa-pcb-app .excl-list {margin-top:8px;display:grid;grid-template-columns:1fr 1fr;gap:3px;}\n.yasa-pcb-app .excl-item {font-size:11px;color:#374151;display:flex;align-items:center;gap:5px;}\n.yasa-pcb-app .excl-item::before {content:\"\u2715\";color:#ef4444;font-size:10px;}\n\n\/* FORM *\/\n.yasa-pcb-app .form-grid {display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:14px;}\n.yasa-pcb-app label {display:block;font-size:12px;font-weight:500;color:#1a2332;margin-bottom:5px;}\n.yasa-pcb-app .req {color:#ef4444;}\n.yasa-pcb-app input[type=text], .yasa-pcb-app input[type=email], .yasa-pcb-app input[type=tel], .yasa-pcb-app textarea {width:100%;padding:10px 13px;background:#f8fafc;border:1px solid rgba(51,65,85,.6);border-radius:8px;font-size:13px;outline:none;color:#1a2332;}\n.yasa-pcb-app textarea {resize:vertical;min-height:80px;}\n.yasa-pcb-app .opts-grid {display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:14px;}\n.yasa-pcb-app .opt {display:flex;align-items:center;gap:8px;padding:10px 12px;border:1px solid rgba(51,65,85,.6);border-radius:8px;cursor:pointer;background:#f1f5f9;}\n.yasa-pcb-app .opt input {width:15px;height:15px;accent-color:#3b82f6;}\n\n\/* ALERTS & SUCCESS *\/\n.yasa-pcb-app .alert {padding:12px 16px;border-radius:10px;font-size:12px;margin-bottom:14px;display:none;border:1px solid;}\n.yasa-pcb-app .alert-warn {background:rgba(234,179,8,.08);border-color:rgba(234,179,8,.25);color:#fde047;}\n.yasa-pcb-app .alert-ok {background:rgba(34,197,94,.08);border-color:rgba(34,197,94,.25);color:#4ade80;}\n.yasa-pcb-app .alert.show {display:block;}\n.yasa-pcb-app .spin {display:inline-block;width:16px;height:16px;border:2px solid rgba(255,255,255,.3);border-top-color:white;border-radius:50%;animation:rot .7s linear infinite;vertical-align:middle;margin-right:6px;}\n@keyframes rot{to{transform:rotate(360deg);}}\n.yasa-pcb-app .success {display:none;text-align:center;padding:60px 20px;}\n.yasa-pcb-app .success-icon {font-size:64px;margin-bottom:20px;}\n.yasa-pcb-app .btn-reset {padding:12px 28px;border-radius:10px;border:1px solid rgba(59,130,246,.4);background:rgba(59,130,246,.1);color:#60a5fa;font-size:14px;font-weight:500;cursor:pointer;}\n\n\/* VIEWER *\/\n.yasa-pcb-app .viewer-section {display:none;margin-bottom:20px;}\n.yasa-pcb-app .viewer-card {background:#f0f4f8;border:1px solid #bfdbfe;border-radius:16px;overflow:hidden;}\n.yasa-pcb-app .viewer-header {padding:16px 24px;border-bottom:1px solid rgba(59,130,246,.15);display:flex;align-items:center;justify-content:space-between;}\n.yasa-pcb-app .viewer-title {font-size:14px;font-weight:600;color:#1a2332;display:flex;align-items:center;gap:8px;}\n.yasa-pcb-app .viewer-tabs {display:flex;gap:4px;}\n.yasa-pcb-app .vtab {padding:6px 14px;border-radius:6px;font-size:12px;font-weight:500;cursor:pointer;border:1px solid transparent;color:#1a2332;}\n.yasa-pcb-app .vtab.active {background:rgba(59,130,246,.15);border-color:rgba(59,130,246,.3);color:#60a5fa;}\n.yasa-pcb-app .viewer-body {padding:20px;min-height:280px;display:flex;align-items:center;justify-content:center;position:relative;}\n.yasa-pcb-app .viewer-svg-wrap {width:100%;overflow:hidden;border-radius:8px;background:#ffffff;cursor:grab;user-select:none;}\n.yasa-pcb-app .viewer-svg-wrap svg {width:100%;height:auto;display:block;}\n.yasa-pcb-app .viewer-loading {text-align:center;color:#1a2332;}\n.yasa-pcb-app .viewer-loading-spin {width:36px;height:36px;border:3px solid rgba(59,130,246,.2);border-top-color:#3b82f6;border-radius:50%;animation:rot .8s linear infinite;margin:0 auto 12px;}\n.yasa-pcb-app .viewer-info {padding:12px 24px;border-top:1px solid rgba(59,130,246,.1);display:flex;gap:20px;font-size:11px;color:#374151;}\n\n\/* FOOTER *\/\n.yasa-pcb-app .yasa-footer {border-top:1px solid rgba(30,41,59,.2);padding:24px 48px;display:flex;justify-content:space-between;align-items:center;font-size:12px;color:#374151;}\n.yasa-pcb-app .yasa-footer a {color:#60a5fa;text-decoration:none;}\n\n@media(max-width:640px){\n  .yasa-pcb-app .file-grid, .yasa-pcb-app .form-grid, .yasa-pcb-app .opts-grid, .yasa-pcb-app .result-grid{grid-template-columns:1fr;}\n  .yasa-pcb-app .hero h1{font-size:28px;}\n  .yasa-pcb-app .hdr, .yasa-pcb-app .hero{padding-left:20px;padding-right:20px;}\n  .yasa-pcb-app .steps::before{display:none;}\n  .yasa-pcb-app .steps{flex-direction:column;gap:16px;}\n  .yasa-pcb-app .excl-list{grid-template-columns:1fr;}\n  .yasa-pcb-app .yasa-footer{flex-direction:column;gap:8px;text-align:center;}\n}\n<\/style>\n\n<div class=\"yasa-pcb-app\">\n\n  <div class=\"hero\">\n    <svg class=\"hero-bg\" viewbox=\"0 0 1200 400\" preserveaspectratio=\"xMidYMid slice\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n      <defs>\n        <pattern id=\"pcbgrid\" width=\"30\" height=\"30\" patternunits=\"userSpaceOnUse\">\n          <path d=\"M30 0H0V30\" fill=\"none\" stroke=\"rgba(59,130,246,.05)\" stroke-width=\"0.5\"\/>\n        <\/pattern>\n        <filter id=\"glow\" x=\"-20%\" y=\"-20%\" width=\"140%\" height=\"140%\">\n          <fegaussianblur stddeviation=\"2\" result=\"blur\"\/>\n          <femerge><femergenode in=\"blur\"\/><femergenode in=\"SourceGraphic\"\/><\/femerge>\n        <\/filter>\n        <filter id=\"viaglow\" x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\">\n          <fegaussianblur stddeviation=\"1.5\" result=\"blur\"\/>\n          <femerge><femergenode in=\"blur\"\/><femergenode in=\"SourceGraphic\"\/><\/femerge>\n        <\/filter>\n        <lineargradient id=\"pulse1\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\">\n          <stop offset=\"0%\" stop-color=\"rgba(59,130,246,0)\"\/>\n          <stop offset=\"50%\" stop-color=\"rgba(59,130,246,0.7)\"\/>\n          <stop offset=\"100%\" stop-color=\"rgba(59,130,246,0)\"\/>\n          <animatetransform attributename=\"gradientTransform\" type=\"translate\" from=\"-1 0\" to=\"2 0\" dur=\"2.5s\" repeatcount=\"indefinite\"\/>\n        <\/lineargradient>\n      <\/defs>\n\n      <rect width=\"1200\" height=\"400\" fill=\"url(#pcbgrid)\"\/>\n\n      <g stroke=\"rgba(34,197,94,.18)\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n        <path d=\"M20,80 H120 V40 H220 V80 H320\"\/>\n        <path d=\"M20,140 H80 V100 H180 V60 H260 V100 H360 V140 H460\"\/>\n        <path d=\"M20,200 H60 V160 H160 V200 H240 V160 H340 V200 H440 V240 H340 V280 H240\"\/>\n        <path d=\"M20,320 H100 V280 H200 V320 H300 V360 H160 V320\"\/>\n        <path d=\"M80,360 H180 V340 H280 V360 H380\"\/>\n      <\/g>\n      <g stroke=\"rgba(34,197,94,.18)\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n        <path d=\"M1180,60 H1080 V100 H980 V60 H880\"\/>\n        <path d=\"M1180,140 H1120 V100 H1020 V140 H920 V100 H820 V140 H740\"\/>\n        <path d=\"M1180,220 H1140 V180 H1060 V220 H960 V180 H860 V220 H780 V260 H880 V300 H980\"\/>\n        <path d=\"M1180,320 H1100 V360 H1000 V320 H900 V360 H800\"\/>\n        <path d=\"M1120,380 H1020 V360 H920 V380 H820 V360\"\/>\n      <\/g>\n      <g stroke=\"rgba(59,130,246,.15)\" stroke-width=\"1.2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n        <path d=\"M460,140 H540 V80 H660 V140 H740\"\/>\n        <path d=\"M420,240 H500 V280 H700 V240 H780\"\/>\n        <path d=\"M480,340 H560 V300 H640 V340 H720\"\/>\n      <\/g>\n      <g stroke=\"rgba(34,197,94,.10)\" stroke-width=\"3\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n        <path d=\"M20,50 H580 V350 H20\"\/>\n        <path d=\"M1180,50 H620 V350 H1180\"\/>\n      <\/g>\n\n      <path id=\"tr1\" d=\"M20,80 H120 V40 H220 V80 H320 V60 H460 V80 H540 V40 H660 V80 H740 V60 H880 V100 H980 V60 H1080 V100 H1180\" fill=\"none\" stroke=\"rgba(59,130,246,0)\" stroke-width=\"2\">\n        <animate attributename=\"stroke\" values=\"rgba(59,130,246,0);rgba(59,130,246,.55);rgba(59,130,246,.55);rgba(59,130,246,0)\" dur=\"3.2s\" begin=\"0s\" repeatcount=\"indefinite\"\/>\n        <animate attributename=\"stroke-dasharray\" values=\"0,3000;400,2600;400,2600;0,3000\" dur=\"3.2s\" begin=\"0s\" repeatcount=\"indefinite\"\/>\n        <animate attributename=\"stroke-dashoffset\" values=\"0;-1400;-2800;-3000\" dur=\"3.2s\" begin=\"0s\" repeatcount=\"indefinite\"\/>\n      <\/path>\n      <path id=\"tr2\" d=\"M20,200 H60 V160 H160 V200 H240 V160 H340 V200 H440 V240 H540 V200 H640 V240 H740 V200 H860 V220 H960 V180 H1060 V220 H1180\" fill=\"none\" stroke=\"rgba(59,130,246,0)\" stroke-width=\"2\">\n        <animate attributename=\"stroke\" values=\"rgba(59,130,246,0);rgba(59,130,246,.5);rgba(59,130,246,.5);rgba(59,130,246,0)\" dur=\"4s\" begin=\"1.1s\" repeatcount=\"indefinite\"\/>\n        <animate attributename=\"stroke-dasharray\" values=\"0,3000;350,2650;350,2650;0,3000\" dur=\"4s\" begin=\"1.1s\" repeatcount=\"indefinite\"\/>\n        <animate attributename=\"stroke-dashoffset\" values=\"0;-1200;-2600;-3000\" dur=\"4s\" begin=\"1.1s\" repeatcount=\"indefinite\"\/>\n      <\/path>\n      <path id=\"tr3\" d=\"M20,320 H100 V280 H200 V320 H300 V360 H460 V320 H560 V360 H660 V320 H780 V300 H880 V340 H980 V300 H1100 V340 H1180\" fill=\"none\" stroke=\"rgba(59,130,246,0)\" stroke-width=\"2\">\n        <animate attributename=\"stroke\" values=\"rgba(59,130,246,0);rgba(59,130,246,.45);rgba(59,130,246,.45);rgba(59,130,246,0)\" dur=\"3.7s\" begin=\"2.1s\" repeatcount=\"indefinite\"\/>\n        <animate attributename=\"stroke-dasharray\" values=\"0,3000;380,2620;380,2620;0,3000\" dur=\"3.7s\" begin=\"2.1s\" repeatcount=\"indefinite\"\/>\n        <animate attributename=\"stroke-dashoffset\" values=\"0;-1300;-2700;-3000\" dur=\"3.7s\" begin=\"2.1s\" repeatcount=\"indefinite\"\/>\n      <\/path>\n\n      <g filter=\"url(#viaglow)\">\n        <g fill=\"rgba(34,197,94,.12)\" stroke=\"rgba(34,197,94,.4)\" stroke-width=\"1\">\n          <circle cx=\"120\" cy=\"80\" r=\"5\"\/><circle cx=\"120\" cy=\"80\" r=\"2.5\" fill=\"rgba(34,197,94,.3)\" stroke=\"none\"\/>\n          <circle cx=\"220\" cy=\"40\" r=\"5\"\/><circle cx=\"220\" cy=\"40\" r=\"2.5\" fill=\"rgba(34,197,94,.3)\" stroke=\"none\"\/>\n          <circle cx=\"80\" cy=\"100\" r=\"5\"\/><circle cx=\"80\" cy=\"100\" r=\"2.5\" fill=\"rgba(34,197,94,.3)\" stroke=\"none\"\/>\n          <circle cx=\"180\" cy=\"60\" r=\"5\"\/><circle cx=\"180\" cy=\"60\" r=\"2.5\" fill=\"rgba(34,197,94,.3)\" stroke=\"none\"\/>\n          <circle cx=\"160\" cy=\"200\" r=\"5\"\/><circle cx=\"160\" cy=\"200\" r=\"2.5\" fill=\"rgba(34,197,94,.3)\" stroke=\"none\"\/>\n          <circle cx=\"240\" cy=\"160\" r=\"5\"\/><circle cx=\"240\" cy=\"160\" r=\"2.5\" fill=\"rgba(34,197,94,.3)\" stroke=\"none\"\/>\n          <circle cx=\"100\" cy=\"280\" r=\"5\"\/><circle cx=\"100\" cy=\"280\" r=\"2.5\" fill=\"rgba(34,197,94,.3)\" stroke=\"none\"\/>\n          <circle cx=\"200\" cy=\"320\" r=\"5\"\/><circle cx=\"200\" cy=\"320\" r=\"2.5\" fill=\"rgba(34,197,94,.3)\" stroke=\"none\"\/>\n        <\/g>\n        <g fill=\"rgba(59,130,246,.12)\" stroke=\"rgba(59,130,246,.4)\" stroke-width=\"1\">\n          <circle cx=\"540\" cy=\"80\" r=\"5\"\/><circle cx=\"540\" cy=\"80\" r=\"2.5\" fill=\"rgba(59,130,246,.3)\" stroke=\"none\"\/>\n          <circle cx=\"660\" cy=\"80\" r=\"5\"\/><circle cx=\"660\" cy=\"80\" r=\"2.5\" fill=\"rgba(59,130,246,.3)\" stroke=\"none\"\/>\n          <circle cx=\"500\" cy=\"280\" r=\"5\"\/><circle cx=\"500\" cy=\"280\" r=\"2.5\" fill=\"rgba(59,130,246,.3)\" stroke=\"none\"\/>\n          <circle cx=\"700\" cy=\"280\" r=\"5\"\/><circle cx=\"700\" cy=\"280\" r=\"2.5\" fill=\"rgba(59,130,246,.3)\" stroke=\"none\"\/>\n          <circle cx=\"560\" cy=\"300\" r=\"5\"\/><circle cx=\"560\" cy=\"300\" r=\"2.5\" fill=\"rgba(59,130,246,.3)\" stroke=\"none\"\/>\n          <circle cx=\"640\" cy=\"300\" r=\"5\"\/><circle cx=\"640\" cy=\"300\" r=\"2.5\" fill=\"rgba(59,130,246,.3)\" stroke=\"none\"\/>\n        <\/g>\n        <g fill=\"rgba(34,197,94,.12)\" stroke=\"rgba(34,197,94,.4)\" stroke-width=\"1\">\n          <circle cx=\"1080\" cy=\"100\" r=\"5\"\/><circle cx=\"1080\" cy=\"100\" r=\"2.5\" fill=\"rgba(34,197,94,.3)\" stroke=\"none\"\/>\n          <circle cx=\"980\" cy=\"60\" r=\"5\"\/><circle cx=\"980\" cy=\"60\" r=\"2.5\" fill=\"rgba(34,197,94,.3)\" stroke=\"none\"\/>\n          <circle cx=\"1020\" cy=\"140\" r=\"5\"\/><circle cx=\"1020\" cy=\"140\" r=\"2.5\" fill=\"rgba(34,197,94,.3)\" stroke=\"none\"\/>\n          <circle cx=\"860\" cy=\"220\" r=\"5\"\/><circle cx=\"860\" cy=\"220\" r=\"2.5\" fill=\"rgba(34,197,94,.3)\" stroke=\"none\"\/>\n          <circle cx=\"960\" cy=\"180\" r=\"5\"\/><circle cx=\"960\" cy=\"180\" r=\"2.5\" fill=\"rgba(34,197,94,.3)\" stroke=\"none\"\/>\n          <circle cx=\"1100\" cy=\"360\" r=\"5\"\/><circle cx=\"1100\" cy=\"360\" r=\"2.5\" fill=\"rgba(34,197,94,.3)\" stroke=\"none\"\/>\n          <circle cx=\"900\" cy=\"360\" r=\"5\"\/><circle cx=\"900\" cy=\"360\" r=\"2.5\" fill=\"rgba(34,197,94,.3)\" stroke=\"none\"\/>\n        <\/g>\n      <\/g>\n\n      <g fill=\"rgba(34,197,94,.14)\" stroke=\"rgba(34,197,94,.35)\" stroke-width=\"0.8\">\n        <rect x=\"130\" cy=\"130\" y=\"130\" width=\"60\" height=\"50\" rx=\"3\" fill=\"rgba(30,40,60,.4)\" stroke=\"rgba(59,130,246,.2)\" stroke-width=\"1\"\/>\n        <rect x=\"118\" y=\"138\" width=\"10\" height=\"5\" rx=\"1\"\/>\n        <rect x=\"118\" y=\"148\" width=\"10\" height=\"5\" rx=\"1\"\/>\n        <rect x=\"118\" y=\"158\" width=\"10\" height=\"5\" rx=\"1\"\/>\n        <rect x=\"118\" y=\"168\" width=\"10\" height=\"5\" rx=\"1\"\/>\n        <rect x=\"192\" y=\"138\" width=\"10\" height=\"5\" rx=\"1\"\/>\n        <rect x=\"192\" y=\"148\" width=\"10\" height=\"5\" rx=\"1\"\/>\n        <rect x=\"192\" y=\"158\" width=\"10\" height=\"5\" rx=\"1\"\/>\n        <rect x=\"192\" y=\"168\" width=\"10\" height=\"5\" rx=\"1\"\/>\n      <\/g>\n      <g fill=\"rgba(34,197,94,.15)\" stroke=\"rgba(34,197,94,.35)\" stroke-width=\"0.8\">\n        <rect x=\"255\" y=\"235\" width=\"14\" height=\"8\" rx=\"1\"\/>\n        <rect x=\"275\" y=\"235\" width=\"14\" height=\"8\" rx=\"1\"\/>\n        <rect x=\"255\" y=\"250\" width=\"14\" height=\"8\" rx=\"1\"\/>\n        <rect x=\"275\" y=\"250\" width=\"14\" height=\"8\" rx=\"1\"\/>\n        <rect x=\"255\" y=\"265\" width=\"14\" height=\"8\" rx=\"1\"\/>\n        <rect x=\"275\" y=\"265\" width=\"14\" height=\"8\" rx=\"1\"\/>\n      <\/g>\n      <g fill=\"rgba(34,197,94,.13)\" stroke=\"rgba(34,197,94,.3)\" stroke-width=\"0.8\">\n        <rect x=\"940\" y=\"295\" width=\"8\" height=\"16\" rx=\"1\"\/>\n        <rect x=\"954\" y=\"295\" width=\"8\" height=\"16\" rx=\"1\"\/>\n        <rect x=\"968\" y=\"295\" width=\"8\" height=\"16\" rx=\"1\"\/>\n        <rect x=\"982\" y=\"295\" width=\"8\" height=\"16\" rx=\"1\"\/>\n        <rect x=\"996\" y=\"295\" width=\"8\" height=\"16\" rx=\"1\"\/>\n      <\/g>\n      <g fill=\"none\" stroke=\"rgba(59,130,246,.2)\" stroke-width=\"1.2\">\n        <circle cx=\"50\" cy=\"50\" r=\"8\"\/><circle cx=\"50\" cy=\"50\" r=\"4\"\/>\n        <circle cx=\"50\" cy=\"350\" r=\"8\"\/><circle cx=\"50\" cy=\"350\" r=\"4\"\/>\n        <circle cx=\"1150\" cy=\"50\" r=\"8\"\/><circle cx=\"1150\" cy=\"50\" r=\"4\"\/>\n        <circle cx=\"1150\" cy=\"350\" r=\"8\"\/><circle cx=\"1150\" cy=\"350\" r=\"4\"\/>\n      <\/g>\n      <g>\n        <circle cx=\"220\" cy=\"40\" r=\"7\" fill=\"none\" stroke=\"rgba(34,197,94,.6)\" stroke-width=\"1\">\n          <animate attributename=\"r\" values=\"5;9;5\" dur=\"2s\" begin=\"0s\" repeatcount=\"indefinite\"\/>\n          <animate attributename=\"opacity\" values=\"0.6;0;0.6\" dur=\"2s\" begin=\"0s\" repeatcount=\"indefinite\"\/>\n        <\/circle>\n        <circle cx=\"660\" cy=\"80\" r=\"7\" fill=\"none\" stroke=\"rgba(59,130,246,.6)\" stroke-width=\"1\">\n          <animate attributename=\"r\" values=\"5;9;5\" dur=\"2s\" begin=\"1s\" repeatcount=\"indefinite\"\/>\n          <animate attributename=\"opacity\" values=\"0.6;0;0.6\" dur=\"2s\" begin=\"1s\" repeatcount=\"indefinite\"\/>\n        <\/circle>\n        <circle cx=\"1080\" cy=\"100\" r=\"7\" fill=\"none\" stroke=\"rgba(34,197,94,.6)\" stroke-width=\"1\">\n          <animate attributename=\"r\" values=\"5;9;5\" dur=\"2s\" begin=\"0.5s\" repeatcount=\"indefinite\"\/>\n          <animate attributename=\"opacity\" values=\"0.6;0;0.6\" dur=\"2s\" begin=\"0.5s\" repeatcount=\"indefinite\"\/>\n        <\/circle>\n        <circle cx=\"500\" cy=\"280\" r=\"7\" fill=\"none\" stroke=\"rgba(59,130,246,.6)\" stroke-width=\"1\">\n          <animate attributename=\"r\" values=\"5;9;5\" dur=\"2s\" begin=\"1.5s\" repeatcount=\"indefinite\"\/>\n          <animate attributename=\"opacity\" values=\"0.6;0;0.6\" dur=\"2s\" begin=\"1.5s\" repeatcount=\"indefinite\"\/>\n        <\/circle>\n      <\/g>\n    <\/svg>\n\n    <h1>PCB Dizgi <span>An\u0131nda Teklif<\/span><\/h1>\n    <p>Gerber, Pick&amp;Place ve BOM dosyalar\u0131n\u0131z\u0131 y\u00fckleyin. Yapay zeka destekli sistemimiz kart\u0131n\u0131z\u0131 analiz ederek tahmini dizgi bedelini hesaplar.<\/p>\n    <div class=\"hero-badges\">\n      <span class=\"badge badge-blue\">&#9889; An\u0131nda Analiz<\/span>\n      <span class=\"badge badge-green\">&#128274; G\u00fcvenli &amp; Gizli<\/span>\n      <span class=\"badge badge-purple\">&#128202; Gerber Tabanl\u0131<\/span>\n    <\/div>\n  <\/div>\n\n  <div style=\"background:#e8edf4;padding:36px 48px;\">\n    <div class=\"steps\">\n      <div class=\"step\" id=\"st-1\">\n        <div class=\"step-circle\">1<\/div>\n        <div class=\"step-title\">Dosya Y\u00fckle<\/div>\n        <div class=\"step-sub\">PP + BOM + Gerber<\/div>\n      <\/div>\n      <div class=\"step\" id=\"st-2\">\n        <div class=\"step-circle\">2<\/div>\n        <div class=\"step-title\">Adet Gir<\/div>\n        <div class=\"step-sub\">Ka\u00e7 kart dizeceksiniz?<\/div>\n      <\/div>\n      <div class=\"step\" id=\"st-3\">\n        <div class=\"step-circle\">3<\/div>\n        <div class=\"step-title\">Analiz Et<\/div>\n        <div class=\"step-sub\">Tahmini fiyat\u0131 g\u00f6r<\/div>\n      <\/div>\n      <div class=\"step\" id=\"st-4\">\n        <div class=\"step-circle\">4<\/div>\n        <div class=\"step-title\">Teklif \u0130ste<\/div>\n        <div class=\"step-sub\">Kesin teklif e-posta ile<\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"main\">\n\n    <div id=\"alert-warn\" class=\"alert alert-warn\"><\/div>\n    <div id=\"alert-ok\" class=\"alert alert-ok\"><\/div>\n\n    <div class=\"card\" id=\"upload-card\">\n      <div class=\"card-title\">\n        <div class=\"card-title-icon\">&#128194;<\/div>\n        Dosya Y\u00fckleme\n      <\/div>\n\n      <div class=\"file-grid\">\n        <div class=\"dz\" id=\"dz-pp\">\n          <input type=\"file\" accept=\".txt,.csv\" onchange=\"loadPP(this)\">\n          <div class=\"dz-icon-wrap\">\n            <svg width=\"22\" height=\"22\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"#3b82f6\" stroke-width=\"1.8\" stroke-linecap=\"round\">\n              <circle cx=\"12\" cy=\"12\" r=\"3\"\/><path d=\"M12 2v4M12 18v4M4.93 4.93l2.83 2.83M16.24 16.24l2.83 2.83M2 12h4M18 12h4M4.93 19.07l2.83-2.83M16.24 7.76l2.83-2.83\"\/>\n            <\/svg>\n          <\/div>\n          <div class=\"dz-label\">Pick &amp; Place<\/div>\n          <div class=\"dz-sub\">.txt veya .csv<\/div>\n          <div class=\"dz-status\" id=\"pp-st\">&#10003; Y\u00fcklendi<\/div>\n        <\/div>\n        <div class=\"dz\" id=\"dz-bom\">\n          <input type=\"file\" accept=\".xlsx,.xls,.csv\" onchange=\"loadBOM(this)\">\n          <div class=\"dz-icon-wrap\">\n            <svg width=\"22\" height=\"22\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"#3b82f6\" stroke-width=\"1.8\" stroke-linecap=\"round\">\n              <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\"\/><polyline points=\"10 9 9 9 8 9\"\/>\n            <\/svg>\n          <\/div>\n          <div class=\"dz-label\">BOM<\/div>\n          <div class=\"dz-sub\">.xlsx veya .csv<\/div>\n          <div class=\"dz-status\" id=\"bom-st\">&#10003; Y\u00fcklendi<\/div>\n        <\/div>\n        <div class=\"dz\" id=\"dz-ger\">\n          <input type=\"file\" accept=\".zip\" onchange=\"loadGerber(this)\">\n          <div class=\"dz-icon-wrap\">\n            <svg width=\"22\" height=\"22\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"#3b82f6\" stroke-width=\"1.8\" stroke-linecap=\"round\">\n              <polyline points=\"22 12 18 12 15 21 9 3 6 12 2 12\"\/>\n            <\/svg>\n          <\/div>\n          <div class=\"dz-label\">Gerber ZIP<\/div>\n          <div class=\"dz-sub\">.zip<\/div>\n          <div class=\"dz-status\" id=\"ger-st\">&#10003; Y\u00fcklendi<\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"progress\">\n        <div class=\"prog-bar\"><div class=\"prog-fill\" id=\"prog-fill\"><\/div><\/div>\n        <div class=\"prog-text\">Y\u00fckleme: <span id=\"prog-txt\">0\/3<\/span><\/div>\n      <\/div>\n\n      <div class=\"adet-row\">\n        <div class=\"adet-label\">\n          Kart Adeti\n          <span>Ka\u00e7 adet kart dizdireceksiniz?<\/span>\n        <\/div>\n        <input type=\"number\" class=\"adet-input\" id=\"analiz-adet\" min=\"1\" placeholder=\"50\" oninput=\"checkReady()\">\n      <\/div>\n\n      <div class=\"file-note\">\n        <svg width=\"14\" height=\"14\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"#475569\" stroke-width=\"2\" style=\"flex-shrink:0\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"\/><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"\/><\/svg>\n        Dosyalar\u0131n\u0131z yaln\u0131zca analize ama\u00e7l\u0131d\u0131r. Sunucumuza y\u00fcklenmez \u2014 t\u00fcm i\u015flem taray\u0131c\u0131n\u0131zda ger\u00e7ekle\u015fir.\n      <\/div>\n\n      <button class=\"btn-ana\" id=\"btn-analiz\" onclick=\"analiz()\" disabled>\n        <span id=\"btn-ana-text\">&#9889;&nbsp; Analiz Et ve Tahmini Fiyat\u0131 G\u00f6r<\/span>\n        <span id=\"btn-ana-spin\" style=\"display:none\"><span class=\"spin\"><\/span> Analiz ediliyor...<\/span>\n      <\/button>\n    <\/div>\n\n    <div class=\"viewer-section\" id=\"viewer-section\">\n      <div class=\"viewer-card\">\n        <div class=\"viewer-header\">\n          <div class=\"viewer-title\">\n            <svg width=\"18\" height=\"18\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"#3b82f6\" stroke-width=\"1.8\" stroke-linecap=\"round\"><rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\"\/><line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\"\/><line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\"\/><\/svg>\n            PCB \u00d6nizleme\n          <\/div>\n          <div class=\"viewer-tabs\">\n            <div class=\"vtab active\" id=\"vtab-top\" onclick=\"switchView('top')\">\u00dcst Y\u00fczey<\/div>\n            <div class=\"vtab\" id=\"vtab-bot\" onclick=\"switchView('bottom')\">Alt Y\u00fczey<\/div>\n            <div class=\"vtab\" id=\"vtab-3d\" onclick=\"switchView('3d')\">3D G\u00f6r\u00fcn\u00fcm<\/div>\n          <\/div>\n        <\/div>\n        <div class=\"viewer-body\" id=\"viewer-body\">\n          <div class=\"viewer-loading\" id=\"viewer-loading\">\n            <div class=\"viewer-loading-spin\"><\/div>\n            <div>PCB render ediliyor...<\/div>\n          <\/div>\n          <div id=\"viewer-svg-top\" class=\"viewer-svg-wrap\" style=\"display:none\"><\/div>\n          <div id=\"viewer-svg-bot\" class=\"viewer-svg-wrap\" style=\"display:none\"><\/div>\n          <div id=\"viewer-3d\" style=\"display:none;width:100%;height:520px;background:#111;border-radius:8px;overflow:hidden;position:relative;\">\n            <canvas id=\"canvas-3d\" style=\"width:100%;height:100%;display:block;\"><\/canvas>\n            <div style=\"position:absolute;bottom:10px;left:50%;transform:translateX(-50%);color:#aaa;font-size:11px;pointer-events:none;\">Sol t\u0131k: d\u00f6nd\u00fcr &nbsp;|&nbsp; Sa\u011f t\u0131k \/ iki parmak: kayd\u0131r &nbsp;|&nbsp; Tekerlek: zoom<\/div>\n          <\/div>\n          <div class=\"viewer-err\" id=\"viewer-err\" style=\"display:none\"><\/div>\n        <\/div>\n        <div class=\"viewer-info\" id=\"viewer-info\" style=\"display:none\">\n          <div class=\"vinfo-item\">Boyut: <span id=\"vinfo-size\">\u2014<\/span><\/div>\n          <div class=\"vinfo-item\">Katmanlar: <span id=\"vinfo-layers\">\u2014<\/span><\/div>\n          <div class=\"vinfo-item\" id=\"vinfo-cift-wrap\" style=\"display:none\">\u00c7ift y\u00fczl\u00fc<\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"result-box\" id=\"result-box\">\n      <div class=\"card-title\" style=\"margin-bottom:20px;\">\n        <div class=\"card-title-icon\">&#128202;<\/div>\n        Analiz Sonucu\n      <\/div>\n      <div class=\"result-grid\">\n        <div class=\"res-item\">\n          <div class=\"res-label\">SMD Bile\u015fen<\/div>\n          <div class=\"res-val\" id=\"r-smd\">\u2014<\/div>\n          <div class=\"res-sub\">pad say\u0131s\u0131na g\u00f6re<\/div>\n        <\/div>\n        <div class=\"res-item\">\n          <div class=\"res-label\">THT Bile\u015fen<\/div>\n          <div class=\"res-val\" id=\"r-tht\">\u2014<\/div>\n          <div class=\"res-sub\">via hari\u00e7<\/div>\n        <\/div>\n        <div class=\"res-item\">\n          <div class=\"res-label\">Dizgi Tipi<\/div>\n          <div class=\"res-val\" id=\"r-tip\" style=\"font-size:17px\">\u2014<\/div>\n          <div class=\"res-sub\" id=\"r-tip-sub\"><\/div>\n        <\/div>\n        <div class=\"res-item\">\n          <div class=\"res-label\">Toplam Referans<\/div>\n          <div class=\"res-val\" id=\"r-ref\">\u2014<\/div>\n          <div class=\"res-sub\">bile\u015fen adedi<\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"price-banner\">\n        <div>\n          <div class=\"price-left-label\" id=\"r-fiyat-label\">Tahmini Dizgi Bedeli<\/div>\n          <div class=\"price-note-sm\">Yaln\u0131zca montaj i\u015f\u00e7ili\u011fi &bull; KDV hari\u00e7 &bull; Ba\u011flay\u0131c\u0131 de\u011fildir<\/div>\n        <\/div>\n        <div class=\"price-amount\" id=\"r-fiyat\">\u2014<\/div>\n      <\/div>\n\n      <div class=\"price-warning\" id=\"r-min-warn\"><\/div>\n\n      <div class=\"result-note\">\n        <strong>&#9888; Bu fiyat yaln\u0131zca dizgi (montaj) i\u015f\u00e7ili\u011fi i\u00e7indir:<\/strong>\n        <div class=\"excl-list\">\n          <div class=\"excl-item\">Malzeme (BOM) bedeli<\/div>\n          <div class=\"excl-item\">PCB \u00fcretim bedeli<\/div>\n          <div class=\"excl-item\">Stencil bedeli<\/div>\n          <div class=\"excl-item\">Fonksiyonel test<\/div>\n          <div class=\"excl-item\">Conformal coating<\/div>\n          <div class=\"excl-item\">Programlama bedeli<\/div>\n        <\/div>\n        <div style=\"margin-top:10px;padding-top:10px;border-top:1px solid rgba(51,65,85,.5)\">\n          Kesin teklif i\u00e7in a\u015fa\u011f\u0131daki formu doldurun \u2014 ekibimiz en k\u0131sa s\u00fcrede size \u00f6zel teklifi iletecektir.\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"card\" id=\"form-card\" style=\"display:none\">\n      <div class=\"card-title\">\n        <div class=\"card-title-icon\">&#128221;<\/div>\n        Kesin Teklif \u0130ste\n      <\/div>\n      <div class=\"form-grid\">\n        <div><label>Ad Soyad <span class=\"req\">*<\/span><\/label><input type=\"text\" id=\"f-ad\" placeholder=\"Ad\u0131n\u0131z Soyad\u0131n\u0131z\"><\/div>\n        <div><label>\u015eirket Ad\u0131 <span class=\"req\">*<\/span><\/label><input type=\"text\" id=\"f-sirket\" placeholder=\"\u015eirket Ad\u0131\"><\/div>\n        <div><label>E-posta <span class=\"req\">*<\/span><\/label><input type=\"email\" id=\"f-email\" placeholder=\"ornek@firma.com\"><\/div>\n        <div><label>Telefon<\/label><input type=\"tel\" id=\"f-tel\" placeholder=\"0XXX XXX XX XX\"><\/div>\n        <div><label>Kart Adeti <span class=\"req\">*<\/span><\/label><input type=\"text\" id=\"f-adet\" placeholder=\"\u00d6rn: 50\"><\/div>\n        <div><label>Proje \/ Kart Ad\u0131<\/label><input type=\"text\" id=\"f-proje\" placeholder=\"Opsiyonel\"><\/div>\n      <\/div>\n      <div style=\"margin-bottom:14px\">\n        <label>Ek Hizmetler<\/label>\n        <div class=\"opts-grid\">\n          <div class=\"opt\"><input type=\"checkbox\" id=\"o-malzeme\"><label for=\"o-malzeme\">&#128230; Malzeme Temini<\/label><\/div>\n          <div class=\"opt\"><input type=\"checkbox\" id=\"o-pcb\"><label for=\"o-pcb\">&#9889; PCB Temini<\/label><\/div>\n          <div class=\"opt\"><input type=\"checkbox\" id=\"o-stencil\"><label for=\"o-stencil\">&#128451; Stencil<\/label><\/div>\n          <div class=\"opt\"><input type=\"checkbox\" id=\"o-test\"><label for=\"o-test\">&#128269; Fonksiyonel Test<\/label><\/div>\n          <div class=\"opt\"><input type=\"checkbox\" id=\"o-coating\"><label for=\"o-coating\">&#127987; Conformal Coating<\/label><\/div>\n          <div class=\"opt\"><input type=\"checkbox\" id=\"o-prog\"><label for=\"o-prog\">&#128187; Programlama<\/label><\/div>\n        <\/div>\n      <\/div>\n      <div style=\"margin-bottom:16px\"><label>Ek Notlar<\/label><textarea id=\"f-not\" placeholder=\"Varsa \u00f6zel isteklerinizi yaz\u0131n...\"><\/textarea><\/div>\n      <button class=\"btn-send\" id=\"btn-send\" onclick=\"gonderWP()\">\n        <span id=\"btn-send-text\">&#128231;&nbsp; Kesin Teklif G\u00f6nder<\/span>\n        <span id=\"btn-send-spin\" style=\"display:none\"><span class=\"spin\"><\/span> G\u00f6nderiliyor...<\/span>\n      <\/button>\n    <\/div>\n\n    <div class=\"success\" id=\"success-div\">\n      <div class=\"success-icon\">&#9989;<\/div>\n      <h2>Talebiniz Al\u0131nd\u0131!<\/h2>\n      <p>Analiz sonu\u00e7lar\u0131 ve bilgileriniz ekibimize iletildi.<br>Size \u00f6zel kesin teklif en k\u0131sa s\u00fcrede <strong id=\"ok-email\" style=\"color:#60a5fa\"><\/strong> adresine g\u00f6nderilecektir.<\/p>\n      <button class=\"btn-reset\" onclick=\"location.reload()\">Yeni Teklif Al<\/button>\n    <\/div>\n\n  <\/div>\n\n<\/div>\n\n<script>\n\/\/ WordPress AJAX URL\nvar ajaxurl = typeof ajaxurl !== 'undefined' ? ajaxurl : '\/wp-admin\/admin-ajax.php';\n\nvar P_SMD=0.008, P_THT_POTA=0.015, P_THT_ELLE=0.02, P_MIN=300, P_KDV=20, VIA_MM=0.45;\nvar components=[], bomHeaders=[], bomRows=[];\nvar drillData={pthCount:0,smdPadCount:0,smdPadBot:0,loaded:false};\nvar analizRes=null;\n\nvar viewerStackup = null;\nvar currentView = 'top';\n\nvar GerberRenderer=(function(){\nfunction pg(text){\n  if(!text||typeof text!=='string')return{paths:[],flashes:[],regions:[]};\n  var ap={};\n  var fm=text.match(\/%FSLA?X(\\d)(\\d)Y(\\d)(\\d)\/);\n  var xd=fm?+fm[2]:5, yd=fm?+fm[4]:5;\n  var um=text.match(\/%MO(MM|IN)\/);\n  var us=(um&&um[1]==='IN')?25.4:1.0;\n  text = text.replace(\/([XYI])\\+\/g,'$1');\n  var ar=\/%ADD(\\d+)([A-Za-z_$][A-Za-z0-9_]*),([^*%]*)\\*%\/g,am;\n  while((am=ar.exec(text))!==null){var ps=am[3].split('X').map(function(x){return parseFloat(x)*us;});ap[am[1]]={shape:am[2],p:ps};}\n  function c(s,dec){if(!s&&s!=='0')return null;var neg=s[0]==='-';if(neg)s=s.slice(1);while(s.length<=dec)s='0'+s;return(neg?-1:1)*(parseInt(s.slice(0,s.length-dec)||'0')+parseInt(s.slice(s.length-dec))\/Math.pow(10,dec))*us;}\n  var clean=text.replace(\/%[^%]*%\/g,''),tokens=clean.split('*');\n  var paths=[],flashes=[],regions=[],cx=0,cy=0,apt=null,inReg=false,rp=[];\n  for(var i=0;i<tokens.length;i++){\n    var t=tokens[i].trim();if(!t)continue;\n    var xm=t.match(\/X(-?\\d+)\/),ym=t.match(\/Y(-?\\d+)\/),dm=t.match(\/D0*(\\d+)$\/);\n    var nx=xm?c(xm[1],xd):cx,ny=ym?c(ym[1],yd):cy;\n    if(t.indexOf('G36')>=0){inReg=true;rp=[];}\n    else if(t.indexOf('G37')>=0){if(rp.length>1)regions.push(rp.slice());inReg=false;rp=[];}\n    if(dm){var dc=+dm[1];\n      if(dc===1){if(inReg)rp.push({x:nx,y:ny,m:false});else{var w=apt&&ap[apt]?ap[apt].p[0]||0.1:0.1;paths.push({x1:cx,y1:cy,x2:nx,y2:ny,w:w});}}\n      else if(dc===2){if(inReg)rp.push({x:nx,y:ny,m:true});}\n      else if(dc===3){if(apt&&ap[apt])flashes.push({x:nx,y:ny,a:ap[apt]});}\n      else if(dc>=10)apt=String(dc);\n      cx=nx;cy=ny;}\n    var sa=t.match(\/^D0*(\\d+)$\/);if(sa&&+sa[1]>=10)apt=String(+sa[1]);\n  }\n  return{paths:paths,flashes:flashes,regions:regions};\n}\nfunction gb(texts){\n  var x0=1e9,y0=1e9,x1=-1e9,y1=-1e9;\n  (texts||[]).forEach(function(t){if(!t)return;var d=pg(t);\n    d.paths.forEach(function(p){x0=Math.min(x0,p.x1,p.x2);y0=Math.min(y0,p.y1,p.y2);x1=Math.max(x1,p.x1,p.x2);y1=Math.max(y1,p.y1,p.y2);});\n    d.flashes.forEach(function(f){var r=(f.a.p[0]||0.5)\/2;x0=Math.min(x0,f.x-r);y0=Math.min(y0,f.y-r);x1=Math.max(x1,f.x+r);y1=Math.max(y1,f.y+r);});\n    d.regions.forEach(function(r){r.forEach(function(pt){x0=Math.min(x0,pt.x);y0=Math.min(y0,pt.y);x1=Math.max(x1,pt.x);y1=Math.max(y1,pt.y);});});\n  });\n  return x0>1e8?null:{x0:x0,y0:y0,x1:x1,y1:y1};\n}\nfunction draw(d,ctx,sc,ox,oy,traceColor,padColor){\n  if(!padColor)padColor=traceColor;\n  function tx(x){return x*sc+ox;}function ty(y){return -y*sc+oy;}\n  ctx.fillStyle=traceColor;ctx.strokeStyle=traceColor;\n  d.regions.forEach(function(r){ctx.beginPath();var s=false;r.forEach(function(pt){if(!s){ctx.moveTo(tx(pt.x),ty(pt.y));s=true;}else if(pt.m)ctx.moveTo(tx(pt.x),ty(pt.y));else ctx.lineTo(tx(pt.x),ty(pt.y));});ctx.closePath();ctx.fill();});\n  ctx.lineCap='round';ctx.lineJoin='round';\n  d.paths.forEach(function(p){ctx.lineWidth=Math.max(p.w*sc,0.8);ctx.beginPath();ctx.moveTo(tx(p.x1),ty(p.y1));ctx.lineTo(tx(p.x2),ty(p.y2));ctx.stroke();});\n  ctx.fillStyle=padColor;\n  d.flashes.forEach(function(f){\n    var ap=f.a,p=ap.p;\n    var isRound=ap.shape!=='R'&&ap.shape!=='O';\n    ctx.fillStyle=padColor;\n    ctx.beginPath();\n    if(isRound){\n      var pr=Math.max((p[0]\/2)*sc,1.5);\n      ctx.arc(tx(f.x),ty(f.y),pr,0,Math.PI*2);\n    }else{\n      var w=Math.max(p[0]*sc,1.5),h=Math.max((p[1]||p[0])*sc,1.5);\n      ctx.rect(tx(f.x)-w\/2,ty(f.y)-h\/2,w,h);\n    }\n    ctx.fill();\n    if(isRound){\n      var pr2=Math.max((p[0]\/2)*sc,1.5);\n      var holeR=pr2*0.45;\n      if(holeR>=0.8){\n        ctx.fillStyle='#1f5c1f';\n        ctx.beginPath();\n        ctx.arc(tx(f.x),ty(f.y),holeR,0,Math.PI*2);\n        ctx.fill();\n      }\n    }\n    ctx.fillStyle=padColor;\n  });\n}\nfunction pd(text){\n  if(!text||typeof text!=='string')return[];\n  var inch=\/M72|INCH\/i.test(text)&&!\/M71|METRIC\/i.test(text);\n  var us=inch?25.4:1.0;\n  var xd=inch?4:3, totalDigits=6;\n  var fm=text.match(\/FILE_FORMAT[:=]\\s*(\\d)[:.](\\d)\/i)||text.match(\/;FORMAT[:=]\\{?(\\d)[:.](\\d)\/i);\n  if(fm){xd=+fm[2];totalDigits=(+fm[1])+(+fm[2]);}\n  var lz=\/,\\s*LZ\/.test(text);\n  var tools={};\n  var tm=\/T0*(\\d+)C([\\d.]+)\/g,t;\n  while((t=tm.exec(text))!==null){tools['T'+t[1]]=parseFloat(t[2])*us;}\n  function conv(s){\n    if(!s)return null;\n    if(s.indexOf('.')>=0)return parseFloat(s)*us;\n    var neg=s[0]==='-';if(neg)s=s.slice(1);\n    while(s.length<totalDigits)s=lz?s+'0':'0'+s;\n    var ip=s.slice(0,s.length-xd)||'0',dp=s.slice(s.length-xd);\n    return(neg?-1:1)*(parseInt(ip)+parseInt(dp)\/Math.pow(10,xd))*us;\n  }\n  var lines=text.split('\\n'),cur=null,holes=[],lastX=0,lastY=0;\n  for(var i=0;i<lines.length;i++){\n    var l=lines[i].trim();if(!l)continue;\n    var tt=l.match(\/^T0*(\\d+)$\/);if(tt){cur='T'+tt[1];continue;}\n    var xm=l.match(\/X(-?[\\d.]+)\/),ym=l.match(\/Y(-?[\\d.]+)\/);\n    if((xm||ym)&&cur&&tools[cur]){\n      var x=xm?conv(xm[1]):lastX,y=ym?conv(ym[1]):lastY;\n      lastX=x;lastY=y;\n      holes.push({x:x,y:y,d:tools[cur]});\n    }\n  }\n  return holes;\n}\nfunction render(containerId,lt,side){\n  var container=document.getElementById(containerId);\n  container.innerHTML='';\n  var canvas=document.createElement('canvas');\n  canvas.width=1200;canvas.height=900;\n  canvas.style.cssText='width:100%;height:auto;display:block;transform-origin:top left;';\n  container.appendChild(canvas);\n  var ctx=canvas.getContext('2d'),W=canvas.width,H=canvas.height;\n  var copper=side==='top'?lt.topCopper:lt.botCopper;\n  var silk=side==='top'?lt.topSilk:lt.botSilk;\n  var outline=lt.outline;\n  if(!copper){container.innerHTML='<div style=\"color:#888;padding:40px;text-align:center\">Copper katman bulunamad\u0131<\/div>';return null;}\n  var b=gb(outline?[outline]:[copper]);\n  if(!b){container.innerHTML='<div style=\"color:#888;padding:40px;text-align:center\">Bounds hesaplanamad\u0131<\/div>';return null;}\n  var bw=b.x1-b.x0,bh=b.y1-b.y0;\n  if(bw<=0||bh<=0){container.innerHTML='<div style=\"color:#888;padding:40px;text-align:center\">Boyut hatas\u0131<\/div>';return null;}\n  var pad=0.04,scale=Math.min(W\/(bw*(1+pad*2)),H\/(bh*(1+pad*2)));\n  var ox=(W-bw*scale)\/2-b.x0*scale,oy=(H-bh*scale)\/2+b.y1*scale;\n  ctx.save();\n  if(side==='bottom'){ctx.translate(W,0);ctx.scale(-1,1);}\n  if(outline){\n    var bx0=b.x0*scale+ox,by0=-b.y1*scale+oy,bx1=b.x1*scale+ox,by1=-b.y0*scale+oy;\n    ctx.beginPath();\n    ctx.rect(bx0,by0,bx1-bx0,by1-by0);\n    ctx.clip();\n  }\n  ctx.fillStyle='#1a3a1a';ctx.fillRect(0,0,W,H);\n  ctx.fillStyle='rgba(0,90,0,0.82)';ctx.fillRect(0,0,W,H);\n  draw(pg(copper),ctx,scale,ox,oy,'rgba(150,130,40,0.55)','#d4af00');\n  if(silk)draw(pg(silk),ctx,scale,ox,oy,'rgba(230,230,205,0.95)','rgba(230,230,205,0.95)');\n  if(lt.drill){\n    var holes=pd(lt.drill);\n    if(holes.length){\n      ctx.save();\n      ctx.globalCompositeOperation='destination-out';\n      holes.forEach(function(h){\n        var r=Math.max((h.d\/2)*scale*0.85,0.6);\n        ctx.beginPath();ctx.arc(h.x*scale+ox,-h.y*scale+oy,r,0,Math.PI*2);ctx.fill();\n      });\n      ctx.restore();\n    }\n  }\n  ctx.restore();\n  if(outline){\n    var od=pg(outline);\n    var otx=function(x){return x*scale+ox;};var oty=function(y){return -y*scale+oy;};\n    ctx.strokeStyle='#cccccc';ctx.lineWidth=2;ctx.lineCap='round';\n    od.paths.forEach(function(p){ctx.beginPath();ctx.moveTo(otx(p.x1),oty(p.y1));ctx.lineTo(otx(p.x2),oty(p.y2));ctx.stroke();});\n    od.regions.forEach(function(r){ctx.beginPath();var s=false;r.forEach(function(pt){if(!s){ctx.moveTo(otx(pt.x),oty(pt.y));s=true;}else ctx.lineTo(otx(pt.x),oty(pt.y));});ctx.closePath();ctx.stroke();});\n  }\n  return {w:bw.toFixed(1),h:bh.toFixed(1)};\n}\nreturn{render:render,getBounds:gb};\n})();\n\nfunction identifyLayerManual(filename) {\n  var f = filename.toLowerCase();\n  if (\/copper.*top|signal.*top|f\\.cu|\\.gtl$|top.*copper\/.test(f)) return {type:'copper',side:'top'};\n  if (\/copper.*bot|signal.*bot|b\\.cu|\\.gbl$|bot.*copper\/.test(f)) return {type:'copper',side:'bottom'};\n  if (\/soldermask.*top|mask.*top|f\\.mask|\\.gts$|top.*mask\/.test(f)) return {type:'soldermask',side:'top'};\n  if (\/soldermask.*bot|mask.*bot|b\\.mask|\\.gbs$|bot.*mask\/.test(f)) return {type:'soldermask',side:'bottom'};\n  if (\/legend.*top|silk.*top|f\\.silk|\\.gto$|top.*legend|top.*silk\/.test(f)) return {type:'silkscreen',side:'top'};\n  if (\/legend.*bot|silk.*bot|b\\.silk|\\.gbo$|bot.*legend|bot.*silk\/.test(f)) return {type:'silkscreen',side:'bottom'};\n  if (\/mechanical.*1\\.|outline|edge|profile|border|profile\/.test(f)) return {type:'outline',side:'all'};\n  return null;\n}\n\nfunction renderGerberViewer(zipEntries) {\n  document.getElementById('viewer-section').style.display = 'block';\n  document.getElementById('viewer-loading').style.display = 'block';\n  document.getElementById('viewer-svg-top').style.display = 'none';\n  document.getElementById('viewer-svg-bot').style.display = 'none';\n  document.getElementById('viewer-err').style.display = 'none';\n  document.getElementById('viewer-info').style.display = 'none';\n  document.getElementById('viewer-section').scrollIntoView({behavior:'smooth',block:'nearest'});\n\n  resetPCBView();\n\n  var layers = [];\n  var visualTypes = ['copper','soldermask','silkscreen','outline','drill'];\n  zipEntries.forEach(function(e) {\n    var fname = e.path.split('\/').pop();\n    var ext = fname.split('.').pop().toLowerCase();\n    if (e.path.match(\/\\.(gbr|gtl|gbl|gts|gbs|gto|gbo|gm1|gko)$\/i)) {\n      var info = identifyLayerManual(fname);\n      if (info && visualTypes.indexOf(info.type) >= 0) {\n        layers.push({filename: fname, type: info.type, side: info.side, gerber: e.text});\n      }\n    }\n    else if (e.path.match(\/\\.(drl|drill|xln|exc|ncd|txt)$\/i) && !\/npth\/i.test(fname)) {\n      layers.push({filename: fname, type: 'drill', side: 'all', gerber: e.text});\n    }\n  });\n\n  if (layers.length === 0) {\n    document.getElementById('viewer-loading').style.display = 'none';\n    document.getElementById('viewer-err').style.display = 'block';\n    document.getElementById('viewer-err').textContent = 'G\u00f6rsel katman bulunamad\u0131. Gerber ZIP format\u0131n\u0131 kontrol edin.';\n    return;\n  }\n\n  var lt = {topCopper:null, botCopper:null, topMask:null, botMask:null, topSilk:null, botSilk:null, outline:null};\n  zipEntries.forEach(function(e) {\n    var fn = e.path.split('\/').pop().toLowerCase();\n    if      (\/copper.*top|signal.*top|f[._]cu|\\.gtl$|top.*copper\/.test(fn)) lt.topCopper = e.text;\n    else if (\/copper.*bot|signal.*bot|b[._]cu|\\.gbl$|bot.*copper\/.test(fn)) lt.botCopper = e.text;\n    else if (\/soldermask.*top|mask.*top|f[._]mask|\\.gts$|top.*solder.resist\/.test(fn)) lt.topMask = e.text;\n    else if (\/soldermask.*bot|mask.*bot|b[._]mask|\\.gbs$|bot.*solder.resist\/.test(fn)) lt.botMask = e.text;\n    else if (\/legend.*top|silk.*top|silkscreen.*top|f[._]silk|\\.gto$|top.*silk\/.test(fn)) lt.topSilk = e.text;\n    else if (\/legend.*bot|silk.*bot|silkscreen.*bot|b[._]silk|\\.gbo$|bot.*silk\/.test(fn)) lt.botSilk = e.text;\n    else if (\/outline|profile|mechanical.*1\\.|edge|border\/.test(fn)) lt.outline = e.text;\n  });\n\n  var drillLayer = layers.filter(function(l){return l.type==='drill';})[0];\n  if (drillLayer) lt.drill = drillLayer.gerber;\n\n  if (!lt.topCopper && !lt.botCopper) {\n    document.getElementById('viewer-loading').style.display = 'none';\n    document.getElementById('viewer-err').style.display = 'block';\n    document.getElementById('viewer-err').textContent = 'Copper katman\u0131 bulunamad\u0131.';\n    return;\n  }\n\n  setTimeout(function(){\n    var info = GerberRenderer.render('viewer-svg-top', lt, 'top');\n    var hasBotCopper = !!lt.botCopper;\n    if (hasBotCopper) GerberRenderer.render('viewer-svg-bot', lt, 'bottom');\n    else document.getElementById('viewer-svg-bot').innerHTML = '<div style=\"color:#888;padding:40px;text-align:center\">Alt y\u00fczey verisi yok<\/div>';\n\n    document.getElementById('viewer-loading').style.display = 'none';\n    switchView('top');\n    document.getElementById('viewer-info').style.display = 'flex';\n    if (info) document.getElementById('vinfo-size').textContent = info.w + ' x ' + info.h + ' mm';\n    document.getElementById('vinfo-layers').textContent = layers.length + ' katman';\n    if (hasBotCopper) document.getElementById('vinfo-cift-wrap').style.display = 'block';\n  }, 50);\n}\n\nvar _3dInited = false;\nvar _3dRenderer = null, _3dScene = null, _3dCamera = null, _3dAnimId = null;\n\nfunction init3D() {\n  var container = document.getElementById('viewer-3d');\n  var canvas3d = document.getElementById('canvas-3d');\n  if (!window.THREE) { container.innerHTML='<div style=\"color:#f88;padding:40px;text-align:center\">Three.js y\u00fcklenemedi<\/div>'; return; }\n\n  var topCanvas = document.querySelector('#viewer-svg-top canvas');\n  var botCanvas = document.querySelector('#viewer-svg-bot canvas');\n  if (!topCanvas) { container.innerHTML='<div style=\"color:#f88;padding:40px;text-align:center\">\u00d6nce Gerber y\u00fckleyin<\/div>'; return; }\n\n  function cropBoardCanvas(src) {\n    var ctx2 = src.getContext('2d');\n    var W = src.width, H = src.height;\n    var data = ctx2.getImageData(0, 0, W, H).data;\n    var x0=W, y0=H, x1=0, y1=0;\n    for (var y=0; y<H; y+=2) {\n      for (var x=0; x<W; x+=2) {\n        var i=(y*W+x)*4;\n        if (data[i]+data[i+1]+data[i+2] > 30) {\n          if(x<x0)x0=x; if(x>x1)x1=x;\n          if(y<y0)y0=y; if(y>y1)y1=y;\n        }\n      }\n    }\n    if (x1<=x0||y1<=y0) return src;\n    var cw=x1-x0, ch=y1-y0;\n    var dst = document.createElement('canvas');\n    dst.width=cw; dst.height=ch;\n    dst.getContext('2d').drawImage(src, x0,y0,cw,ch, 0,0,cw,ch);\n    return dst;\n  }\n\n  var topCropped = cropBoardCanvas(topCanvas);\n  var botCropped = botCanvas ? cropBoardCanvas(botCanvas) : null;\n  \n  if (_3dInited && _3dRenderer) {\n    if (_3dAnimId) cancelAnimationFrame(_3dAnimId);\n    _3dRenderer.dispose();\n    _3dRenderer = null;\n    _3dScene = null;\n    _3dCamera = null;\n    _3dAnimId = null;\n    _3dInited = false;\n    var c3d = document.getElementById('canvas-3d');\n    if (c3d) { var ctx3 = c3d.getContext('webgl') || c3d.getContext('webgl2'); if(ctx3) ctx3.clear(ctx3.COLOR_BUFFER_BIT|ctx3.DEPTH_BUFFER_BIT); }\n  }\n  _3dInited = true;\n  if (_3dAnimId) cancelAnimationFrame(_3dAnimId);\n\n  var W = container.clientWidth, H = container.clientHeight;\n  var renderer = new THREE.WebGLRenderer({canvas: canvas3d, antialias: true, alpha: true});\n  renderer.setSize(W, H);\n  renderer.setPixelRatio(window.devicePixelRatio||1);\n  renderer.shadowMap.enabled = true;\n  _3dRenderer = renderer;\n\n  var scene = new THREE.Scene();\n  scene.background = new THREE.Color(0x1a1a2e);\n  _3dScene = scene;\n\n  var camera = new THREE.PerspectiveCamera(45, W\/H, 0.1, 1000);\n  camera.position.set(0, 2.5, 4);\n  camera.lookAt(0,0,0);\n  _3dCamera = camera;\n\n  scene.add(new THREE.AmbientLight(0xffffff, 0.6));\n  var dlight = new THREE.DirectionalLight(0xffffff, 0.9);\n  dlight.position.set(3,6,4);\n  dlight.castShadow = true;\n  scene.add(dlight);\n  var dlight2 = new THREE.DirectionalLight(0x88aaff, 0.3);\n  dlight2.position.set(-3,-4,-3);\n  scene.add(dlight2);\n\n  var aspect = topCropped.width \/ topCropped.height;\n  var boardW = 4 * aspect, boardH = 4, boardD = 0.12;\n\n  var topTex = new THREE.CanvasTexture(topCropped);\n  topTex.flipY = true;\n\n  var botTex = botCropped ? new THREE.CanvasTexture(botCropped) : null;\n  if (botTex) { botTex.flipY = true; botTex.wrapS = THREE.ClampToEdgeWrapping; }\n\n  var fr4Mat = new THREE.MeshStandardMaterial({color:0x1a4a1a, roughness:0.8, metalness:0.05});\n  var topMat = new THREE.MeshStandardMaterial({map:topTex, roughness:0.45, metalness:0.25});\n  var botMat = botTex\n    ? new THREE.MeshStandardMaterial({map:botTex, roughness:0.45, metalness:0.25})\n    : new THREE.MeshStandardMaterial({color:0x1f5c1f, roughness:0.8});\n\n  var geo = new THREE.BoxGeometry(boardW, boardD, boardH);\n  var mats = [fr4Mat, fr4Mat, topMat, botMat, fr4Mat, fr4Mat];\n  var board = new THREE.Mesh(geo, mats);\n  board.castShadow = true;\n  board.receiveShadow = true;\n  scene.add(board);\n\n  var grid = new THREE.GridHelper(12, 20, 0x334455, 0x223344);\n  grid.position.y = -boardD\/2 - 0.15;\n  scene.add(grid);\n\n  var isDragging=false, isPanning=false, lastX=0, lastY=0;\n  var rotX=0.35, rotY=0.4, panX=0, panY=0, zoom=5.5;\n\n  function updateCamera(){\n    var r=zoom;\n    camera.position.set(\n      panX + r*Math.sin(rotY)*Math.cos(rotX),\n      panY + r*Math.sin(rotX),\n      r*Math.cos(rotY)*Math.cos(rotX)\n    );\n    camera.lookAt(panX, panY, 0);\n  }\n  updateCamera();\n\n  canvas3d.addEventListener('mousedown',function(e){\n    if(e.button===2){isPanning=true;}else{isDragging=true;}\n    lastX=e.clientX;lastY=e.clientY;\n    e.preventDefault();\n  });\n  canvas3d.addEventListener('contextmenu',function(e){e.preventDefault();});\n  window.addEventListener('mousemove',function(e){\n    var dx=e.clientX-lastX, dy=e.clientY-lastY;\n    lastX=e.clientX;lastY=e.clientY;\n    if(isDragging){rotY+=dx*0.008;rotX-=dy*0.008;rotX=Math.max(-1.4,Math.min(1.4,rotX));updateCamera();}\n    if(isPanning){panX-=dx*0.005;panY+=dy*0.005;updateCamera();}\n  });\n  window.addEventListener('mouseup',function(){isDragging=false;isPanning=false;});\n  canvas3d.addEventListener('wheel',function(e){zoom+=e.deltaY*0.005;zoom=Math.max(1.5,Math.min(18,zoom));updateCamera();e.preventDefault();},{passive:false});\n\n  var touches=[], tDist=0;\n  canvas3d.addEventListener('touchstart',function(e){touches=[...e.touches];if(e.touches.length===2){tDist=Math.hypot(e.touches[0].clientX-e.touches[1].clientX,e.touches[0].clientY-e.touches[1].clientY);}e.preventDefault();},{passive:false});\n  canvas3d.addEventListener('touchmove',function(e){\n    if(e.touches.length===1&&touches.length===1){\n      var dx=e.touches[0].clientX-touches[0].clientX, dy=e.touches[0].clientY-touches[0].clientY;\n      rotY+=dx*0.01;rotX-=dy*0.01;rotX=Math.max(-1.4,Math.min(1.4,rotX));updateCamera();\n    } else if(e.touches.length===2){\n      var d=Math.hypot(e.touches[0].clientX-e.touches[1].clientX,e.touches[0].clientY-e.touches[1].clientY);\n      zoom-=(d-tDist)*0.02;zoom=Math.max(1.5,Math.min(18,zoom));tDist=d;updateCamera();\n    }\n    touches=[...e.touches];e.preventDefault();\n  },{passive:false});\n\n  function animate(){\n    _3dAnimId=requestAnimationFrame(animate);\n    renderer.render(scene,camera);\n  }\n  animate();\n\n  window.addEventListener('resize',function(){\n    if(currentView!=='3d')return;\n    var nw=container.clientWidth, nh=container.clientHeight;\n    renderer.setSize(nw,nh);\n    camera.aspect=nw\/nh;camera.updateProjectionMatrix();\n  });\n}\n\nfunction switchView(side) {\n  currentView = side;\n  document.getElementById('vtab-top').className = side==='top' ? 'vtab active' : 'vtab';\n  document.getElementById('vtab-bot').className = side==='bottom' ? 'vtab active' : 'vtab';\n  document.getElementById('vtab-3d').className = side==='3d' ? 'vtab active' : 'vtab';\n  document.getElementById('viewer-svg-top').style.display = side==='top' ? 'block' : 'none';\n  document.getElementById('viewer-svg-bot').style.display = side==='bottom' ? 'block' : 'none';\n  document.getElementById('viewer-3d').style.display = side==='3d' ? 'block' : 'none';\n  if (side==='3d') init3D();\n}\n\nfunction loadPP(input){\n  var f=input.files[0];if(!f)return;\n  new FileReader().onload=function(e){components=parsePP(e.target.result);setLoaded('dz-pp','pp-st',f.name);checkReady();};\n  var r=new FileReader();r.onload=function(e){components=parsePP(e.target.result);setLoaded('dz-pp','pp-st',f.name);checkReady();};r.readAsText(f,'utf-8');\n}\nfunction loadBOM(input){\n  var f=input.files[0];if(!f)return;\n  if(f.name.toLowerCase().endsWith('.csv')){var r=new FileReader();r.onload=function(e){parseBOMcsv(e.target.result);setLoaded('dz-bom','bom-st',f.name);checkReady();};r.readAsText(f,'utf-8');}\n  else{var r2=new FileReader();r2.onload=function(e){var wb=XLSX.read(e.target.result,{type:'array'});var ws=wb.Sheets[wb.SheetNames[0]];var j=XLSX.utils.sheet_to_json(ws,{header:1,defval:''});if(j.length>1){bomHeaders=j[0].map(String);bomRows=j.slice(1).filter(function(r){return r.some(function(c){return String(c).trim();});});}setLoaded('dz-bom','bom-st',f.name);checkReady();};r2.readAsArrayBuffer(f);}\n}\nasync function loadGerber(input){\n  var f=input.files[0];if(!f)return;\n  if(!f.name.toLowerCase().endsWith('.zip')){showWarn('L\u00fctfen ZIP format\u0131nda Gerber y\u00fckleyin.');return;}\n  var buf=await f.arrayBuffer();var bytes=new Uint8Array(buf);\n  if(bytes[0]!==0x50||bytes[1]!==0x4B){showWarn('Ge\u00e7ersiz ZIP dosyas\u0131.');return;}\n  try{\n    var zip=await JSZip.loadAsync(buf);var all=[];\n    zip.forEach(function(p,e){if(!e.dir)all.push({path:p,entry:e});});\n    var dext=\/\\.(drl|drill|txt|xln|exc|ncd)$\/i;\n    var dfs=all.filter(function(f){return dext.test(f.path)&&!\/npth|non.?pth\/i.test(f.path);});\n    if(!dfs.length)dfs=all.filter(function(f){return dext.test(f.path);});\n    var pth=0;\n    for(var i=0;i<dfs.length;i++){var t=await dfs[i].entry.async('text');pth+=parseExcellon(t);}\n    var sTop=all.find(function(f){return \/paste.*top|top.*paste\/i.test(f.path)&&\/\\.gbr$\/i.test(f.path);})||all.find(function(f){return \/pads?.*top|top.*pads?\/i.test(f.path)&&\/\\.gbr$\/i.test(f.path);});\n    var sBot=all.find(function(f){return \/paste.*bot|bot.*paste\/i.test(f.path)&&\/\\.gbr$\/i.test(f.path);})||all.find(function(f){return \/pads?.*bot|bot.*pads?\/i.test(f.path)&&\/\\.gbr$\/i.test(f.path);});\n    var st=0,sb=0;\n    if(sTop){var tt=await sTop.entry.async('text');st=countFlashes(tt);}\n    if(sBot){var tb=await sBot.entry.async('text');sb=countFlashes(tb);}\n    drillData={pthCount:pth,smdPadCount:st+sb,smdPadBot:sb,loaded:true};\n    setLoaded('dz-ger','ger-st',f.name);checkReady();\n    var viewerEntries=[];\n    var vpromises=[];\n    all.forEach(function(e){vpromises.push(e.entry.async('text').then(function(t){viewerEntries.push({path:e.path,text:t.replace(\/([XYIJ])\\+\/g,'$1')});}));});\n    Promise.all(vpromises).then(function(){renderGerberViewer(viewerEntries);});\n  }catch(e){showWarn('ZIP a\u00e7\u0131lamad\u0131: '+e.message);}\n}\nfunction parsePP(text){\n  var lines=text.split('\\n'),delim=\/\\t|,|;|\\s{2,}\/,rC=0,fC=1,vC=2,sC=5;\n  for(var i=0;i<lines.length;i++){var l=lines[i].trim().toLowerCase();if(l.includes('designator')||l.includes('refdes')){var p=l.split(delim).map(function(s){return s.trim();});var fc=function(kws){for(var k=0;k<kws.length;k++){var idx=p.findIndex(function(x){return x.includes(kws[k]);});if(idx>=0)return idx;}return -1;};rC=fc(['designator','refdes','ref']);fC=fc(['footprint','package']);vC=fc(['value','comment']);sC=fc(['side','layer']);if(rC<0)rC=0;if(fC<0)fC=1;if(vC<0)vC=2;break;}}\n  var res=[];\n  for(var j=0;j<lines.length;j++){var l=lines[j].trim();if(!l||l[0]==='#'||l[0]==='%')continue;var pts=l.split(delim).map(function(s){return s.trim().replace(\/\"\/g,'');});if(pts.length<2)continue;var ref=pts[rC]||'';if(!ref||ref.toLowerCase()==='ref'||ref.toLowerCase()==='designator')continue;var fp=pts[fC]||'',val=pts[vC]||'',side=(sC>=0&&pts[sC]||'').toLowerCase();if(!side||side==='-')side='top';var tip=guessTip(fp.toLowerCase(),val.toLowerCase(),ref);res.push({ref,fp,val,side,tip});}\n  return res;\n}\nfunction parseBOMcsv(t){var ls=t.split('\\n').filter(function(l){return l.trim();});var sp=ls[0].includes(';')?';':',';bomHeaders=ls[0].split(sp).map(function(s){return s.trim().replace(\/\"\/g,'');});bomRows=ls.slice(1).map(function(l){return l.split(sp).map(function(s){return s.trim().replace(\/\"\/g,'');});});}\nfunction guessTip(fp,val,ref){var r=ref.toUpperCase();if(\/through.?hole|tht|dip|sip|to-?2|to-?92|to-?220|axial|radial|connector|conn|molex|jst|header|terminal|socket|usb|hdmi\/.test(fp+' '+val))return 'tht';if(\/^(j|p|x|cn|xp)\\d\/.test(r))return 'tht';return 'smd';}\nfunction parseExcellon(text){var lines=text.split('\\n'),tools={},cType='PLATED',inH=true,cTool=null,c=0;for(var i=0;i<lines.length;i++){var l=lines[i].trim();if(!l)continue;if(l==='M48'){inH=true;continue;}if(l==='%'){inH=false;continue;}if(l==='M30'||l==='M00')break;if(inH){if(\/TYPE=NON_PLATED\/i.test(l)){cType='NON_PLATED';continue;}if(\/TYPE=PLATED\/i.test(l)){cType='PLATED';continue;}var m=l.match(\/^(T\\d+).*?C([\\d.]+)\/i);if(m){var id=m[1].toUpperCase(),dia=parseFloat(m[2]),np=cType==='NON_PLATED',via=!np&&dia<=VIA_MM;tools[id]={np,via};}continue;}var ts=l.match(\/^(T\\d+)$\/i);if(ts){cTool=ts[1].toUpperCase();continue;}if(\/^[XY]-?[\\d]\/.test(l)&&cTool){var t=tools[cTool];if(t&&!t.np&&!t.via)c++;}}return c;}\nfunction countFlashes(text){var c=0,ls=text.split('\\n');for(var i=0;i<ls.length;i++){var l=ls[i].trim();if(!l||l[0]==='%'||l.startsWith('G04'))continue;if(l.includes('D03*'))c++;}return c;}\n\nfunction setLoaded(dz,st,name){document.getElementById(dz).classList.add('loaded');document.getElementById(st).textContent='\\u2713 '+name.substring(0,22)+(name.length>22?'...':'');}\nfunction checkReady(){\n  var pp=components.length>0,bom=bomRows.length>0,ger=drillData.loaded,adet=parseInt(document.getElementById('analiz-adet').value||0)>0;\n  var n=(pp?1:0)+(bom?1:0)+(ger?1:0);\n  document.getElementById('prog-fill').style.width=(n\/3*100)+'%';\n  document.getElementById('prog-txt').textContent=n+'\/3 dosya';\n  document.getElementById('btn-analiz').disabled=!(pp&&bom&&ger&&adet);\n  if(pp||bom||ger)document.getElementById('st-1').classList.add('done');\n  if(adet)document.getElementById('st-2').classList.add('done');\n}\nfunction analiz(){\n  var adet=parseInt(document.getElementById('analiz-adet').value)||1;\n  if(!components.length||!bomRows.length||!drillData.loaded){showWarn('L\u00fctfen 3 dosyay\u0131 da y\u00fckleyin.');return;}\n  if(adet<1){showWarn('L\u00fctfen kart adetini girin.');return;}\n  document.getElementById('btn-ana-text').style.display='none';\n  document.getElementById('btn-ana-spin').style.display='inline';\n  document.getElementById('btn-analiz').disabled=true;\n  setTimeout(function(){\n    var sides=new Set();\n    components.forEach(function(c){sides.add(c.side.includes('bot')?'bottom':'top');});\n    var smdB=Math.ceil(drillData.smdPadCount\/2);\n    if(drillData.smdPadBot>0)sides.add('bottom');\n    var thtB=Math.ceil(drillData.pthCount\/2);\n    var cift=sides.size>1,zam=cift?1.30:1.00;\n    var hamKart=(smdB*P_SMD+thtB*P_THT_POTA)*zam;\n    var toplamHam=hamKart*adet;\n    var toplamFiyat=Math.max(toplamHam,P_MIN);\n    var minUyg=toplamFiyat>toplamHam;\n    function fn(v){return '$'+v.toLocaleString('en-US',{minimumFractionDigits:2,maximumFractionDigits:2});}\n    analizRes={smdB:smdB,thtB:thtB,cift:cift,adet:adet,toplamFiyat:fn(toplamFiyat),refs:components.length};\n    document.getElementById('r-smd').textContent=smdB+' birim';\n    document.getElementById('r-tht').textContent=thtB+' birim';\n    document.getElementById('r-tip').textContent=cift?'\u00c7ift Y\u00fczl\u00fc':'Tek Y\u00fczl\u00fc';\n    document.getElementById('r-tip-sub').textContent=cift?'\u00dcst + Alt':'Sadece \u00fcst';\n    document.getElementById('r-ref').textContent=components.length+' adet';\n    document.getElementById('r-fiyat').textContent=fn(toplamFiyat);\n    document.getElementById('r-fiyat-label').textContent='Tahmini Dizgi Bedeli ('+adet+' Kart)';\n    var minWarn=document.getElementById('r-min-warn');\n    if(minUyg){minWarn.style.display='block';minWarn.innerHTML='&#9888; Minimum sipari\u015f bedeli uyguland\u0131 ($'+P_MIN+'). Ham hesap: '+fn(toplamHam)+'.';}\n    else{minWarn.style.display='none';}\n    document.getElementById('result-box').style.display='block';\n    document.getElementById('form-card').style.display='block';\n    document.getElementById('f-adet').value=adet;\n    document.getElementById('st-3').classList.add('done');\n    document.getElementById('btn-ana-text').style.display='inline';\n    document.getElementById('btn-ana-spin').style.display='none';\n    document.getElementById('btn-analiz').disabled=false;\n    document.getElementById('result-box').scrollIntoView({behavior:'smooth',block:'start'});\n  },800);\n}\n\nfunction gonderWP(){\n  var ad=document.getElementById('f-ad').value.trim(), \n      sirket=document.getElementById('f-sirket').value.trim(), \n      email=document.getElementById('f-email').value.trim(), \n      tel=document.getElementById('f-tel').value.trim() || '\u2014',\n      proje=document.getElementById('f-proje').value.trim() || '\u2014',\n      adet=document.getElementById('f-adet').value.trim(),\n      notlar=document.getElementById('f-not').value.trim() || '\u2014';\n\n  if(!ad||!sirket||!email||!adet){showWarn('L\u00fctfen zorunlu alanlar\u0131 doldurun.');return;}\n  if(!\/^[^@]+@[^@]+\\.[^@]+$\/.test(email)){showWarn('Ge\u00e7erli bir e-posta adresi girin.');return;}\n  \n  var ekHizmetler=[];\n  ['o-malzeme','o-pcb','o-stencil','o-test','o-coating','o-prog'].forEach(function(id){\n      if(document.getElementById(id).checked) {\n          ekHizmetler.push(document.getElementById(id).nextElementSibling.textContent.trim());\n      }\n  });\n  var ekHizmetMetni = ekHizmetler.length ? ekHizmetler.join(', ') : '\u0130stenmedi';\n  \n  document.getElementById('btn-send-text').style.display='none'; \n  document.getElementById('btn-send-spin').style.display='inline'; \n  document.getElementById('btn-send').disabled=true;\n\n  \/\/ Kullan\u0131c\u0131n\u0131n y\u00fckledi\u011fi dosyalar\u0131 \u00e7ekelim\n  var filePP = document.querySelector('#dz-pp input[type=file]').files[0];\n  var fileBOM = document.querySelector('#dz-bom input[type=file]').files[0];\n  var fileGerber = document.querySelector('#dz-ger input[type=file]').files[0];\n\n  \/\/ \u00c7\u00d6Z\u00dcM: PDF HTML'i (DOM'a eklemiyoruz, k\u00fct\u00fcphane arka planda i\u015fleyecek)\n  var pdfTasarim = document.createElement('div');\n  pdfTasarim.style.backgroundColor = '#ffffff'; \n  pdfTasarim.style.padding = '40px';\n  pdfTasarim.style.fontFamily = 'Arial, sans-serif';\n  pdfTasarim.style.color = '#1a2332';\n  \n  pdfTasarim.innerHTML = `\n      <div style=\"border-bottom:3px solid #3b82f6; padding-bottom:15px; margin-bottom:30px;\">\n          <h1 style=\"margin:0; color:#3b82f6; font-size:24px;\">Yasa Teknoloji - PCB Dizgi Teklifi<\/h1>\n          <p style=\"margin:5px 0 0 0; font-size:12px; color:#64748b;\">Tarih: ${new Date().toLocaleDateString('tr-TR')}<\/p>\n      <\/div>\n      \n      <table style=\"width:100%; margin-bottom:30px; text-align:left; border-collapse:collapse;\">\n          <tr>\n              <td style=\"width:50%; padding:10px; background:#f8fafc; border:1px solid #e2e8f0;\"><strong>M\u00fc\u015fteri:<\/strong> ${ad}<\/td>\n              <td style=\"width:50%; padding:10px; background:#f8fafc; border:1px solid #e2e8f0;\"><strong>\u015eirket:<\/strong> ${sirket}<\/td>\n          <\/tr>\n          <tr>\n              <td style=\"padding:10px; border:1px solid #e2e8f0;\"><strong>Proje Ad\u0131:<\/strong> ${proje}<\/td>\n              <td style=\"padding:10px; border:1px solid #e2e8f0;\"><strong>\u00dcretim Adeti:<\/strong> ${adet} Adet<\/td>\n          <\/tr>\n      <\/table>\n\n      <h3 style=\"border-bottom:1px solid #cbd5e1; padding-bottom:8px;\">Kart Analiz \u00d6zeti<\/h3>\n      <ul style=\"line-height:1.8; margin-bottom:30px;\">\n          <li><strong>Dizgi Tipi:<\/strong> ${analizRes ? (analizRes.cift ? '\u00c7ift Y\u00fczl\u00fc' : 'Tek Y\u00fczl\u00fc') : '\u2014'}<\/li>\n          <li><strong>SMD Bile\u015fen:<\/strong> ${analizRes ? analizRes.smdB : '\u2014'} birim<\/li>\n          <li><strong>THT Bile\u015fen:<\/strong> ${analizRes ? analizRes.thtB : '\u2014'} birim<\/li>\n          <li><strong>Ek Hizmet Talepleri:<\/strong> ${ekHizmetMetni}<\/li>\n      <\/ul>\n\n      <div style=\"background:#f1f5f9; color:#1a2332; padding:20px; border-radius:8px; text-align:center; margin-bottom:30px; border:1px solid #bfdbfe;\">\n          <span style=\"font-size:14px; opacity:0.9;\">Tahmini Dizgi (Montaj) Bedeli<\/span><br>\n          <strong style=\"font-size:28px; color:#3b82f6;\">${analizRes ? analizRes.toplamFiyat : '\u2014'}<\/strong>\n          <p style=\"font-size:11px; margin-top:8px; color:#64748b;\">* Sadece dizgi i\u015f\u00e7ili\u011fidir. Malzeme, PCB \u00fcretim ve KDV hari\u00e7tir.<\/p>\n      <\/div>\n      \n      <div style=\"font-size:12px; color:#64748b; margin-top:50px; text-align:center; border-top:1px solid #e2e8f0; padding-top:20px;\">\n          Yasa Motor Teknolojileri ve Elektronik Tasar\u0131m San. ve Tic. Ltd. \u015eti.<br>\n          yusuf.yasa@yasateknoloji.com | 0224 442 8050\n      <\/div>\n  `;\n\n  var opt = { \n      margin: 0, \n      filename: 'Yasa_Teknoloji_Teklif.pdf', \n      image: { type: 'jpeg', quality: 0.98 }, \n      html2canvas: { scale: 2, useCORS: true, backgroundColor: '#ffffff', scrollY: 0 }, \n      jsPDF: { unit: 'in', format: 'a4', orientation: 'portrait' } \n  };\n\n  html2pdf().set(opt).from(pdfTasarim).output('blob').then(function(pdfBlob) {\n      \n      var formData = new FormData();\n      formData.append('action', 'send_pcb_quote');\n      formData.append('pdf_file', pdfBlob, 'Yasa_Teknoloji_Teklif.pdf'); \n      \n      \/\/ M\u00fc\u015fterinin y\u00fckledi\u011fi dosyalar\u0131 formData'ya dahil edelim\n      if(filePP) formData.append('file_pp', filePP);\n      if(fileBOM) formData.append('file_bom', fileBOM);\n      if(fileGerber) formData.append('file_gerber', fileGerber);\n\n      formData.append('musteri_ad', ad);\n      formData.append('musteri_sirket', sirket);\n      formData.append('musteri_email', email);\n      formData.append('musteri_tel', tel);\n      formData.append('proje_adi', proje);\n      formData.append('kart_adet', adet);\n      formData.append('notlar', notlar);\n      formData.append('ek_hizmetler', ekHizmetMetni);\n      formData.append('smd_birim', analizRes ? analizRes.smdB : '\u2014');\n      formData.append('tht_birim', analizRes ? analizRes.thtB : '\u2014');\n      formData.append('dizgi_tipi', analizRes ? (analizRes.cift ? '\u00c7ift Y\u00fczl\u00fc' : 'Tek Y\u00fczl\u00fc') : '\u2014');\n      formData.append('ref_sayi', analizRes ? analizRes.refs : '\u2014');\n      var safFiyat = analizRes ? analizRes.toplamFiyat.replace('$', '') : '\u2014';\n      formData.append('tahmini_fiyat', safFiyat);\n\n      fetch(ajaxurl, { method: 'POST', body: formData })\n      .then(res => res.json())\n      .then(data => {\n          if(data.success){\n              document.getElementById('upload-card').style.display='none'; \n              document.getElementById('result-box').style.display='none'; \n              document.getElementById('form-card').style.display='none';\n              var viewerSec = document.getElementById('viewer-section');\n              if(viewerSec) viewerSec.style.display='none';\n              \n              document.getElementById('ok-email').textContent=email;\n              document.getElementById('success-div').style.display='block';\n              document.getElementById('success-div').scrollIntoView({behavior:'smooth'});\n          } else { throw new Error(data.data || 'Bilinmeyen Hata'); }\n      })\n      .catch(err => {\n          document.getElementById('btn-send-text').style.display='inline'; \n          document.getElementById('btn-send-spin').style.display='none'; \n          document.getElementById('btn-send').disabled=false;\n          showWarn('G\u00f6nderim s\u0131ras\u0131nda hata: ' + err.message);\n      });\n  });\n}\n\nfunction showWarn(msg){var e=document.getElementById('alert-warn');e.innerHTML='&#9888; '+msg;e.classList.add('show');setTimeout(function(){e.classList.remove('show');},5000);}\n\ndocument.querySelectorAll('.dz').forEach(function(z){\n  z.addEventListener('dragover',function(e){e.preventDefault();z.classList.add('drag');});\n  z.addEventListener('dragleave',function(){z.classList.remove('drag');});\n  z.addEventListener('drop',function(e){e.preventDefault();z.classList.remove('drag');var f=e.dataTransfer.files[0];if(!f)return;var inp=z.querySelector('input');var dt=new DataTransfer();dt.items.add(f);inp.files=dt.files;inp.dispatchEvent(new Event('change'));});\n});\n\nvar pcbZoom = 1.0;\nvar pcbPanX = 0, pcbPanY = 0;\nvar pcbDragging = false, pcbLastX = 0, pcbLastY = 0;\n\nfunction applyPCBZoom() {\n  ['viewer-svg-top','viewer-svg-bot'].forEach(function(id){\n    var el=document.getElementById(id);\n    var img=el?el.querySelector('img,canvas,svg'):null;\n    if(img){\n      img.style.transformOrigin='0 0';\n      img.style.transform='translate('+pcbPanX+'px,'+pcbPanY+'px) scale('+pcbZoom+')';\n    }\n  });\n}\n\nfunction resetPCBView(){\n  pcbZoom=1.0; pcbPanX=0; pcbPanY=0; applyPCBZoom();\n}\n\n['viewer-svg-top','viewer-svg-bot'].forEach(function(id){\n  var el=document.getElementById(id);\n  if(!el)return;\n  el.addEventListener('wheel',function(e){\n    e.preventDefault();\n    var rect=el.getBoundingClientRect();\n    var mx=e.clientX-rect.left;\n    var my=e.clientY-rect.top;\n    var oldZoom=pcbZoom;\n    var delta=e.deltaY>0?-0.12:0.12;\n    pcbZoom=Math.min(8,Math.max(0.2,pcbZoom+delta));\n    pcbPanX=mx-(mx-pcbPanX)*(pcbZoom\/oldZoom);\n    pcbPanY=my-(my-pcbPanY)*(pcbZoom\/oldZoom);\n    applyPCBZoom();\n  },{passive:false});\n\n  el.addEventListener('mousedown',function(e){\n    if(e.button!==0)return;\n    pcbDragging=true;\n    pcbLastX=e.clientX; pcbLastY=e.clientY;\n    el.style.cursor='grabbing';\n    e.preventDefault();\n  });\n\n  var tStart=[], tDist0=0, tPanX0=0, tPanY0=0, tZoom0=1;\n  el.addEventListener('touchstart',function(e){\n    tStart=[...e.touches];\n    if(e.touches.length===2){\n      tDist0=Math.hypot(e.touches[0].clientX-e.touches[1].clientX,e.touches[0].clientY-e.touches[1].clientY);\n      tZoom0=pcbZoom;\n    }\n    tPanX0=pcbPanX; tPanY0=pcbPanY;\n    e.preventDefault();\n  },{passive:false});\n\n  el.addEventListener('touchmove',function(e){\n    if(e.touches.length===1&&tStart.length===1){\n      var dx=e.touches[0].clientX-tStart[0].clientX;\n      var dy=e.touches[0].clientY-tStart[0].clientY;\n      pcbPanX=tPanX0+dx; pcbPanY=tPanY0+dy;\n      applyPCBZoom();\n    } else if(e.touches.length===2){\n      var d=Math.hypot(e.touches[0].clientX-e.touches[1].clientX,e.touches[0].clientY-e.touches[1].clientY);\n      pcbZoom=Math.min(8,Math.max(0.2,tZoom0*(d\/tDist0)));\n      applyPCBZoom();\n    }\n    e.preventDefault();\n  },{passive:false});\n\n  el.addEventListener('touchend',function(e){tStart=[...e.touches];},{passive:false});\n  el.addEventListener('dblclick',function(){resetPCBView();});\n});\n\nwindow.addEventListener('mousemove',function(e){\n  if(!pcbDragging)return;\n  var dx=e.clientX-pcbLastX, dy=e.clientY-pcbLastY;\n  pcbLastX=e.clientX; pcbLastY=e.clientY;\n  pcbPanX+=dx; pcbPanY+=dy;\n  applyPCBZoom();\n});\nwindow.addEventListener('mouseup',function(){\n  if(!pcbDragging)return;\n  pcbDragging=false;\n  ['viewer-svg-top','viewer-svg-bot'].forEach(function(id){\n    var el=document.getElementById(id);\n    if(el)el.style.cursor='grab';\n  });\n});\n\nfunction zoomPCB(delta) {\n  if(delta===0){ resetPCBView(); return; }\n  pcbZoom=Math.min(8,Math.max(0.2,pcbZoom+delta));\n  applyPCBZoom();\n}\n<\/script>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>PCB Dizgi An\u0131nda Teklif Gerber, Pick&amp;Place ve BOM dosyalar\u0131n\u0131z\u0131 y\u00fckleyin. Yapay zeka destekli sistemimiz kart\u0131n\u0131z\u0131 analiz ederek tahmini dizgi bedelini hesaplar. &#9889; An\u0131nda Analiz &#128274; G\u00fcvenli &amp; Gizli &#128202; Gerber Tabanl\u0131 1 Dosya Y\u00fckle PP + BOM + Gerber 2 Adet Gir Ka\u00e7 kart dizeceksiniz? 3 Analiz Et Tahmini fiyat\u0131 g\u00f6r 4 Teklif \u0130ste Kesin teklif e-posta ile &#128194; Dosya Y\u00fckleme Pick &amp; Place .txt veya .csv &#10003; Y\u00fcklendi BOM .xlsx veya .csv &#10003; Y\u00fcklendi Gerber ZIP .zip &#10003; Y\u00fcklendi Y\u00fckleme: 0\/3 Kart Adeti Ka\u00e7 adet kart dizdireceksiniz? Dosyalar\u0131n\u0131z yaln\u0131zca analize ama\u00e7l\u0131d\u0131r. Sunucumuza y\u00fcklenmez \u2014 t\u00fcm i\u015flem taray\u0131c\u0131n\u0131zda ger\u00e7ekle\u015fir. &#9889;&nbsp; Analiz Et ve Tahmini Fiyat\u0131 G\u00f6r Analiz ediliyor&#8230; PCB \u00d6nizleme \u00dcst Y\u00fczey Alt Y\u00fczey 3D G\u00f6r\u00fcn\u00fcm PCB render ediliyor&#8230; Sol t\u0131k: d\u00f6nd\u00fcr &nbsp;|&nbsp; Sa\u011f t\u0131k \/ iki parmak: kayd\u0131r &nbsp;|&nbsp; Tekerlek: zoom Boyut: \u2014 Katmanlar: \u2014 \u00c7ift y\u00fczl\u00fc &#128202; Analiz Sonucu SMD Bile\u015fen \u2014 pad say\u0131s\u0131na g\u00f6re THT Bile\u015fen \u2014 via hari\u00e7 Dizgi Tipi \u2014 Toplam Referans \u2014 bile\u015fen adedi Tahmini Dizgi Bedeli Yaln\u0131zca montaj i\u015f\u00e7ili\u011fi &bull; KDV hari\u00e7 &bull; Ba\u011flay\u0131c\u0131 de\u011fildir \u2014 &#9888; Bu fiyat yaln\u0131zca dizgi (montaj) i\u015f\u00e7ili\u011fi i\u00e7indir: Malzeme (BOM) bedeli PCB \u00fcretim bedeli Stencil bedeli Fonksiyonel test Conformal coating Programlama bedeli Kesin teklif i\u00e7in a\u015fa\u011f\u0131daki formu doldurun \u2014 ekibimiz en k\u0131sa s\u00fcrede size \u00f6zel teklifi iletecektir. &#128221; Kesin Teklif \u0130ste Ad Soyad * \u015eirket Ad\u0131 * E-posta * Telefon Kart Adeti * Proje \/ Kart Ad\u0131 Ek Hizmetler &#128230; Malzeme Temini &#9889; PCB Temini &#128451; Stencil &#128269; Fonksiyonel Test &#127987; Conformal Coating &#128187; Programlama Ek Notlar &#128231;&nbsp; Kesin Teklif G\u00f6nder G\u00f6nderiliyor&#8230; &#9989; Talebiniz Al\u0131nd\u0131! Analiz sonu\u00e7lar\u0131 ve bilgileriniz ekibimize iletildi.Size \u00f6zel kesin teklif en k\u0131sa s\u00fcrede adresine g\u00f6nderilecektir. Yeni Teklif Al<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-28056","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/yasateknoloji.com\/en\/wp-json\/wp\/v2\/pages\/28056","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/yasateknoloji.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/yasateknoloji.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/yasateknoloji.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/yasateknoloji.com\/en\/wp-json\/wp\/v2\/comments?post=28056"}],"version-history":[{"count":45,"href":"https:\/\/yasateknoloji.com\/en\/wp-json\/wp\/v2\/pages\/28056\/revisions"}],"predecessor-version":[{"id":28206,"href":"https:\/\/yasateknoloji.com\/en\/wp-json\/wp\/v2\/pages\/28056\/revisions\/28206"}],"wp:attachment":[{"href":"https:\/\/yasateknoloji.com\/en\/wp-json\/wp\/v2\/media?parent=28056"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}