{"id":241486,"date":"2026-09-19T07:52:15","date_gmt":"2026-09-19T05:52:15","guid":{"rendered":"https:\/\/global-technology.ch\/stackup-builder\/"},"modified":"2026-09-19T09:41:36","modified_gmt":"2026-09-19T07:41:36","slug":"stackup-builder","status":"publish","type":"page","link":"https:\/\/global-technology.ch\/de\/stackup-builder\/","title":{"rendered":"Multilayer-Stackup-Builder"},"content":{"rendered":"<style id=\"gt-stackup-page-style\">#main-content .container:has(.gt-stackup-wrap){width:100%;max-width:none;padding:0}#left-area:has(.gt-stackup-wrap){width:100%;padding:0}#main-content:has(.gt-stackup-wrap) #sidebar{display:none}#main-content:has(.gt-stackup-wrap) .container:before,#main-content:has(.gt-stackup-wrap) .entry-title{display:none}.gt-stackup-wrap{width:100%;max-width:none;margin:0;padding:0;background:#F3F7F9}.gt-stackup-wrap p{max-width:none;width:100%;margin:0;padding:0}.gt-stackup-frame{display:block;width:100%;max-width:none;border:0;min-height:1500px}<\/style>\n<div class=\"gt-stackup-wrap\"><iframe class=\"gt-stackup-frame\" title=\"Multilayer stackup builder\" srcdoc=\"&lt;!DOCTYPE html&gt;&#10;&lt;html lang=&quot;en&quot; data-theme=&quot;light&quot;&gt;&#10;&lt;head&gt;&#10;&lt;meta charset=&quot;utf-8&quot;&gt;&#10;&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;&#10;&lt;title&gt;Multilayer stackup builder | Global Technology SA&lt;\/title&gt;&#10;&lt;style&gt;&#10;:root{&#10;--bg:#F3F7F9; --panel:#FFFFFF; --ink:#17324A; --muted:#5A6F82; --line:#D3DEE6; --field:#F7FAFB; --brand:#0B6070;&#10;--copper:#B5652B; --plating:#D8955A; --prepreg:#C6E7DA; --core:#8FB7A6; --glass:rgba(4,26,48,.38);&#10;--ok:#1E7A4C; --okbg:#DDF1E6; --bad:#B3261E; --badbg:#F9E0DE; --warn:#8A5F00; --warnbg:#FBEFCF; --hl:#041A30;&#10;}&#10;*{box-sizing:border-box}&#10;body{margin:0;background:var(--bg);color:var(--ink);font-family:Arial,sans-serif;font-size:15px;line-height:1.45}&#10;.wrap{max-width:1240px;margin:0 auto;padding:28px 20px 48px}&#10;h1{font-family:Arial,sans-serif;font-weight:700;font-size:32px;color:var(--ink);line-height:1.1;margin:0 0 6px;letter-spacing:-.01em}&#10;.lede{color:var(--muted);margin:0 0 22px;max-width:70ch}&#10;h2{font-family:Arial,sans-serif;font-weight:600;font-size:19px;margin:0 0 12px}&#10;.panel{background:var(--panel);border:1px solid var(--line);border-radius:6px;padding:18px}&#10;.setup{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px 14px;margin-bottom:14px}&#10;label{display:block;font-size:13px;color:var(--muted);margin-bottom:4px}&#10;select,input[type=number]{width:100%;font:inherit;color:var(--ink);background:var(--field);border:1px solid var(--line);border-radius:4px;padding:7px 8px;min-width:0}&#10;select:focus-visible,input:focus-visible,button:focus-visible{outline:2px solid var(--brand);outline-offset:1px}&#10;.presets{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:18px}&#10;.presets span{font-size:13px;color:var(--muted);margin-right:2px}&#10;button{font:inherit;font-size:14px;color:var(--ink);background:var(--panel);border:1px solid var(--line);border-radius:4px;padding:6px 11px;cursor:pointer}&#10;button:hover{border-color:var(--brand);color:var(--brand)}&#10;.main{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);gap:18px;align-items:start}&#10;.viz{position:static}&#10;@media (max-width:900px){.main{grid-template-columns:1fr}.viz{position:static;order:-1}}&#10;.result{display:flex;flex-wrap:wrap;gap:10px 22px;align-items:flex-end;margin-bottom:6px}&#10;.result .n{font-family:Arial,sans-serif;font-weight:600;font-size:30px;line-height:1;font-variant-numeric:tabular-nums}&#10;.result .n small{font-size:15px;font-weight:500;color:var(--muted);margin-left:3px}&#10;.result .k{font-size:13px;color:var(--muted)}&#10;.verdict{margin-left:auto;white-space:nowrap;font-weight:600;font-size:14px;padding:5px 11px;border-radius:4px}&#10;.verdict.ok{color:var(--ok);background:var(--okbg)} .verdict.bad{color:var(--bad);background:var(--badbg)}&#10;.gauge{position:relative;height:26px;margin:10px 0 4px}&#10;.gauge .track{position:absolute;left:0;right:0;top:11px;height:4px;background:var(--line);border-radius:2px}&#10;.gauge .band{position:absolute;top:8px;height:10px;background:var(--okbg);border:1px solid var(--ok);border-radius:2px}&#10;.gauge .mark{position:absolute;top:2px;width:3px;height:22px;background:var(--ink);border-radius:1px;transform:translateX(-1px)}&#10;.gauge-l{display:flex;justify-content:space-between;font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}&#10;svg{display:block;width:100%;height:auto;margin-top:10px}&#10;svg text{font-family:Arial,sans-serif;fill:var(--ink)}&#10;svg .lbl{font-size:12.5px} svg .dim{font-size:12.5px;fill:var(--muted);font-variant-numeric:tabular-nums}&#10;svg .dk{fill:var(--muted);font-size:11.5px}&#10;svg .lead{stroke:var(--muted);stroke-width:.6;fill:none}&#10;svg g.slot.hl rect.body{stroke:var(--hl);stroke-width:1.6}&#10;svg g.slot.hl text{font-weight:600}&#10;.rows{display:flex;flex-direction:column;gap:6px}&#10;.row{display:grid;grid-template-columns:10px 92px minmax(0,1fr) 74px;gap:10px;align-items:center;padding:7px 8px;border:1px solid var(--line);border-radius:4px;background:var(--panel)}&#10;.row.hl{border-color:var(--hl)}&#10;.chip{width:10px;align-self:stretch;border-radius:2px}&#10;.chip.cu{background:var(--copper)} .chip.pp{background:var(--prepreg)} .chip.co{background:var(--core)}&#10;.row .name{font-weight:600;font-size:14px}&#10;.row .name small{display:block;font-weight:400;color:var(--muted);font-size:12px}&#10;.row .t{text-align:right;font-variant-numeric:tabular-nums;font-size:14px}&#10;.row .t small{display:block;color:var(--muted);font-size:12px}&#10;.ctl{display:grid;gap:6px;min-width:0}&#10;.ctl.pp{grid-template-columns:minmax(0,1fr) 58px}&#10;.ctl.co{grid-template-columns:minmax(0,1fr) 118px}&#10;.ctl.cu{display:flex;flex-wrap:wrap;gap:6px;align-items:center;color:var(--muted);font-size:13px}.ctl.cu input{width:70px}&#10;.flag{display:inline-block;font-size:12px;font-weight:600;padding:1px 6px;border-radius:3px;margin-top:3px}&#10;.flag.warn{color:var(--warn);background:var(--warnbg)} .flag.bad{color:var(--bad);background:var(--badbg)}&#10;.tools{display:flex;flex-wrap:wrap;gap:8px 16px;align-items:center;margin:0 0 12px}&#10;.tools label{display:flex;gap:6px;align-items:center;margin:0;color:var(--ink);font-size:14px}&#10;table{width:100%;border-collapse:collapse;font-size:13.5px;font-variant-numeric:tabular-nums}&#10;th,td{text-align:left;padding:5px 8px;border-bottom:1px solid var(--line)} th{color:var(--muted);font-weight:500} td.r,th.r{text-align:right}&#10;.tablewrap{overflow-x:auto}&#10;.contact a{color:inherit}&#10;.cta{margin-top:18px;padding:14px 16px;border-left:3px solid var(--brand);background:var(--panel);font-size:15px;max-width:90ch}&#10;.cta a{color:var(--brand);font-weight:600}&#10;.contact{font-style:normal;font-size:14px;margin-top:18px;padding-top:14px;border-top:1px solid var(--line);line-height:1.6}&#10;.foot{color:var(--muted);font-size:13px;margin-top:18px;max-width:90ch}&#10;@media (max-width:560px){.row{grid-template-columns:10px minmax(0,1fr) auto}.row&gt;.chip{grid-row:1 \/ 3}.row&gt;.name{grid-column:2;grid-row:1}.row&gt;.t{grid-column:3;grid-row:1}.row&gt;div:not(.chip):not(.name):not(.t){grid-column:2 \/ 4;grid-row:2}h1{font-size:27px}.verdict{margin-left:0}}&#10;@media (prefers-reduced-motion:no-preference){svg g.slot rect.body{transition:stroke-width .12s}}&#10;&lt;\/style&gt;&#10;&lt;\/head&gt;&#10;&lt;body&gt;&#10;&lt;div class=&quot;wrap&quot;&gt;&#10;&lt;h1&gt;Multilayer stackup builder&lt;\/h1&gt;&#10;&lt;p class=&quot;lede&quot;&gt;Build a multilayer board layer by layer from FR-4 cores and prepregs. The cross-section is drawn to scale and follows every change of core, prepreg or copper.&lt;\/p&gt;&#10;&lt;div class=&quot;panel&quot; style=&quot;margin-bottom:18px&quot;&gt;&#10;&lt;div class=&quot;setup&quot;&gt;&#10;&lt;div&gt;&lt;label for=&quot;layers&quot;&gt;Layers&lt;\/label&gt;&lt;select id=&quot;layers&quot;&gt;&lt;\/select&gt;&lt;\/div&gt;&#10;&lt;div style=&quot;grid-column:span 2&quot;&gt;&lt;label for=&quot;lam&quot;&gt;Material&lt;\/label&gt;&lt;select id=&quot;lam&quot;&gt;&lt;\/select&gt;&lt;\/div&gt;&#10;&lt;div hidden&gt;&lt;select id=&quot;ppProd&quot;&gt;&lt;\/select&gt;&lt;\/div&gt;&#10;&lt;div&gt;&lt;label for=&quot;foil&quot;&gt;Outer foil (\u00b5m)&lt;\/label&gt;&lt;select id=&quot;foil&quot;&gt;&lt;\/select&gt;&lt;\/div&gt;&#10;&lt;div&gt;&lt;label for=&quot;plating&quot;&gt;Plating on outer layers (\u00b5m)&lt;\/label&gt;&lt;input id=&quot;plating&quot; type=&quot;number&quot; min=&quot;0&quot; max=&quot;100&quot; step=&quot;1&quot;&gt;&lt;\/div&gt;&#10;&lt;div&gt;&lt;label for=&quot;target&quot;&gt;Target thickness (mm)&lt;\/label&gt;&lt;input id=&quot;target&quot; type=&quot;number&quot; min=&quot;0.2&quot; max=&quot;6&quot; step=&quot;0.05&quot;&gt;&lt;\/div&gt;&#10;&lt;div&gt;&lt;label for=&quot;tol&quot;&gt;Tolerance (\u00b1 %)&lt;\/label&gt;&lt;input id=&quot;tol&quot; type=&quot;number&quot; min=&quot;1&quot; max=&quot;30&quot; step=&quot;1&quot;&gt;&lt;\/div&gt;&#10;&lt;div&gt;&lt;label for=&quot;mask&quot;&gt;Solder mask, both sides (mm)&lt;\/label&gt;&lt;input id=&quot;mask&quot; type=&quot;number&quot; min=&quot;0&quot; max=&quot;0.2&quot; step=&quot;0.01&quot;&gt;&lt;\/div&gt;&#10;&lt;\/div&gt;&#10;&lt;div class=&quot;presets&quot; id=&quot;presets&quot;&gt;&lt;span&gt;Start from&lt;\/span&gt;&lt;\/div&gt;&#10;&lt;\/div&gt;&#10;&lt;div class=&quot;main&quot;&gt;&#10;&lt;div&gt;&#10;&lt;div class=&quot;tools&quot;&gt;&#10;&lt;button id=&quot;mirror&quot; type=&quot;button&quot;&gt;Mirror top half to bottom&lt;\/button&gt;&#10;&lt;label style=&quot;display:none&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;showStd&quot;&gt;&lt;\/label&gt;&#10;&lt;label&gt;&lt;input type=&quot;checkbox&quot; id=&quot;mil&quot;&gt; &lt;span id=&quot;milL&quot;&gt;Show thickness in mil&lt;\/span&gt;&lt;\/label&gt;&#10;&lt;\/div&gt;&#10;&lt;div class=&quot;rows&quot; id=&quot;rows&quot;&gt;&lt;\/div&gt;&#10;&lt;\/div&gt;&#10;&lt;div class=&quot;viz panel&quot;&gt;&#10;&lt;div class=&quot;result&quot;&gt;&#10;&lt;div&gt;&lt;div class=&quot;n&quot; id=&quot;rPressed&quot;&gt;&lt;\/div&gt;&lt;div class=&quot;k&quot;&gt;pressed&lt;\/div&gt;&lt;\/div&gt;&#10;&lt;div&gt;&lt;div class=&quot;n&quot; id=&quot;rFinished&quot;&gt;&lt;\/div&gt;&lt;div class=&quot;k&quot;&gt;finished with mask&lt;\/div&gt;&lt;\/div&gt;&#10;&lt;div&gt;&lt;div class=&quot;n&quot; id=&quot;rDev&quot;&gt;&lt;\/div&gt;&lt;div class=&quot;k&quot;&gt;against target&lt;\/div&gt;&lt;\/div&gt;&#10;&lt;div class=&quot;verdict&quot; id=&quot;verdict&quot;&gt;&lt;\/div&gt;&#10;&lt;\/div&gt;&#10;&lt;div class=&quot;gauge&quot;&gt;&lt;div class=&quot;track&quot;&gt;&lt;\/div&gt;&lt;div class=&quot;band&quot; id=&quot;band&quot;&gt;&lt;\/div&gt;&lt;div class=&quot;mark&quot; id=&quot;mark&quot;&gt;&lt;\/div&gt;&lt;\/div&gt;&#10;&lt;div class=&quot;gauge-l&quot;&gt;&lt;span id=&quot;gMin&quot;&gt;&lt;\/span&gt;&lt;span id=&quot;gTarget&quot;&gt;&lt;\/span&gt;&lt;span id=&quot;gMax&quot;&gt;&lt;\/span&gt;&lt;\/div&gt;&#10;&lt;svg id=&quot;svg&quot; role=&quot;img&quot; aria-label=&quot;Stackup cross-section drawn to scale&quot;&gt;&lt;\/svg&gt;&#10;&lt;\/div&gt;&#10;&lt;\/div&gt;&#10;&lt;div class=&quot;panel&quot; style=&quot;margin-top:18px&quot;&gt;&#10;&lt;h2&gt;Build sheet&lt;\/h2&gt;&#10;&lt;p id=&quot;matline&quot; style=&quot;margin:-4px 0 10px;color:var(--muted);font-size:14px&quot;&gt;&lt;\/p&gt;&#10;&lt;div class=&quot;tablewrap&quot;&gt;&lt;table id=&quot;sheet&quot;&gt;&lt;\/table&gt;&lt;\/div&gt;&#10;&lt;\/div&gt;&#10;&lt;p class=&quot;foot&quot;&gt;Prepreg thickness and Dk are estimates calculated from the IPC-4412 glass weight of each style, the resin content and a typical resin density for the material class. They are not the data of any specific laminate brand, and Dk values are approximate. Prepreg gaps lose the resin that fills the adjacent inner copper: copper thickness \u00d7 (1 \u2212 copper coverage). The tool is provided for guidance only, without warranty: always confirm a build against the laminate supplier's datasheet and the fabricator's press data.&lt;\/p&gt;&#10;&lt;p class=&quot;cta&quot;&gt;Need the same build with the actual data of a specific laminate? &lt;a href=&quot;mailto:info@global-technology.ch?subject=Stackup%20check&quot;&gt;Send us your stackup&lt;\/a&gt; and we will check it against the material supplier's values.&lt;\/p&gt;&#10;&lt;address class=&quot;contact&quot;&gt;&lt;strong&gt;Global Technology SA&lt;\/strong&gt;&lt;br&gt;Via Selva 20, Cassina d'Agno, Switzerland&lt;br&gt;PCB laminates, prepregs, copper foil and tooling for Switzerland, Italy and Slovenia&lt;br&gt;Contact: Pietro Cucciati&lt;br&gt;&lt;a href=&quot;mailto:info@global-technology.ch&quot;&gt;info@global-technology.ch&lt;\/a&gt;, &lt;a href=&quot;tel:+41912520577&quot;&gt;+41 91 252 05 77&lt;\/a&gt;&lt;\/address&gt;&#10;&lt;\/div&gt;&#10;&lt;script&gt;&#10;const I18N={&quot;en&quot;:{&quot;title&quot;:&quot;Multilayer stackup builder&quot;,&quot;lede&quot;:&quot;Build a multilayer board layer by layer from FR-4 cores and prepregs. The cross-section is drawn to scale and follows every change of core, prepreg or copper.&quot;,&quot;l_layers&quot;:&quot;Layers&quot;,&quot;l_lam&quot;:&quot;Material&quot;,&quot;l_foil&quot;:&quot;Outer foil (\u00b5m)&quot;,&quot;l_plating&quot;:&quot;Plating on outer layers (\u00b5m)&quot;,&quot;l_target&quot;:&quot;Target thickness (mm)&quot;,&quot;l_tol&quot;:&quot;Tolerance (\u00b1 %)&quot;,&quot;l_mask&quot;:&quot;Solder mask, both sides (mm)&quot;,&quot;start&quot;:&quot;Start from&quot;,&quot;mirror&quot;:&quot;Mirror top half to bottom&quot;,&quot;mil&quot;:&quot;Show thickness in mil&quot;,&quot;kP&quot;:&quot;pressed&quot;,&quot;kF&quot;:&quot;finished with mask&quot;,&quot;kD&quot;:&quot;against target&quot;,&quot;ok&quot;:&quot;Within tolerance&quot;,&quot;thick&quot;:&quot;Too thick&quot;,&quot;thin&quot;:&quot;Too thin&quot;,&quot;target&quot;:&quot;target&quot;,&quot;outer&quot;:&quot;outer copper&quot;,&quot;inner&quot;:&quot;inner copper&quot;,&quot;foil&quot;:&quot;foil&quot;,&quot;plating&quot;:&quot;plating&quot;,&quot;cov&quot;:&quot;Copper coverage %&quot;,&quot;to&quot;:&quot;to&quot;,&quot;second&quot;:&quot;No second prepreg&quot;,&quot;single&quot;:&quot;single ply&quot;,&quot;low&quot;:&quot;low dielectric after resin fill&quot;,&quot;core&quot;:&quot;Core&quot;,&quot;prepreg&quot;:&quot;Prepreg&quot;,&quot;copper&quot;:&quot;copper&quot;,&quot;nominal&quot;:&quot;nominal&quot;,&quot;sheet&quot;:&quot;Build sheet&quot;,&quot;thL&quot;:&quot;Layer&quot;,&quot;thM&quot;:&quot;Material&quot;,&quot;thD&quot;:&quot;Detail&quot;,&quot;thT&quot;:&quot;Thickness&quot;,&quot;Copper&quot;:&quot;Copper&quot;,&quot;coverage&quot;:&quot;coverage&quot;,&quot;Pressed&quot;:&quot;Pressed&quot;,&quot;Finished&quot;:&quot;Finished with solder mask&quot;,&quot;heavy&quot;:&quot;heavy copper&quot;,&quot;aria&quot;:&quot;Stackup cross-section drawn to scale&quot;,&quot;foot&quot;:&quot;Prepreg thickness and Dk are estimates calculated from the IPC-4412 glass weight of each style, the resin content and a typical resin density for the material class. They are not the data of any specific laminate brand, and Dk values are approximate. Prepreg gaps lose the resin that fills the adjacent inner copper: copper thickness \u00d7 (1 \u2212 copper coverage). The tool is provided for guidance only, without warranty: always confirm a build against the laminate supplier's datasheet and the fabricator's press data.&quot;,&quot;cta1&quot;:&quot;Need the same build with the actual data of a specific laminate? &quot;,&quot;cta2&quot;:&quot;Send us your stackup&quot;,&quot;cta3&quot;:&quot; and we will check it against the material supplier's values.&quot;,&quot;line&quot;:&quot;PCB laminates, prepregs, copper foil and tooling for Switzerland, Italy and Slovenia&quot;,&quot;contact&quot;:&quot;Contact&quot;,&quot;m0&quot;:&quot;FR-4 high Tg, filled&quot;,&quot;m1&quot;:&quot;FR-4 standard Tg, unfilled&quot;,&quot;m2&quot;:&quot;Low-loss resin system&quot;},&quot;it&quot;:{&quot;title&quot;:&quot;Stackup builder multistrato&quot;,&quot;lede&quot;:&quot;Costruisci un multistrato strato per strato con core e prepreg FR-4. La sezione \u00e8 disegnata in scala e segue ogni modifica di core, prepreg o rame.&quot;,&quot;l_layers&quot;:&quot;Strati&quot;,&quot;l_lam&quot;:&quot;Materiale&quot;,&quot;l_foil&quot;:&quot;Foglio esterno (\u00b5m)&quot;,&quot;l_plating&quot;:&quot;Placcatura sugli strati esterni (\u00b5m)&quot;,&quot;l_target&quot;:&quot;Spessore target (mm)&quot;,&quot;l_tol&quot;:&quot;Tolleranza (\u00b1 %)&quot;,&quot;l_mask&quot;:&quot;Solder mask, due lati (mm)&quot;,&quot;start&quot;:&quot;Parti da&quot;,&quot;mirror&quot;:&quot;Specchia la met\u00e0 superiore&quot;,&quot;mil&quot;:&quot;Mostra gli spessori in mil&quot;,&quot;kP&quot;:&quot;pressato&quot;,&quot;kF&quot;:&quot;finito con solder mask&quot;,&quot;kD&quot;:&quot;rispetto al target&quot;,&quot;ok&quot;:&quot;In tolleranza&quot;,&quot;thick&quot;:&quot;Troppo spesso&quot;,&quot;thin&quot;:&quot;Troppo sottile&quot;,&quot;target&quot;:&quot;target&quot;,&quot;outer&quot;:&quot;rame esterno&quot;,&quot;inner&quot;:&quot;rame interno&quot;,&quot;foil&quot;:&quot;foglio&quot;,&quot;plating&quot;:&quot;placcatura&quot;,&quot;cov&quot;:&quot;Copertura rame %&quot;,&quot;to&quot;:&quot;\u2013&quot;,&quot;second&quot;:&quot;Nessun secondo prepreg&quot;,&quot;single&quot;:&quot;foglio singolo&quot;,&quot;low&quot;:&quot;dielettrico basso dopo il riempimento resina&quot;,&quot;core&quot;:&quot;Core&quot;,&quot;prepreg&quot;:&quot;Prepreg&quot;,&quot;copper&quot;:&quot;rame&quot;,&quot;nominal&quot;:&quot;nominale&quot;,&quot;sheet&quot;:&quot;Scheda di costruzione&quot;,&quot;thL&quot;:&quot;Strato&quot;,&quot;thM&quot;:&quot;Materiale&quot;,&quot;thD&quot;:&quot;Dettaglio&quot;,&quot;thT&quot;:&quot;Spessore&quot;,&quot;Copper&quot;:&quot;Rame&quot;,&quot;coverage&quot;:&quot;copertura&quot;,&quot;Pressed&quot;:&quot;Pressato&quot;,&quot;Finished&quot;:&quot;Finito con solder mask&quot;,&quot;heavy&quot;:&quot;rame pesante&quot;,&quot;aria&quot;:&quot;Sezione dello stackup disegnata in scala&quot;,&quot;foot&quot;:&quot;Gli spessori dei prepreg e i valori di Dk sono stime calcolate dal peso del vetro IPC-4412 di ogni stile, dal contenuto di resina e da una densit\u00e0 tipica della resina per la classe di materiale. Non sono i dati di una specifica marca di laminati e i valori di Dk sono approssimativi. I gap di prepreg perdono la resina che riempie il rame interno adiacente: spessore rame \u00d7 (1 \u2212 copertura rame). Lo strumento \u00e8 fornito a solo scopo indicativo, senza garanzia: verificare sempre la costruzione con il datasheet del fornitore del laminato e con i dati di pressatura del produttore.&quot;,&quot;cta1&quot;:&quot;Ti serve la stessa costruzione con i dati reali di un laminato specifico? &quot;,&quot;cta2&quot;:&quot;Inviaci il tuo stackup&quot;,&quot;cta3&quot;:&quot; e lo verificheremo con i valori del fornitore del materiale.&quot;,&quot;line&quot;:&quot;Laminati, prepreg, copper foil e utensili per PCB in Svizzera, Italia e Slovenia&quot;,&quot;contact&quot;:&quot;Contatto&quot;,&quot;m0&quot;:&quot;FR-4 alto Tg, caricato&quot;,&quot;m1&quot;:&quot;FR-4 Tg standard, non caricato&quot;,&quot;m2&quot;:&quot;Sistema resina low-loss&quot;},&quot;fr&quot;:{&quot;title&quot;:&quot;Constructeur de stackup multicouche&quot;,&quot;lede&quot;:&quot;Construisez un circuit multicouche couche par couche \u00e0 partir de noyaux et de pr\u00e9impr\u00e9gn\u00e9s FR-4. La coupe est dessin\u00e9e \u00e0 l'\u00e9chelle et suit chaque modification du noyau, du pr\u00e9impr\u00e9gn\u00e9 ou du cuivre.&quot;,&quot;l_layers&quot;:&quot;Couches&quot;,&quot;l_lam&quot;:&quot;Mat\u00e9riau&quot;,&quot;l_foil&quot;:&quot;Feuille externe (\u00b5m)&quot;,&quot;l_plating&quot;:&quot;M\u00e9tallisation des couches externes (\u00b5m)&quot;,&quot;l_target&quot;:&quot;\u00c9paisseur cible (mm)&quot;,&quot;l_tol&quot;:&quot;Tol\u00e9rance (\u00b1 %)&quot;,&quot;l_mask&quot;:&quot;Vernis \u00e9pargne, deux faces (mm)&quot;,&quot;start&quot;:&quot;Partir de&quot;,&quot;mirror&quot;:&quot;Reporter la moiti\u00e9 sup\u00e9rieure en miroir&quot;,&quot;mil&quot;:&quot;Afficher les \u00e9paisseurs en mil&quot;,&quot;kP&quot;:&quot;press\u00e9&quot;,&quot;kF&quot;:&quot;fini avec vernis \u00e9pargne&quot;,&quot;kD&quot;:&quot;par rapport \u00e0 la cible&quot;,&quot;ok&quot;:&quot;Dans la tol\u00e9rance&quot;,&quot;thick&quot;:&quot;Trop \u00e9pais&quot;,&quot;thin&quot;:&quot;Trop mince&quot;,&quot;target&quot;:&quot;cible&quot;,&quot;outer&quot;:&quot;cuivre externe&quot;,&quot;inner&quot;:&quot;cuivre interne&quot;,&quot;foil&quot;:&quot;feuille&quot;,&quot;plating&quot;:&quot;m\u00e9tallisation&quot;,&quot;cov&quot;:&quot;Couverture cuivre %&quot;,&quot;to&quot;:&quot;\u2013&quot;,&quot;second&quot;:&quot;Pas de second pr\u00e9impr\u00e9gn\u00e9&quot;,&quot;single&quot;:&quot;pli unique&quot;,&quot;low&quot;:&quot;di\u00e9lectrique faible apr\u00e8s remplissage de r\u00e9sine&quot;,&quot;core&quot;:&quot;Noyau&quot;,&quot;prepreg&quot;:&quot;Pr\u00e9impr\u00e9gn\u00e9&quot;,&quot;copper&quot;:&quot;cuivre&quot;,&quot;nominal&quot;:&quot;nominal&quot;,&quot;sheet&quot;:&quot;Fiche de construction&quot;,&quot;thL&quot;:&quot;Couche&quot;,&quot;thM&quot;:&quot;Mat\u00e9riau&quot;,&quot;thD&quot;:&quot;D\u00e9tail&quot;,&quot;thT&quot;:&quot;\u00c9paisseur&quot;,&quot;Copper&quot;:&quot;Cuivre&quot;,&quot;coverage&quot;:&quot;couverture&quot;,&quot;Pressed&quot;:&quot;Press\u00e9&quot;,&quot;Finished&quot;:&quot;Fini avec vernis \u00e9pargne&quot;,&quot;heavy&quot;:&quot;cuivre \u00e9pais&quot;,&quot;aria&quot;:&quot;Coupe du stackup dessin\u00e9e \u00e0 l'\u00e9chelle&quot;,&quot;foot&quot;:&quot;Les \u00e9paisseurs de pr\u00e9impr\u00e9gn\u00e9 et les valeurs de Dk sont des estimations calcul\u00e9es \u00e0 partir du grammage du verre IPC-4412 de chaque style, du taux de r\u00e9sine et d'une densit\u00e9 de r\u00e9sine typique pour la classe de mat\u00e9riau. Ce ne sont pas les donn\u00e9es d'une marque de stratifi\u00e9s pr\u00e9cise et les valeurs de Dk sont approximatives. Les intervalles de pr\u00e9impr\u00e9gn\u00e9 perdent la r\u00e9sine qui remplit le cuivre interne adjacent : \u00e9paisseur du cuivre \u00d7 (1 \u2212 couverture cuivre). L'outil est fourni \u00e0 titre indicatif, sans garantie : v\u00e9rifiez toujours une construction avec la fiche technique du fournisseur du stratifi\u00e9 et les donn\u00e9es de pressage du fabricant.&quot;,&quot;cta1&quot;:&quot;Besoin de la m\u00eame construction avec les donn\u00e9es r\u00e9elles d'un stratifi\u00e9 pr\u00e9cis ? &quot;,&quot;cta2&quot;:&quot;Envoyez-nous votre stackup&quot;,&quot;cta3&quot;:&quot; et nous le v\u00e9rifierons avec les valeurs du fournisseur du mat\u00e9riau.&quot;,&quot;line&quot;:&quot;Stratifi\u00e9s, pr\u00e9impr\u00e9gn\u00e9s, feuille de cuivre et outils pour PCB en Suisse, Italie et Slov\u00e9nie&quot;,&quot;contact&quot;:&quot;Contact&quot;,&quot;m0&quot;:&quot;FR-4 haut Tg, charg\u00e9&quot;,&quot;m1&quot;:&quot;FR-4 Tg standard, non charg\u00e9&quot;,&quot;m2&quot;:&quot;Syst\u00e8me de r\u00e9sine faibles pertes&quot;},&quot;de&quot;:{&quot;title&quot;:&quot;Multilayer-Stackup-Builder&quot;,&quot;lede&quot;:&quot;Bauen Sie eine Multilayer-Leiterplatte Lage f\u00fcr Lage aus FR-4-Kernen und Prepregs auf. Der Querschnitt wird ma\u00dfst\u00e4blich gezeichnet und folgt jeder \u00c4nderung von Kern, Prepreg oder Kupfer.&quot;,&quot;l_layers&quot;:&quot;Lagen&quot;,&quot;l_lam&quot;:&quot;Material&quot;,&quot;l_foil&quot;:&quot;Au\u00dfenfolie (\u00b5m)&quot;,&quot;l_plating&quot;:&quot;Galvanik auf den Au\u00dfenlagen (\u00b5m)&quot;,&quot;l_target&quot;:&quot;Zieldicke (mm)&quot;,&quot;l_tol&quot;:&quot;Toleranz (\u00b1 %)&quot;,&quot;l_mask&quot;:&quot;L\u00f6tstopplack, beidseitig (mm)&quot;,&quot;start&quot;:&quot;Ausgehen von&quot;,&quot;mirror&quot;:&quot;Obere H\u00e4lfte nach unten spiegeln&quot;,&quot;mil&quot;:&quot;Dicken in mil anzeigen&quot;,&quot;kP&quot;:&quot;verpresst&quot;,&quot;kF&quot;:&quot;fertig mit L\u00f6tstopplack&quot;,&quot;kD&quot;:&quot;gegen\u00fcber Ziel&quot;,&quot;ok&quot;:&quot;In Toleranz&quot;,&quot;thick&quot;:&quot;Zu dick&quot;,&quot;thin&quot;:&quot;Zu d\u00fcnn&quot;,&quot;target&quot;:&quot;Ziel&quot;,&quot;outer&quot;:&quot;Au\u00dfenkupfer&quot;,&quot;inner&quot;:&quot;Innenkupfer&quot;,&quot;foil&quot;:&quot;Folie&quot;,&quot;plating&quot;:&quot;Galvanik&quot;,&quot;cov&quot;:&quot;Kupferbelegung %&quot;,&quot;to&quot;:&quot;\u2013&quot;,&quot;second&quot;:&quot;Kein zweites Prepreg&quot;,&quot;single&quot;:&quot;Einzellage&quot;,&quot;low&quot;:&quot;geringes Dielektrikum nach Harzf\u00fcllung&quot;,&quot;core&quot;:&quot;Kern&quot;,&quot;prepreg&quot;:&quot;Prepreg&quot;,&quot;copper&quot;:&quot;Kupfer&quot;,&quot;nominal&quot;:&quot;nominal&quot;,&quot;sheet&quot;:&quot;Aufbaublatt&quot;,&quot;thL&quot;:&quot;Lage&quot;,&quot;thM&quot;:&quot;Material&quot;,&quot;thD&quot;:&quot;Detail&quot;,&quot;thT&quot;:&quot;Dicke&quot;,&quot;Copper&quot;:&quot;Kupfer&quot;,&quot;coverage&quot;:&quot;Belegung&quot;,&quot;Pressed&quot;:&quot;Verpresst&quot;,&quot;Finished&quot;:&quot;Fertig mit L\u00f6tstopplack&quot;,&quot;heavy&quot;:&quot;Dickkupfer&quot;,&quot;aria&quot;:&quot;Ma\u00dfst\u00e4blicher Querschnitt des Lagenaufbaus&quot;,&quot;foot&quot;:&quot;Prepreg-Dicken und Dk-Werte sind Sch\u00e4tzungen, berechnet aus dem IPC-4412-Glasgewicht des jeweiligen Gewebetyps, dem Harzgehalt und einer typischen Harzdichte der Materialklasse. Es sind nicht die Daten einer bestimmten Laminatmarke, und die Dk-Werte sind N\u00e4herungen. Prepreg-Zwischenlagen verlieren das Harz, das das angrenzende Innenkupfer f\u00fcllt: Kupferdicke \u00d7 (1 \u2212 Kupferbelegung). Das Tool dient nur zur Orientierung, ohne Gew\u00e4hr: Pr\u00fcfen Sie einen Aufbau immer anhand des Datenblatts des Laminatlieferanten und der Pressdaten des Leiterplattenherstellers.&quot;,&quot;cta1&quot;:&quot;Ben\u00f6tigen Sie denselben Aufbau mit den realen Daten eines bestimmten Laminats? &quot;,&quot;cta2&quot;:&quot;Senden Sie uns Ihren Lagenaufbau&quot;,&quot;cta3&quot;:&quot; und wir pr\u00fcfen ihn mit den Werten des Materiallieferanten.&quot;,&quot;line&quot;:&quot;Laminate, Prepregs, Kupferfolie und Werkzeuge f\u00fcr Leiterplatten in der Schweiz, Italien und Slowenien&quot;,&quot;contact&quot;:&quot;Kontakt&quot;,&quot;m0&quot;:&quot;FR-4 hoher Tg, gef\u00fcllt&quot;,&quot;m1&quot;:&quot;FR-4 Standard-Tg, ungef\u00fcllt&quot;,&quot;m2&quot;:&quot;Low-Loss-Harzsystem&quot;},&quot;es&quot;:{&quot;title&quot;:&quot;Constructor de stackup multicapa&quot;,&quot;lede&quot;:&quot;Construya una placa multicapa capa por capa con n\u00facleos y prepregs FR-4. La secci\u00f3n se dibuja a escala y sigue cada cambio de n\u00facleo, prepreg o cobre.&quot;,&quot;l_layers&quot;:&quot;Capas&quot;,&quot;l_lam&quot;:&quot;Material&quot;,&quot;l_foil&quot;:&quot;L\u00e1mina exterior (\u00b5m)&quot;,&quot;l_plating&quot;:&quot;Metalizado en las capas externas (\u00b5m)&quot;,&quot;l_target&quot;:&quot;Espesor objetivo (mm)&quot;,&quot;l_tol&quot;:&quot;Tolerancia (\u00b1 %)&quot;,&quot;l_mask&quot;:&quot;M\u00e1scara de soldadura, ambas caras (mm)&quot;,&quot;start&quot;:&quot;Partir de&quot;,&quot;mirror&quot;:&quot;Reflejar la mitad superior&quot;,&quot;mil&quot;:&quot;Mostrar espesores en mil&quot;,&quot;kP&quot;:&quot;prensado&quot;,&quot;kF&quot;:&quot;acabado con m\u00e1scara&quot;,&quot;kD&quot;:&quot;respecto al objetivo&quot;,&quot;ok&quot;:&quot;En tolerancia&quot;,&quot;thick&quot;:&quot;Demasiado grueso&quot;,&quot;thin&quot;:&quot;Demasiado fino&quot;,&quot;target&quot;:&quot;objetivo&quot;,&quot;outer&quot;:&quot;cobre externo&quot;,&quot;inner&quot;:&quot;cobre interno&quot;,&quot;foil&quot;:&quot;l\u00e1mina&quot;,&quot;plating&quot;:&quot;metalizado&quot;,&quot;cov&quot;:&quot;Cobertura de cobre %&quot;,&quot;to&quot;:&quot;\u2013&quot;,&quot;second&quot;:&quot;Sin segundo prepreg&quot;,&quot;single&quot;:&quot;hoja \u00fanica&quot;,&quot;low&quot;:&quot;diel\u00e9ctrico bajo tras el relleno de resina&quot;,&quot;core&quot;:&quot;N\u00facleo&quot;,&quot;prepreg&quot;:&quot;Prepreg&quot;,&quot;copper&quot;:&quot;cobre&quot;,&quot;nominal&quot;:&quot;nominal&quot;,&quot;sheet&quot;:&quot;Hoja de construcci\u00f3n&quot;,&quot;thL&quot;:&quot;Capa&quot;,&quot;thM&quot;:&quot;Material&quot;,&quot;thD&quot;:&quot;Detalle&quot;,&quot;thT&quot;:&quot;Espesor&quot;,&quot;Copper&quot;:&quot;Cobre&quot;,&quot;coverage&quot;:&quot;cobertura&quot;,&quot;Pressed&quot;:&quot;Prensado&quot;,&quot;Finished&quot;:&quot;Acabado con m\u00e1scara de soldadura&quot;,&quot;heavy&quot;:&quot;cobre grueso&quot;,&quot;aria&quot;:&quot;Secci\u00f3n del stackup dibujada a escala&quot;,&quot;foot&quot;:&quot;Los espesores de prepreg y los valores de Dk son estimaciones calculadas a partir del peso del vidrio IPC-4412 de cada estilo, del contenido de resina y de una densidad de resina t\u00edpica para la clase de material. No son los datos de una marca de laminados concreta y los valores de Dk son aproximados. Los espacios de prepreg pierden la resina que rellena el cobre interno adyacente: espesor de cobre \u00d7 (1 \u2212 cobertura de cobre). La herramienta se ofrece solo como orientaci\u00f3n, sin garant\u00eda: confirme siempre una construcci\u00f3n con la hoja de datos del proveedor del laminado y los datos de prensado del fabricante.&quot;,&quot;cta1&quot;:&quot;\u00bfNecesita la misma construcci\u00f3n con los datos reales de un laminado concreto? &quot;,&quot;cta2&quot;:&quot;Env\u00edenos su stackup&quot;,&quot;cta3&quot;:&quot; y lo verificaremos con los valores del proveedor del material.&quot;,&quot;line&quot;:&quot;Laminados, prepregs, l\u00e1mina de cobre y herramientas para PCB en Suiza, Italia y Eslovenia&quot;,&quot;contact&quot;:&quot;Contacto&quot;,&quot;m0&quot;:&quot;FR-4 alto Tg, con carga&quot;,&quot;m1&quot;:&quot;FR-4 Tg est\u00e1ndar, sin carga&quot;,&quot;m2&quot;:&quot;Sistema de resina de bajas p\u00e9rdidas&quot;}};&#10;const LANG=(()=&gt;{let l=&quot;&quot;;try{l=window.frameElement?parent.document.documentElement.lang:&quot;&quot;;}catch(e){}l=(l||document.documentElement.lang||&quot;en&quot;).slice(0,2).toLowerCase();return I18N[l]?l:&quot;en&quot;;})();const T=I18N[LANG];const MN={&quot;FR-4 high Tg, filled&quot;:T.m0,&quot;FR-4 standard Tg, unfilled&quot;:T.m1,&quot;Low-loss resin system&quot;:T.m2};&#10;const GLASS={&quot;7628&quot;:203.4,&quot;1506&quot;:165,&quot;2116&quot;:103.8,&quot;2113&quot;:78,&quot;1080&quot;:46.8,&quot;106&quot;:24.4};&#10;const RCS={&quot;7628&quot;:[42,45,48,50],&quot;1506&quot;:[46,50],&quot;2116&quot;:[50,53,56,58],&quot;2113&quot;:[54,57],&quot;1080&quot;:[62,65,68],&quot;106&quot;:[70,73,76]};&#10;const MAT={&quot;FR-4 high Tg, filled&quot;:{rho:1.55,dkr:3.35},&quot;FR-4 standard Tg, unfilled&quot;:{rho:1.42,dkr:3.3},&quot;Low-loss resin system&quot;:{rho:1.45,dkr:2.9}};&#10;const CORES=[[0.002,&quot;1-106&quot;],[0.003,&quot;1-1080&quot;],[0.004,&quot;1-2116&quot;],[0.005,&quot;1-2116&quot;],[0.006,&quot;1-1506&quot;],[0.008,&quot;1-7628&quot;],[0.010,&quot;2-2116&quot;],[0.012,&quot;2-1506&quot;],[0.014,&quot;2-7628&quot;],[0.016,&quot;2-7628&quot;],[0.018,&quot;2-7628+1-1080&quot;],[0.020,&quot;2-7628+1-2116&quot;],[0.024,&quot;3-7628&quot;],[0.028,&quot;4-7628&quot;],[0.031,&quot;4-7628&quot;],[0.036,&quot;5-7628&quot;],[0.039,&quot;5-7628&quot;],[0.042,&quot;6-7628&quot;],[0.047,&quot;6-7628&quot;],[0.059,&quot;8-7628&quot;]];&#10;const DKG=5.8, PP={}, CO={};&#10;Object.entries(MAT).forEach(([m,p])=&gt;{&#10;PP[m]=[];Object.entries(RCS).forEach(([st,list])=&gt;list.slice().reverse().forEach(rc=&gt;{const W=GLASS[st],tg=W\/2.54,t=tg+W*rc\/(100-rc)\/p.rho,vg=tg\/t;PP[m].push([st,rc+&quot;%&quot;,t\/25.4,vg*DKG+(1-vg)*p.dkr]);}));&#10;PP[m].sort((x,y)=&gt;y[2]-x[2]);&#10;CO[m]=CORES.map(([inch,con])=&gt;{let W=0;con.split(&quot;+&quot;).forEach(x=&gt;{const [n,st]=x.split(&quot;-&quot;);W+=(+n)*GLASS[st];});const t=inch*25400,tg=W\/2.54,vg=Math.min(tg\/t,0.75),mr=(t-tg)*p.rho;return [inch,con,Math.round(mr\/(mr+W)*100)+&quot;%&quot;,vg*DKG+(1-vg)*p.dkr];});&#10;});&#10;const CU=[5,9,12,18,25,35,50,70,105,140,175,210];&#10;const CLAD=[&quot;5\/5&quot;,&quot;9\/9&quot;,&quot;12\/12&quot;,&quot;18\/18&quot;,&quot;25\/25&quot;,&quot;35\/35&quot;,&quot;50\/50&quot;,&quot;70\/70&quot;,&quot;105\/105&quot;,&quot;140\/140&quot;,&quot;175\/175&quot;,&quot;210\/210&quot;,&quot;12\/18&quot;,&quot;18\/35&quot;,&quot;35\/70&quot;,&quot;70\/105&quot;,&quot;105\/140&quot;];&#10;const STD=[0.002,0.003,0.004,0.005,0.006,0.008,0.010,0.012,0.014,0.016,0.018,0.020,0.024,0.028,0.035,0.039,0.042];&#10;const MAXL=16, KEY=&quot;gt-stackup-builder-generic-v1&quot;;&#10;function findPP(prod,style,rc){const a=PP[prod]||[];let i=a.findIndex(x=&gt;x[0]===style&amp;&amp;x[1]===rc);if(i&lt;0)i=a.findIndex(x=&gt;x[0]===style);return i&lt;0?0:i;}&#10;function findCore(prod,inch){const a=CO[prod]||[];let best=0,bd=1e9;a.forEach((x,i)=&gt;{const d=Math.abs(x[0]-inch);if(d&lt;bd-1e-9){bd=d;best=i;}});return best;}&#10;function gapOf(prod,style,rc,n,style2,rc2,n2){return {a:findPP(prod,style,rc),na:n,b:style2?findPP(prod,style2,rc2):-1,nb:style2?n2:0};}&#10;function blank(){&#10;const s={layers:4,lam:&quot;FR-4 high Tg, filled&quot;,ppProd:&quot;FR-4 high Tg, filled&quot;,foil:18,plating:18,target:1.6,tol:10,mask:0.04,showStd:false,generic:true,mil:false,gaps:[],cores:[],cov:[]};&#10;for(let i=0;i&lt;MAXL\/2;i++)s.gaps.push(gapOf(s.ppProd,&quot;2116&quot;,&quot;56%&quot;,2));&#10;for(let i=0;i&lt;MAXL\/2-1;i++)s.cores.push({k:findCore(s.lam,0.008),cu:&quot;35\/35&quot;});&#10;for(let i=0;i&lt;MAXL;i++)s.cov.push(60);&#10;return s;&#10;}&#10;const PRESETS=[&#10;[&quot;4L, core 0.71 + 2\u00d77628&quot;,s=&gt;{s.layers=4;s.cores[0]={k:findCore(s.lam,0.028),cu:&quot;35\/35&quot;};s.gaps[0]=gapOf(s.ppProd,&quot;7628&quot;,&quot;45%&quot;,2);s.gaps[1]=gapOf(s.ppProd,&quot;7628&quot;,&quot;45%&quot;,2);}],&#10;[&quot;4L, core 1.067 + 1\u00d77628 HR&quot;,s=&gt;{s.layers=4;s.cores[0]={k:findCore(s.lam,0.042),cu:&quot;35\/35&quot;};s.gaps[0]=gapOf(s.ppProd,&quot;7628&quot;,&quot;50%&quot;,1);s.gaps[1]=gapOf(s.ppProd,&quot;7628&quot;,&quot;50%&quot;,1);}],&#10;[&quot;4L, core 0.991 + 2\u00d72116&quot;,s=&gt;{s.layers=4;s.cores[0]={k:findCore(s.lam,0.039),cu:&quot;35\/35&quot;};s.gaps[0]=gapOf(s.ppProd,&quot;2116&quot;,&quot;56%&quot;,2);s.gaps[1]=gapOf(s.ppProd,&quot;2116&quot;,&quot;56%&quot;,2);}],&#10;[&quot;6L, 2 cores 0.36&quot;,s=&gt;{s.layers=6;for(let i=0;i&lt;2;i++)s.cores[i]={k:findCore(s.lam,0.014),cu:&quot;35\/35&quot;};for(let i=0;i&lt;3;i++)s.gaps[i]=gapOf(s.ppProd,&quot;2116&quot;,&quot;58%&quot;,2);}],&#10;[&quot;8L, 3 cores 0.20&quot;,s=&gt;{s.layers=8;for(let i=0;i&lt;3;i++)s.cores[i]={k:findCore(s.lam,0.008),cu:&quot;35\/35&quot;};for(let i=0;i&lt;4;i++)s.gaps[i]=gapOf(s.ppProd,&quot;2116&quot;,&quot;56%&quot;,1,&quot;1080&quot;,&quot;68%&quot;,1);}],&#10;[&quot;10L, 4 cores 0.20&quot;,s=&gt;{s.layers=10;for(let i=0;i&lt;4;i++)s.cores[i]={k:findCore(s.lam,0.008),cu:&quot;18\/18&quot;};for(let i=0;i&lt;5;i++)s.gaps[i]=gapOf(s.ppProd,&quot;2116&quot;,&quot;58%&quot;,1);}],&#10;[&quot;4L &quot;+T.heavy+&quot; 105\/105&quot;,s=&gt;{s.layers=4;s.cores[0]={k:findCore(s.lam,0.024),cu:&quot;105\/105&quot;};s.gaps[0]=gapOf(s.ppProd,&quot;2116&quot;,&quot;58%&quot;,3);s.gaps[1]=gapOf(s.ppProd,&quot;2116&quot;,&quot;58%&quot;,3);}]&#10;];&#10;let S=blank(); PRESETS[0][1](S);&#10;try{const raw=localStorage.getItem(KEY);if(raw){const o=JSON.parse(raw);if(o&amp;&amp;PP[o.ppProd]&amp;&amp;CO[o.lam]&amp;&amp;Array.isArray(o.gaps)&amp;&amp;o.gaps.length===MAXL\/2&amp;&amp;Array.isArray(o.cores)&amp;&amp;o.cores.length===MAXL\/2-1)S=Object.assign(blank(),o);}}catch(e){}&#10;function save(){try{localStorage.setItem(KEY,JSON.stringify(S));}catch(e){}}&#10;function compute(s){&#10;const n=(s.layers-2)\/2, slots=[], pps=PP[s.ppProd], cos=CO[s.lam];&#10;const cuOf=L=&gt;{ if(L===1||L===s.layers)return s.foil+s.plating; const ci=Math.floor((L-2)\/2); const [a,b]=s.cores[ci].cu.split(&quot;\/&quot;).map(Number); return L%2===0?a:b; };&#10;for(let L=1;L&lt;=s.layers;L++){&#10;const outer=(L===1||L===s.layers);&#10;slots.push({type:&quot;cu&quot;,layer:L,outer,um:cuOf(L),t:cuOf(L)\/1000,cov:outer?100:s.cov[L-1]});&#10;if(L===s.layers)break;&#10;if(L%2===1){&#10;const gi=(L-1)\/2,g=s.gaps[gi],plies=[];&#10;const A=pps[g.a]; for(let i=0;i&lt;g.na;i++)plies.push(A);&#10;if(g.b&gt;=0&amp;&amp;g.nb&gt;0){const B=pps[g.b];for(let i=0;i&lt;g.nb;i++)plies.push(B);}&#10;const nominal=plies.reduce((x,p)=&gt;x+p[2]*0.0254,0);const dk=nominal&gt;0?plies.reduce((x,p)=&gt;x+p[3]*p[2]*0.0254,0)\/nominal:0;&#10;slots.push({type:&quot;pp&quot;,gi,plies,nominal,dk,t:nominal});&#10;}else{&#10;const ci=(L-2)\/2,c=cos[s.cores[ci].k];&#10;slots.push({type:&quot;co&quot;,ci,core:c,clad:s.cores[ci].cu,t:c[0]*25.4,std:STD.some(v=&gt;Math.abs(v-c[0])&lt;1e-6)});&#10;}&#10;}&#10;slots.forEach((sl,i)=&gt;{ if(sl.type!==&quot;pp&quot;)return; let loss=0;&#10;[slots[i-1],slots[i+1]].forEach(c=&gt;{ if(c&amp;&amp;!c.outer)loss+=c.t*(1-c.cov\/100); });&#10;sl.loss=loss; sl.t=Math.max(sl.nominal-loss,0); sl.single=sl.plies.length===1; sl.low=sl.t&lt;0.06; });&#10;const pressed=slots.reduce((x,sl)=&gt;x+sl.t,0), finished=pressed+s.mask, dev=finished-s.target;&#10;return {slots,n,pressed,finished,dev,ok:Math.abs(dev)&lt;=s.target*s.tol\/100+1e-9};&#10;}&#10;const $=id=&gt;document.getElementById(id);&#10;const f3=x=&gt;S.mil?(x\/0.0254).toFixed(2):x.toFixed(3),U=()=&gt;S.mil?&quot;mil&quot;:&quot;mm&quot;,cuT=um=&gt;S.mil?(um\/25.4).toFixed(2)+&quot; mil&quot;:um+&quot; \u00b5m&quot;,m3=x=&gt;x.toFixed(3), esc=t=&gt;String(t).replace(\/&amp;\/g,&quot;&amp;amp;&quot;).replace(\/&lt;\/g,&quot;&amp;lt;&quot;);&#10;function opt(v,t,sel){return `&lt;option value=&quot;${v}&quot;${sel?&quot; selected&quot;:&quot;&quot;}&gt;${esc(t)}&lt;\/option&gt;`;}&#10;function ppLabel(p){return `${p[0]}, RC ${p[1]}, ${S.mil?p[2].toFixed(1)+&quot; mil&quot;:m3(p[2]*0.0254)+&quot; mm&quot;}`;}&#10;function coLabel(c){return `${m3(c[0]*25.4)} mm (${c[0].toFixed(4)} in)${c[1]?&quot;, &quot;+c[1]:&quot;&quot;}`;}&#10;function initSetup(){&#10;$(&quot;layers&quot;).innerHTML=[4,6,8,10,12,14,16].map(v=&gt;opt(v,v,v===S.layers)).join(&quot;&quot;);&#10;$(&quot;lam&quot;).innerHTML=Object.keys(CO).map(v=&gt;opt(v,MN[v]||v,v===S.lam)).join(&quot;&quot;);&#10;$(&quot;ppProd&quot;).innerHTML=Object.keys(PP).map(v=&gt;opt(v,v,v===S.ppProd)).join(&quot;&quot;);&#10;$(&quot;foil&quot;).innerHTML=CU.map(v=&gt;opt(v,v,v===S.foil)).join(&quot;&quot;);&#10;[&quot;plating&quot;,&quot;target&quot;,&quot;tol&quot;,&quot;mask&quot;].forEach(k=&gt;$(k).value=S[k]);&#10;$(&quot;showStd&quot;).checked=S.showStd;$(&quot;mil&quot;).checked=S.mil;&#10;}&#10;function bindSetup(){&#10;$(&quot;layers&quot;).onchange=e=&gt;{S.layers=+e.target.value;render();};&#10;$(&quot;foil&quot;).onchange=e=&gt;{S.foil=+e.target.value;render();};&#10;$(&quot;lam&quot;).onchange=e=&gt;{const old=CO[S.lam];const nw=e.target.value;S.cores.forEach(c=&gt;{c.k=findCore(nw,old[c.k][0]);});S.lam=nw;setPP(nw);render();};&#10;window.setPP=nw=&gt;{const old=PP[S.ppProd];S.gaps.forEach(g=&gt;{g.a=findPP(nw,old[g.a][0],old[g.a][1]);if(g.b&gt;=0)g.b=findPP(nw,old[g.b][0],old[g.b][1]);});S.ppProd=nw;};&#10;[&quot;plating&quot;,&quot;target&quot;,&quot;tol&quot;,&quot;mask&quot;].forEach(k=&gt;$(k).oninput=e=&gt;{const v=parseFloat(e.target.value);if(isFinite(v)&amp;&amp;v&gt;=0){S[k]=v;render(true);}});&#10;$(&quot;showStd&quot;).onchange=e=&gt;{S.showStd=e.target.checked;render();};&#10;$(&quot;mil&quot;).onchange=e=&gt;{S.mil=e.target.checked;render();};&#10;$(&quot;mirror&quot;).onclick=()=&gt;{const n=(S.layers-2)\/2;for(let g=0;g&lt;=n;g++){if(g&gt;n-g)S.gaps[g]=Object.assign({},S.gaps[n-g]);}&#10;for(let c=0;c&lt;n;c++){if(c&gt;n-1-c){const src=S.cores[n-1-c];const [a,b]=src.cu.split(&quot;\/&quot;);S.cores[c]={k:src.k,cu:b+&quot;\/&quot;+a};}}&#10;for(let L=1;L&lt;=S.layers;L++){if(L&gt;S.layers+1-L)S.cov[L-1]=S.cov[S.layers-L];}render();};&#10;const box=$(&quot;presets&quot;);PRESETS.forEach(([name,fn])=&gt;{const b=document.createElement(&quot;button&quot;);b.type=&quot;button&quot;;b.textContent=name;b.onclick=()=&gt;{fn(S);initSetup();render();};box.appendChild(b);});&#10;}&#10;function renderRows(R){&#10;const pps=PP[S.ppProd],cos=CO[S.lam];let h=&quot;&quot;;&#10;R.slots.forEach((sl,i)=&gt;{&#10;if(sl.type===&quot;cu&quot;){&#10;const ctl=sl.outer?`&lt;div class=&quot;ctl cu&quot;&gt;&lt;span&gt;${S.foil} \u00b5m ${T.foil} + ${S.plating} \u00b5m ${T.plating}&lt;\/span&gt;&lt;\/div&gt;`&#10;:`&lt;div class=&quot;ctl cu&quot;&gt;&lt;span&gt;${T.cov}&lt;\/span&gt;&lt;input type=&quot;number&quot; min=&quot;5&quot; max=&quot;100&quot; step=&quot;5&quot; value=&quot;${sl.cov}&quot; data-k=&quot;cov&quot; data-i=&quot;${sl.layer-1}&quot; aria-label=&quot;Copper coverage of layer ${sl.layer}&quot;&gt;&lt;\/div&gt;`;&#10;h+=`&lt;div class=&quot;row&quot; data-slot=&quot;${i}&quot;&gt;&lt;div class=&quot;chip cu&quot;&gt;&lt;\/div&gt;&lt;div class=&quot;name&quot;&gt;L${sl.layer}&lt;small&gt;${sl.outer?T.outer:T.inner}&lt;\/small&gt;&lt;\/div&gt;${ctl}&lt;div class=&quot;t&quot;&gt;${cuT(sl.um)}&lt;\/div&gt;&lt;\/div&gt;`;&#10;}else if(sl.type===&quot;pp&quot;){&#10;const g=S.gaps[sl.gi];&#10;const nsel=(k,v)=&gt;`&lt;select data-k=&quot;${k}&quot; data-i=&quot;${sl.gi}&quot; aria-label=&quot;Number of sheets&quot;&gt;${[0,1,2,3,4].map(x=&gt;opt(x,x+&quot;\u00d7&quot;,x===v)).join(&quot;&quot;)}&lt;\/select&gt;`;&#10;let flags=&quot;&quot;;if(sl.single)flags+=`&lt;span class=&quot;flag warn&quot;&gt;${T.single}&lt;\/span&gt; `;if(sl.low)flags+=`&lt;span class=&quot;flag bad&quot;&gt;${T.low}&lt;\/span&gt;`;&#10;h+=`&lt;div class=&quot;row&quot; data-slot=&quot;${i}&quot;&gt;&lt;div class=&quot;chip pp&quot;&gt;&lt;\/div&gt;&lt;div class=&quot;name&quot;&gt;${T.prepreg}&lt;small&gt;L${sl.gi*2+1} ${T.to} L${sl.gi*2+2}&lt;\/small&gt;&lt;\/div&gt;&#10;&lt;div&gt;&lt;div class=&quot;ctl pp&quot;&gt;&lt;select data-k=&quot;a&quot; data-i=&quot;${sl.gi}&quot; aria-label=&quot;Prepreg A&quot;&gt;${pps.map((p,j)=&gt;opt(j,ppLabel(p),j===g.a)).join(&quot;&quot;)}&lt;\/select&gt;${nsel(&quot;na&quot;,g.na)}&#10;&lt;select data-k=&quot;b&quot; data-i=&quot;${sl.gi}&quot; aria-label=&quot;Second prepreg&quot;&gt;${opt(-1,T.second,g.b&lt;0)}${pps.map((p,j)=&gt;opt(j,ppLabel(p),j===g.b)).join(&quot;&quot;)}&lt;\/select&gt;${nsel(&quot;nb&quot;,g.nb)}&lt;\/div&gt;${flags}&lt;\/div&gt;&#10;&lt;div class=&quot;t&quot;&gt;${f3(sl.t)}&lt;small&gt;${sl.loss&gt;0.0005?T.nominal+&quot; &quot;+f3(sl.nominal):U()}&lt;\/small&gt;&lt;\/div&gt;&lt;\/div&gt;`;&#10;}else{&#10;const c=S.cores[sl.ci];const flag=(S.showStd&amp;&amp;!sl.std)?`&lt;span class=&quot;flag warn&quot;&gt;non-standard core&lt;\/span&gt;`:&quot;&quot;;&#10;h+=`&lt;div class=&quot;row&quot; data-slot=&quot;${i}&quot;&gt;&lt;div class=&quot;chip co&quot;&gt;&lt;\/div&gt;&lt;div class=&quot;name&quot;&gt;${T.core} ${sl.ci+1}&lt;small&gt;L${sl.ci*2+2} \/ L${sl.ci*2+3}&lt;\/small&gt;&lt;\/div&gt;&#10;&lt;div&gt;&lt;div class=&quot;ctl co&quot;&gt;&lt;select data-k=&quot;k&quot; data-i=&quot;${sl.ci}&quot; aria-label=&quot;Core&quot;&gt;${cos.map((x,j)=&gt;opt(j,coLabel(x),j===c.k)).join(&quot;&quot;)}&lt;\/select&gt;&#10;&lt;select data-k=&quot;cu&quot; data-i=&quot;${sl.ci}&quot; aria-label=&quot;Core copper cladding&quot;&gt;${CLAD.map(x=&gt;opt(x,x+&quot; \u00b5m&quot;,x===c.cu)).join(&quot;&quot;)}&lt;\/select&gt;&lt;\/div&gt;${flag}&lt;\/div&gt;&#10;&lt;div class=&quot;t&quot;&gt;${f3(sl.t)}&lt;small&gt;${U()}&lt;\/small&gt;&lt;\/div&gt;&lt;\/div&gt;`;&#10;}&#10;});&#10;$(&quot;rows&quot;).innerHTML=h;&#10;}&#10;function onRowChange(e){&#10;const el=e.target,k=el.dataset.k;if(!k)return;const i=+el.dataset.i;&#10;if(k===&quot;cov&quot;){const v=parseFloat(el.value);if(!isFinite(v))return;S.cov[i]=Math.min(100,Math.max(0,v));render(true);return;}&#10;if(k===&quot;a&quot;||k===&quot;b&quot;||k===&quot;na&quot;||k===&quot;nb&quot;){const g=S.gaps[i];g[k]=+el.value;if(k===&quot;b&quot;&amp;&amp;g.b&gt;=0&amp;&amp;g.nb===0)g.nb=1;if(k===&quot;b&quot;&amp;&amp;g.b&lt;0)g.nb=0;if(k===&quot;nb&quot;&amp;&amp;g.nb&gt;0&amp;&amp;g.b&lt;0)g.b=g.a;if(g.na+g.nb===0)g.na=1;}&#10;else if(k===&quot;k&quot;)S.cores[i].k=+el.value; else if(k===&quot;cu&quot;)S.cores[i].cu=el.value;&#10;render();&#10;}&#10;function renderSvg(R){&#10;const X=58,W=250,LX=X+W+26,topPad=22,H=430,scale=H\/R.pressed,n=R.slots.length,step=15.5;&#10;const height=Math.max(H,n*step)+topPad+24;let y=topPad,parts=[],labels=[];&#10;parts.push(`&lt;defs&gt;&lt;clipPath id=&quot;clip&quot;&gt;&lt;rect x=&quot;${X}&quot; y=&quot;${topPad}&quot; width=&quot;${W}&quot; height=&quot;${H}&quot;\/&gt;&lt;\/clipPath&gt;&lt;\/defs&gt;`);&#10;R.slots.forEach((sl,i)=&gt;{&#10;const h=sl.t*scale;let g=`&lt;g class=&quot;slot&quot; data-slot=&quot;${i}&quot;&gt;`;&#10;if(sl.type===&quot;cu&quot;){&#10;if(sl.outer){&#10;const hf=h*S.foil\/(S.foil+S.plating||1),top=(sl.layer===1);&#10;g+=`&lt;rect class=&quot;body&quot; x=&quot;${X}&quot; y=&quot;${y}&quot; width=&quot;${W}&quot; height=&quot;${h}&quot; fill=&quot;var(--copper)&quot;\/&gt;`;&#10;if(S.plating&gt;0)g+=`&lt;rect x=&quot;${X}&quot; y=&quot;${top?y:y+hf}&quot; width=&quot;${W}&quot; height=&quot;${h-hf}&quot; fill=&quot;var(--plating)&quot;\/&gt;`;&#10;}else{&#10;g+=`&lt;rect class=&quot;body&quot; x=&quot;${X}&quot; y=&quot;${y}&quot; width=&quot;${W}&quot; height=&quot;${h}&quot; fill=&quot;var(--prepreg)&quot;\/&gt;`;&#10;const cov=sl.cov\/100,pitch=W\/8,tw=pitch*cov,off=(sl.layer*11)%pitch;&#10;if(cov&gt;=0.98)g+=`&lt;rect x=&quot;${X}&quot; y=&quot;${y}&quot; width=&quot;${W}&quot; height=&quot;${h}&quot; fill=&quot;var(--copper)&quot;\/&gt;`;&#10;else{g+=`&lt;g clip-path=&quot;url(#clip)&quot;&gt;`;for(let k=-1;k&lt;9;k++)g+=`&lt;rect x=&quot;${X+k*pitch+off}&quot; y=&quot;${y}&quot; width=&quot;${tw}&quot; height=&quot;${h}&quot; fill=&quot;var(--copper)&quot;\/&gt;`;g+=`&lt;\/g&gt;`;}&#10;}&#10;labels.push({i,y:y+h\/2,text:`L${sl.layer} ${T.copper}`,dk:&quot;&quot;,dim:cuT(sl.um)});&#10;}else if(sl.type===&quot;pp&quot;){&#10;g+=`&lt;rect class=&quot;body&quot; x=&quot;${X}&quot; y=&quot;${y}&quot; width=&quot;${W}&quot; height=&quot;${h}&quot; fill=&quot;var(--prepreg)&quot;\/&gt;`;&#10;let yy=y;const k=sl.nominal&gt;0?sl.t\/sl.nominal:0;&#10;sl.plies.forEach((p,j)=&gt;{const ph=p[2]*0.0254*k*scale;&#10;if(p[0]!==&quot;Resin film&quot;)g+=`&lt;line x1=&quot;${X+4}&quot; x2=&quot;${X+W-4}&quot; y1=&quot;${yy+ph\/2}&quot; y2=&quot;${yy+ph\/2}&quot; stroke=&quot;var(--glass)&quot; stroke-width=&quot;${Math.max(1,Math.min(ph*0.35,5))}&quot; stroke-dasharray=&quot;${p[0]===&quot;7628&quot;?&quot;14 4&quot;:p[0]===&quot;2116&quot;||p[0]===&quot;1506&quot;?&quot;9 4&quot;:&quot;5 4&quot;}&quot;\/&gt;`;&#10;if(j&gt;0)g+=`&lt;line x1=&quot;${X}&quot; x2=&quot;${X+W}&quot; y1=&quot;${yy}&quot; y2=&quot;${yy}&quot; stroke=&quot;var(--panel)&quot; stroke-width=&quot;.8&quot;\/&gt;`;yy+=ph;});&#10;const names=new Map();sl.plies.forEach(p=&gt;{names.set(p[0],(names.get(p[0])||0)+1);});&#10;labels.push({i,y:y+h\/2,text:T.prepreg+&quot; &quot;+[...names].map(([s,c])=&gt;c+&quot;\u00d7&quot;+s).join(&quot; + &quot;),dk:sl.dk?&quot;Dk &quot;+sl.dk.toFixed(2):&quot;&quot;,dim:f3(sl.t)+&quot; &quot;+U()});&#10;}else{&#10;g+=`&lt;rect class=&quot;body&quot; x=&quot;${X}&quot; y=&quot;${y}&quot; width=&quot;${W}&quot; height=&quot;${h}&quot; fill=&quot;var(--core)&quot;\/&gt;`;&#10;let cnt=0;(sl.core[1].match(\/(\\d+)-\/g)||[]).forEach(m=&gt;cnt+=parseInt(m));cnt=Math.min(cnt||1,18);&#10;for(let j=0;j&lt;cnt;j++){const cy=y+h*(j+0.5)\/cnt;g+=`&lt;line x1=&quot;${X+4}&quot; x2=&quot;${X+W-4}&quot; y1=&quot;${cy}&quot; y2=&quot;${cy}&quot; stroke=&quot;var(--glass)&quot; stroke-width=&quot;${Math.max(1,Math.min(h\/cnt*0.35,5))}&quot; stroke-dasharray=&quot;14 4&quot;\/&gt;`;}&#10;labels.push({i,y:y+h\/2,text:`${T.core} ${sl.ci+1}, ${sl.clad}`,dk:sl.core[3]?&quot;Dk &quot;+sl.core[3].toFixed(2):&quot;&quot;,dim:f3(sl.t)+&quot; &quot;+U()});&#10;}&#10;g+=`&lt;\/g&gt;`;parts.push(g);y+=h;&#10;});&#10;labels.forEach((l,j)=&gt;{l.ly=l.y;if(j&gt;0&amp;&amp;l.ly&lt;labels[j-1].ly+step)l.ly=labels[j-1].ly+step;});&#10;const maxY=height-10;for(let j=labels.length-1;j&gt;=0;j--){const lim=(j===labels.length-1)?maxY:labels[j+1].ly-step;if(labels[j].ly&gt;lim)labels[j].ly=lim;}&#10;labels.forEach(l=&gt;{parts.push(`&lt;g class=&quot;slot&quot; data-slot=&quot;${l.i}&quot;&gt;&lt;path class=&quot;lead&quot; d=&quot;M${X+W+2} ${l.y} L${X+W+12} ${l.y} L${LX-6} ${l.ly} L${LX-2} ${l.ly}&quot;\/&gt;&lt;text class=&quot;lbl&quot; x=&quot;${LX}&quot; y=&quot;${l.ly}&quot; dominant-baseline=&quot;central&quot;&gt;${esc(l.text)}${l.dk?`&lt;tspan class=&quot;dk&quot; dx=&quot;7&quot;&gt;${l.dk}&lt;\/tspan&gt;`:&quot;&quot;}&lt;\/text&gt;&lt;text class=&quot;dim&quot; x=&quot;598&quot; y=&quot;${l.ly}&quot; text-anchor=&quot;end&quot; dominant-baseline=&quot;central&quot;&gt;${l.dim}&lt;\/text&gt;&lt;\/g&gt;`);});&#10;const bx=X-18;parts.push(`&lt;path class=&quot;lead&quot; d=&quot;M${bx+6} ${topPad} L${bx} ${topPad} L${bx} ${topPad+H} L${bx+6} ${topPad+H}&quot;\/&gt;&lt;text class=&quot;dim&quot; transform=&quot;translate(${bx-8} ${topPad+H\/2}) rotate(-90)&quot; text-anchor=&quot;middle&quot;&gt;${f3(R.pressed)} ${U()} ${T.kP}&lt;\/text&gt;`);&#10;const svg=$(&quot;svg&quot;);svg.setAttribute(&quot;viewBox&quot;,`0 0 600 ${height}`);svg.innerHTML=parts.join(&quot;&quot;);&#10;}&#10;function renderSummary(R){&#10;$(&quot;rPressed&quot;).innerHTML=`${f3(R.pressed)}&lt;small&gt;${U()}&lt;\/small&gt;`;$(&quot;rFinished&quot;).innerHTML=`${f3(R.finished)}&lt;small&gt;${U()}&lt;\/small&gt;`;&#10;$(&quot;rDev&quot;).innerHTML=`${R.dev&gt;=0?&quot;+&quot;:&quot;\u2212&quot;}${f3(Math.abs(R.dev))}&lt;small&gt;${U()}&lt;\/small&gt;`;&#10;const v=$(&quot;verdict&quot;);v.className=&quot;verdict &quot;+(R.ok?&quot;ok&quot;:&quot;bad&quot;);v.textContent=R.ok?T.ok:(R.dev&gt;0?T.thick:T.thin);&#10;const tolAbs=S.target*S.tol\/100,lo=S.target-2.5*tolAbs,hi=S.target+2.5*tolAbs,pos=x=&gt;Math.min(100,Math.max(0,(x-lo)\/(hi-lo)*100));&#10;$(&quot;band&quot;).style.left=pos(S.target-tolAbs)+&quot;%&quot;;$(&quot;band&quot;).style.width=(pos(S.target+tolAbs)-pos(S.target-tolAbs))+&quot;%&quot;;$(&quot;mark&quot;).style.left=pos(R.finished)+&quot;%&quot;;&#10;$(&quot;gMin&quot;).textContent=f3(S.target-tolAbs);$(&quot;gTarget&quot;).textContent=T.target+&quot; &quot;+(S.mil?f3(S.target)+&quot; mil&quot;:S.target.toFixed(2)+&quot; mm&quot;);$(&quot;gMax&quot;).textContent=f3(S.target+tolAbs);&#10;}&#10;function renderSheet(R){&#10;let h=`&lt;tr&gt;&lt;th&gt;${T.thL}&lt;\/th&gt;&lt;th&gt;${T.thM}&lt;\/th&gt;&lt;th&gt;${T.thD}&lt;\/th&gt;&lt;th class=&quot;r&quot;&gt;Dk&lt;\/th&gt;&lt;th class=&quot;r&quot;&gt;${T.thT} (${U()})&lt;\/th&gt;&lt;\/tr&gt;`;&#10;R.slots.forEach(sl=&gt;{&#10;if(sl.type===&quot;cu&quot;)h+=`&lt;tr&gt;&lt;td&gt;L${sl.layer}&lt;\/td&gt;&lt;td&gt;${T.Copper}&lt;\/td&gt;&lt;td&gt;${sl.outer?`${S.foil} \u00b5m ${T.foil} + ${S.plating} \u00b5m ${T.plating}`:`${sl.um} \u00b5m, ${T.coverage} ${sl.cov}%`}&lt;\/td&gt;&lt;td class=&quot;r&quot;&gt;&lt;\/td&gt;&lt;td class=&quot;r&quot;&gt;${f3(sl.t)}&lt;\/td&gt;&lt;\/tr&gt;`;&#10;else if(sl.type===&quot;pp&quot;){const names=[];const g=S.gaps[sl.gi],pps=PP[S.ppProd];names.push(`${g.na} \u00d7 ${pps[g.a][0]} RC ${pps[g.a][1]}`);if(g.b&gt;=0&amp;&amp;g.nb&gt;0)names.push(`${g.nb} \u00d7 ${pps[g.b][0]} RC ${pps[g.b][1]}`);&#10;h+=`&lt;tr&gt;&lt;td&gt;&lt;\/td&gt;&lt;td&gt;${T.prepreg}&lt;\/td&gt;&lt;td&gt;${names.join(&quot; + &quot;)}${sl.loss&gt;0.0005?`, ${T.nominal} ${f3(sl.nominal)}`:&quot;&quot;}&lt;\/td&gt;&lt;td class=&quot;r&quot;&gt;${sl.dk.toFixed(2)}&lt;\/td&gt;&lt;td class=&quot;r&quot;&gt;${f3(sl.t)}&lt;\/td&gt;&lt;\/tr&gt;`;}&#10;else h+=`&lt;tr&gt;&lt;td&gt;&lt;\/td&gt;&lt;td&gt;${T.core}&lt;\/td&gt;&lt;td&gt;${coLabel(sl.core)}, ${T.copper} ${sl.clad} \u00b5m&lt;\/td&gt;&lt;td class=&quot;r&quot;&gt;${sl.core[3]?sl.core[3].toFixed(2):&quot;&quot;}&lt;\/td&gt;&lt;td class=&quot;r&quot;&gt;${f3(sl.t)}&lt;\/td&gt;&lt;\/tr&gt;`;&#10;});&#10;h+=`&lt;tr&gt;&lt;td&gt;&lt;\/td&gt;&lt;td&gt;&lt;strong&gt;${T.Pressed}&lt;\/strong&gt;&lt;\/td&gt;&lt;td&gt;&lt;\/td&gt;&lt;td&gt;&lt;\/td&gt;&lt;td class=&quot;r&quot;&gt;&lt;strong&gt;${f3(R.pressed)}&lt;\/strong&gt;&lt;\/td&gt;&lt;\/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;\/td&gt;&lt;td&gt;&lt;strong&gt;${T.Finished}&lt;\/strong&gt;&lt;\/td&gt;&lt;td&gt;&lt;\/td&gt;&lt;td&gt;&lt;\/td&gt;&lt;td class=&quot;r&quot;&gt;&lt;strong&gt;${f3(R.finished)}&lt;\/strong&gt;&lt;\/td&gt;&lt;\/tr&gt;`;&#10;$(&quot;sheet&quot;).innerHTML=h;$(&quot;matline&quot;).textContent=T.thM+&quot;: &quot;+(MN[S.lam]||S.lam);&#10;}&#10;function hl(slot,on){document.querySelectorAll(`[data-slot=&quot;${slot}&quot;]`).forEach(el=&gt;el.classList.toggle(&quot;hl&quot;,on));}&#10;function render(keepRows){&#10;const R=compute(S);&#10;if(!keepRows)renderRows(R); else R.slots.forEach((sl,i)=&gt;{const row=document.querySelector(`.row[data-slot=&quot;${i}&quot;] .t`);if(row&amp;&amp;sl.type!==&quot;cu&quot;)row.innerHTML=`${f3(sl.t)}&lt;small&gt;${sl.type===&quot;pp&quot;&amp;&amp;sl.loss&gt;0.0005?T.nominal+&quot; &quot;+f3(sl.nominal):U()}&lt;\/small&gt;`;else if(row)row.textContent=cuT(sl.um);});&#10;renderSvg(R);renderSummary(R);renderSheet(R);save();try{localStorage.setItem(&quot;gt-stackup-summary&quot;,JSON.stringify({thk:R.finished,layers:S.layers,mat:Object.keys(MAT).indexOf(S.lam),cin:Math.max(...S.cores.slice(0,Math.max(R.n,1)).map(c=&gt;Math.max(...c.cu.split(&quot;\/&quot;).map(Number)))),cout:S.foil+S.plating}));}catch(e){}&#10;}&#10;if(window.frameElement){const fit=()=&gt;{window.frameElement.style.height=(document.querySelector('.wrap').offsetHeight+8)+'px';};new ResizeObserver(fit).observe(document.body);window.addEventListener('load',fit);}&#10;(function(){const q=(s,t)=&gt;{const e=document.querySelector(s);if(e)e.textContent=t;};document.documentElement.lang=LANG;document.title=T.title;q(&quot;h1&quot;,T.title);q(&quot;.lede&quot;,T.lede);q(&quot;label[for=layers]&quot;,T.l_layers);q(&quot;label[for=lam]&quot;,T.l_lam);q(&quot;label[for=foil]&quot;,T.l_foil);q(&quot;label[for=plating]&quot;,T.l_plating);q(&quot;label[for=target]&quot;,T.l_target);q(&quot;label[for=tol]&quot;,T.l_tol);q(&quot;label[for=mask]&quot;,T.l_mask);q(&quot;#presets span&quot;,T.start);q(&quot;#mirror&quot;,T.mirror);q(&quot;#milL&quot;,T.mil);const k=document.querySelectorAll(&quot;.result .k&quot;);[T.kP,T.kF,T.kD].forEach((t,i)=&gt;{if(k[i])k[i].textContent=t;});q(&quot;h2&quot;,T.sheet);q(&quot;.foot&quot;,T.foot);$(&quot;svg&quot;).setAttribute(&quot;aria-label&quot;,T.aria);const c=document.querySelector(&quot;.cta&quot;),a=c&amp;&amp;c.querySelector(&quot;a&quot;);if(a){a.textContent=T.cta2;c.textContent=&quot;&quot;;c.append(T.cta1,a,T.cta3);}const ad=document.querySelector(&quot;.contact&quot;);if(ad){ad.innerHTML=ad.innerHTML.replace(&quot;PCB laminates, prepregs, copper foil and tooling for Switzerland, Italy and Slovenia&quot;,T.line).replace(&quot;Contact:&quot;,T.contact+&quot;:&quot;);}})();&#10;(function(){const U={it:[&quot;\/drilling-advisor\/&quot;,&quot;Come forare e fresare questa costruzione&quot;],en:[&quot;\/en\/drilling-advisor\/&quot;,&quot;How to drill and rout this build&quot;],fr:[&quot;\/fr\/drilling-advisor\/&quot;,&quot;Comment percer et d\u00e9tourer cette construction&quot;],de:[&quot;\/de\/drilling-advisor\/&quot;,&quot;So bohren und fr\u00e4sen Sie diesen Aufbau&quot;],es:[&quot;\/es\/drilling-advisor\/&quot;,&quot;C\u00f3mo taladrar y fresar esta construcci\u00f3n&quot;]}[LANG];if(!U||!window.frameElement)return;const p=document.createElement(&quot;p&quot;);p.className=&quot;cta&quot;;const a=document.createElement(&quot;a&quot;);a.href=U[0];a.target=&quot;_top&quot;;a.textContent=U[1]+&quot; \u2192&quot;;p.appendChild(a);const f=document.querySelector(&quot;.foot&quot;);f.parentNode.insertBefore(p,f);})();&#10;initSetup();bindSetup();&#10;$(&quot;rows&quot;).addEventListener(&quot;change&quot;,onRowChange);&#10;[&quot;rows&quot;,&quot;svg&quot;].forEach(id=&gt;{$(id).addEventListener(&quot;mouseover&quot;,e=&gt;{const t=e.target.closest(&quot;[data-slot]&quot;);if(t)hl(t.dataset.slot,true);});$(id).addEventListener(&quot;mouseout&quot;,e=&gt;{const t=e.target.closest(&quot;[data-slot]&quot;);if(t)hl(t.dataset.slot,false);});});&#10;render();&#10;&lt;\/script&gt;&#10;&lt;\/body&gt;&#10;&lt;\/html&gt;\"><\/iframe><\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"class_list":["post-241486","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/global-technology.ch\/de\/wp-json\/wp\/v2\/pages\/241486","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/global-technology.ch\/de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/global-technology.ch\/de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/global-technology.ch\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/global-technology.ch\/de\/wp-json\/wp\/v2\/comments?post=241486"}],"version-history":[{"count":2,"href":"https:\/\/global-technology.ch\/de\/wp-json\/wp\/v2\/pages\/241486\/revisions"}],"predecessor-version":[{"id":241504,"href":"https:\/\/global-technology.ch\/de\/wp-json\/wp\/v2\/pages\/241486\/revisions\/241504"}],"wp:attachment":[{"href":"https:\/\/global-technology.ch\/de\/wp-json\/wp\/v2\/media?parent=241486"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}