{"title":"Home page","description":"\u003cbody\u003e\n\n\n\u003cmeta charset=\"UTF-8\"\u003e\n\u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e\n\u003ctitle\u003eGaggiuino — Profiling espresso control for the Gaggia Classic\u003c\/title\u003e\n\u003clink rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\"\u003e\n\u003clink rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin\u003e\n\u003clink href=\"https:\/\/fonts.googleapis.com\/css2?family=Space+Grotesk:wght@500;700\u0026amp;family=IBM+Plex+Sans:wght@400;500;600\u0026amp;family=IBM+Plex+Mono:wght@500;600\u0026amp;display=swap\" rel=\"stylesheet\"\u003e\n\u003cstyle\u003e\n  :root{\n    --espresso:#14100D;\n    --surface:#1E1712;\n    --surface-2:#291F18;\n    --coral:#EF4E2B;\n    --coral-soft:#ff6b4a;\n    --flow:#34C9C2;\n    --temp:#F5A623;\n    --cream:#F3ECE3;\n    --muted:#A2978C;\n    --line:rgba(243,236,227,.10);\n    --line-strong:rgba(243,236,227,.18);\n    --maxw:1160px;\n    --disp:'Space Grotesk',system-ui,sans-serif;\n    --body:'IBM Plex Sans',system-ui,sans-serif;\n    --mono:'IBM Plex Mono',ui-monospace,monospace;\n  }\n  *{box-sizing:border-box;margin:0;padding:0}\n  html{scroll-behavior:smooth}\n  body{\n    background:var(--espresso);\n    color:var(--cream);\n    font-family:var(--body);\n    font-size:17px;\n    line-height:1.6;\n    -webkit-font-smoothing:antialiased;\n    overflow-x:hidden;\n  }\n  a{color:inherit;text-decoration:none}\n  img{max-width:100%;display:block}\n  .wrap{max-width:var(--maxw);margin:0 auto;padding:0 24px}\n  .section{padding:96px 0}\n  .eyebrow{\n    font-family:var(--mono);\n    font-size:.72rem;letter-spacing:.22em;text-transform:uppercase;\n    color:var(--coral);font-weight:600;\n  }\n  h1,h2,h3{font-family:var(--disp);line-height:1.05;font-weight:700;letter-spacing:-.01em}\n  .muted{color:var(--muted)}\n\n  \/* ---------- NAV ---------- *\/\n  header{\n    position:sticky;top:0;z-index:50;\n    backdrop-filter:blur(14px);\n    background:rgba(20,16,13,.72);\n    border-bottom:1px solid var(--line);\n  }\n  .nav{display:flex;align-items:center;justify-content:space-between;height:72px}\n  .nav-logo img{height:30px;width:auto}\n  .nav-links{display:flex;gap:30px;align-items:center}\n  .nav-links a{font-size:.95rem;color:var(--muted);transition:color .2s}\n  .nav-links a:hover{color:var(--cream)}\n  .cart{\n    font-family:var(--mono);font-size:.85rem;font-weight:600;\n    border:1px solid var(--line-strong);border-radius:999px;\n    padding:8px 16px;color:var(--cream);transition:border-color .2s,background .2s;\n  }\n  .cart:hover{border-color:var(--coral);background:rgba(239,78,43,.08)}\n  .menu-btn{display:none;background:none;border:0;color:var(--cream);font-size:1.5rem;cursor:pointer}\n\n  \/* ---------- BUTTONS ---------- *\/\n  .btn{\n    display:inline-flex;align-items:center;gap:10px;\n    font-family:var(--body);font-weight:600;font-size:1rem;\n    padding:15px 26px;border-radius:10px;cursor:pointer;border:1px solid transparent;\n    transition:transform .15s ease, background .2s, border-color .2s;\n  }\n  .btn-primary{background:var(--coral);color:#fff}\n  .btn-primary:hover{background:var(--coral-soft);transform:translateY(-2px)}\n  .btn-ghost{border-color:var(--line-strong);color:var(--cream)}\n  .btn-ghost:hover{border-color:var(--cream);transform:translateY(-2px)}\n\n  \/* ---------- HERO ---------- *\/\n  .hero{position:relative;padding:72px 0 96px;overflow:hidden}\n  .hero::before{\n    content:\"\";position:absolute;inset:0;z-index:0;\n    background:radial-gradient(900px 520px at 78% 18%, rgba(239,78,43,.16), transparent 60%);\n    pointer-events:none;\n  }\n  .hero-grid{\n    position:relative;z-index:1;\n    display:grid;grid-template-columns:1.05fr .95fr;gap:64px;align-items:center;\n  }\n  .hero h1{\n    font-size:clamp(2.5rem,5.4vw,4.3rem);margin:22px 0 0;\n  }\n  .hero h1 .accent{color:var(--coral)}\n  .hero .sub{font-size:1.18rem;color:var(--muted);margin:24px 0 34px;max-width:34ch}\n  .hero-cta{display:flex;gap:14px;flex-wrap:wrap}\n  .trustline{\n    font-family:var(--mono);font-size:.78rem;color:var(--muted);\n    margin-top:26px;letter-spacing:.04em;\n  }\n  .trustline b{color:var(--cream);font-weight:600}\n\n  \/* ---------- DEVICE \/ SHOT SCREEN ---------- *\/\n  .device{\n    position:relative;border-radius:26px;padding:14px;\n    background:linear-gradient(160deg,#2c221b,#171210);\n    border:1px solid var(--line-strong);\n    box-shadow:0 40px 90px -40px rgba(0,0,0,.8), inset 0 1px 0 rgba(255,255,255,.05);\n  }\n  .screen{\n    background:radial-gradient(120% 120% at 50% 0%, #1b1410, #100c09);\n    border-radius:16px;border:1px solid rgba(0,0,0,.5);\n    padding:18px 18px 14px;\n  }\n  .screen-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}\n  .live{font-family:var(--mono);font-size:.7rem;letter-spacing:.18em;color:var(--coral);display:flex;align-items:center;gap:7px}\n  .live .dot{width:7px;height:7px;border-radius:50%;background:var(--coral);box-shadow:0 0 10px var(--coral);animation:blink 1.4s infinite}\n  .profile-tag{font-family:var(--mono);font-size:.7rem;color:var(--muted);letter-spacing:.06em}\n  @keyframes blink{0%,100%{opacity:1}50%{opacity:.25}}\n  .screen svg{width:100%;height:auto;display:block}\n  .readouts{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:6px}\n  .ro{background:rgba(255,255,255,.03);border:1px solid var(--line);border-radius:10px;padding:9px 12px}\n  .ro .k{font-family:var(--mono);font-size:.62rem;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}\n  .ro .v{font-family:var(--mono);font-size:1.18rem;font-weight:600;margin-top:2px}\n  .ro.flow .v{color:var(--flow)}\n  .ro.temp .v{color:var(--temp)}\n  .ro.time .v{color:var(--cream)}\n\n  \/* ---------- STATS STRIP ---------- *\/\n  .stats{border-top:1px solid var(--line);border-bottom:1px solid var(--line)}\n  .stats-grid{display:grid;grid-template-columns:repeat(4,1fr)}\n  .stat{padding:34px 22px;border-left:1px solid var(--line)}\n  .stat:first-child{border-left:0}\n  .stat .num{font-family:var(--disp);font-size:2.1rem;font-weight:700}\n  .stat .num.c{color:var(--coral)}\n  .stat .lbl{font-family:var(--mono);font-size:.74rem;letter-spacing:.08em;color:var(--muted);margin-top:6px;text-transform:uppercase}\n\n  \/* ---------- FEATURES ---------- *\/\n  .sec-head{max-width:60ch}\n  .sec-head h2{font-size:clamp(2rem,3.6vw,2.9rem);margin:14px 0 0}\n  .features{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;margin-top:48px}\n  .card{\n    background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:26px;\n    transition:border-color .2s,transform .2s,background .2s;\n  }\n  .card:hover{border-color:var(--line-strong);transform:translateY(-4px);background:var(--surface-2)}\n  .card .ic{width:42px;height:42px;border-radius:10px;display:grid;place-items:center;margin-bottom:18px;background:rgba(239,78,43,.12)}\n  .card .ic svg{width:22px;height:22px;stroke:var(--coral);fill:none;stroke-width:1.8}\n  .card h3{font-size:1.2rem;margin-bottom:8px}\n  .card p{color:var(--muted);font-size:.97rem}\n\n  \/* ---------- FEATURED KIT ---------- *\/\n  .kit{\n    background:linear-gradient(150deg,var(--surface-2),var(--surface));\n    border:1px solid var(--line-strong);border-radius:24px;overflow:hidden;\n    display:grid;grid-template-columns:1.1fr .9fr;\n  }\n  .kit-info{padding:48px}\n  .kit-info h2{font-size:clamp(1.9rem,3.2vw,2.6rem);margin:14px 0 14px}\n  .kit-info .desc{color:var(--muted);margin-bottom:24px;max-width:42ch}\n  .badges{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:28px}\n  .badge{font-family:var(--mono);font-size:.68rem;letter-spacing:.08em;text-transform:uppercase;\n    border:1px solid var(--line-strong);border-radius:6px;padding:6px 10px;color:var(--cream)}\n  .badge.fill{background:var(--coral);border-color:var(--coral);color:#fff}\n  .incl{list-style:none;display:grid;grid-template-columns:1fr 1fr;gap:6px 22px;margin:0 0 30px}\n  .incl li{font-size:.92rem;color:var(--muted);position:relative;padding-left:18px}\n  .incl li::before{content:\"\";position:absolute;left:0;top:.62em;width:7px;height:7px;border-radius:50%;background:var(--coral)}\n  .kit-visual{\n    position:relative;background:radial-gradient(120% 120% at 70% 20%,rgba(239,78,43,.18),transparent 60%),#120d0a;\n    display:grid;place-items:center;padding:40px;border-left:1px solid var(--line);\n  }\n  .kit-visual .price{text-align:center}\n  .kit-visual .price .from{font-family:var(--mono);font-size:.72rem;letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}\n  .kit-visual .price .big{font-family:var(--disp);font-weight:700;font-size:3rem;margin-top:6px}\n  .kit-visual .price .note{font-family:var(--mono);font-size:.7rem;color:var(--muted);margin-top:8px}\n\n  \/* ---------- STEPS ---------- *\/\n  .steps{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;margin-top:48px}\n  .step{padding:28px;border:1px solid var(--line);border-radius:16px;background:var(--surface)}\n  .step .n{font-family:var(--mono);font-size:.78rem;color:var(--coral);font-weight:600;letter-spacing:.1em}\n  .step h3{font-size:1.25rem;margin:14px 0 8px}\n  .step p{color:var(--muted);font-size:.95rem}\n\n  \/* ---------- COMPAT ---------- *\/\n  .compat{text-align:center;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:54px 0}\n  .compat .lbl{font-family:var(--mono);font-size:.74rem;letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}\n  .compat h2{font-size:clamp(1.6rem,3.4vw,2.6rem);margin-top:14px}\n  .compat h2 span{color:var(--coral)}\n\n  \/* ---------- OPEN SOURCE ---------- *\/\n  .os{display:grid;grid-template-columns:1fr 1fr;gap:48px;align-items:center}\n  .os h2{font-size:clamp(1.9rem,3.4vw,2.6rem)}\n  .os p{color:var(--muted);margin-top:18px;max-width:46ch}\n  .os-links{display:flex;flex-wrap:wrap;gap:12px;margin-top:28px}\n  .os-link{display:inline-flex;align-items:center;gap:9px;border:1px solid var(--line-strong);border-radius:10px;padding:12px 18px;font-family:var(--mono);font-size:.85rem;transition:border-color .2s,background .2s}\n  .os-link:hover{border-color:var(--coral);background:rgba(239,78,43,.08)}\n  .os-card{background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:34px;font-family:var(--mono);font-size:.9rem;color:var(--muted)}\n  .os-card .lic{color:var(--coral);font-weight:600;letter-spacing:.06em}\n  .os-card pre{margin-top:16px;line-height:1.7;white-space:pre-wrap}\n  .os-card .cmt{color:rgba(162,151,140,.6)}\n\n  \/* ---------- FOOTER ---------- *\/\n  footer{border-top:1px solid var(--line);padding:54px 0 40px}\n  .foot-top{display:flex;justify-content:space-between;align-items:flex-start;flex-wrap:wrap;gap:28px}\n  .foot-logo img{height:30px}\n  .foot-cols{display:flex;gap:60px;flex-wrap:wrap}\n  .foot-col h4{font-family:var(--mono);font-size:.72rem;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin-bottom:14px;font-weight:600}\n  .foot-col a{display:block;color:var(--cream);font-size:.92rem;margin-bottom:9px;transition:color .2s}\n  .foot-col a:hover{color:var(--coral)}\n  .foot-bottom{margin-top:44px;padding-top:24px;border-top:1px solid var(--line);\n    display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px;\n    font-family:var(--mono);font-size:.74rem;color:var(--muted)}\n\n  :focus-visible{outline:2px solid var(--coral);outline-offset:3px;border-radius:4px}\n\n  \/* ---------- RESPONSIVE ---------- *\/\n  @media (max-width:920px){\n    .hero-grid,.os{grid-template-columns:1fr;gap:44px}\n    .device{max-width:420px;margin:0 auto}\n    .features{grid-template-columns:1fr 1fr}\n    .kit{grid-template-columns:1fr}\n    .kit-visual{border-left:0;border-top:1px solid var(--line)}\n    .stats-grid{grid-template-columns:1fr 1fr}\n    .stat:nth-child(3){border-left:0}\n  }\n  @media (max-width:640px){\n    .section{padding:68px 0}\n    .nav-links{display:none}\n    .menu-btn{display:block}\n    .features,.steps,.incl{grid-template-columns:1fr}\n    .stats-grid{grid-template-columns:1fr 1fr}\n    .foot-cols{gap:36px}\n  }\n  @media (prefers-reduced-motion:reduce){\n    *{animation:none!important;transition:none!important;scroll-behavior:auto}\n  }\n\u003c\/style\u003e\n\n\n\n\u003cheader\u003e\n  \u003cdiv class=\"wrap nav\"\u003e\n    \u003ca class=\"nav-logo\" href=\"#top\" aria-label=\"Gaggiuino home\"\u003e\u003cimg src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjIAAADWCAYAAADLhmjkAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAACHLSURBVHgB7d3fchNHvsDxX\/fITjYhrHTYc24zuThVYLMV8wTId1spMOa8QMwTYJ4A+wkCT4B5gYP5U1t7h\/YJUGoDpOpcRHu1VUs4cvZANsGe6dM9klkD+jM9mhmNpO+nikDskSxLPd2\/\/vdrEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOCYEgDo6zbDevzZp1tay5cSS2hriLD\/rQMx9o9I+8hE9\/\/90fctKZh7LdFnn2wGWl20P7tpq6u6iKn3v92xX+uU+XoAVBOBDAB5celss6aCm7ZGaKZ8SMde25Jfo93Gn77vSI66fzgbylJwXZTaOhG4jH09kTG7v3v4bE8ALBQCGWCB9YOGOx4BzABmp\/Hg2a7koLuxclNEb3sEMO\/ryJtoPe\/gCkB1EcgAC6q7sfq1rQJuTRA0nNS2AcTVrAGEm0aSzz69N1lA9dZBILJ9+sHTuwJg7hHIAAuoF8TInuQr02hIMiq0HDy2\/wwlR7GJb5x5+PyWAJhrBDLAgvnx0rnNQOt7UgyvYCZDENN5b9HvaLF9LSwEBuYagQywQFIFDkZa9r\/3JYj2G\/u9gKS7aad+jk6txTre1KKuyOjAI1Uwk0wnnf70yejnUm6n1G3RR3vHr+Xt64k+2RStr4gxm8MfLwf2tVxgzQwwvwhkgAXSvbzqFvZuDfl2R2J1rfHou5aMe56N8zs24rk59AIbDDUePl0f+vheEOMCqrWhzyFqt\/Hgux0Z91o2V9bs63YjTKFkeC0AZhuBDLAgXlw636xp83jIt9uiX6839jsHklI\/gHDPN3ia5x9LjUar\/cHzjQ9i7ChMLFfTBFT\/ei12pCkO7g19TqaYgLmlBcBCqKn4+pBvdURHV32CGKex\/8wGP8aNdAx83KAgJvHbU3dk1EiMjtd9gpjea7FTR3rJvZbOwAtcjhwAc4lABlgAydoYpQavJdF2tGI\/2xqS4cGMGZhXJpnaGrWmxZhryXNmei02cLJTYwO\/qaTZba7lsc0cQMUQyAALIFrSzYHfULKXNYg51gtmoguxyF0bLO0nwciDZzvvXzdmfU4viJkwM28ykqOSxcofiD\/7dUsAzJ2aAJh7gciVgd+IolySxvWDoa1h3+9urH4z6vtuBKeR1\/ECkdq1o0TN97+stfpSAMwdRmSARaBUOOCrB2UsgO1unHfrU7aHX2GDmAEjOFn119d8uD7HqDUBMHcIZIDFEH7wFSOZ1qL46AUxZmf4FfkGMSd0BnwtFABzh0AGWAwfLHQ1yvwkBZpiECOxxN8O+DKLfYE5RCADLCilpCsFmWYQ42ijfisAFgKBDLAYSlszMu0gJqHVoNEXrzw5AGYDgQywGDoDvhZKzsYGMbHcLTyIcczAhHsdATB3CGSABTBszUj30tmm5MQGMdfHBjGPnm5JwdxRDDJoPYwqfnEzgPKRRwZYAMYolyju6w++0Uvd35IJdTdW7XObW0MvGBDE9AOfbfsi6qLMvvy0dGPosQYeasp8Pfg1mD8LgLnDiAywAIJgeX\/gN1zq\/glHZXpBjOwNvUCp\/feDmB8vr2z1A5\/Q\/l23U0FbcvrwSXKUwgT+7g6yHJY9OIhbAmDuEMgACyA5h2hI6n7RwZ2sAcSLXhC0N+KStqhXH5x\/NCTTcCjLweOsr8U9bilW9wZ+M4ejGABUE4EMsChc6v7BMgUQLoip6dq9EZe0Rb9eH3Sqdjw8h417LU+6X6147ahKXvtycE+GLWBW0a4AmEsEMsCC6B2oqPaHfDsJZnpTPqN1m2G9u7Fys6aDx8m00GBDgxhHx8GeDFeXmnrifoakkIwKLbvXIoODH0ZjgLmmBMDC6G6u1SU+fCKjt153ImN24+iwvfTzYafR6hz8bfNsWDuSsKb1RRuGbI8IYJLHi47WxwUP3Uu\/37QRzR0ZnXG3Exu5HUVvWv\/xx\/95u+vIBVPRZ59sBqK+dut8ZMLXAmB2EcgAC6brtidr81iK4RU4dG2AJHEymhJKOp1kl9PoQOpftLnQ2H\/GtmtgjjG1BCyYZIrJmGuSP+\/Rj+Ra+xhJn6wuTB3E2N+RIAaYfwQywAJqPHy2J7G+Kvllu21nncLpBTNLF4buqvKmDiRW68nvCGDuMbUELLBkascEd8SMXGcyWmxuS+3nnWELe71ez8b5HTuUkmqR70DGBkNBdI01McDiIJABIF23W0mp6zJs588gSdBgbuQ9feOCqzgOduxw8depH+Rei1G7ybQZgIVCIAPgre7mylocy6ZW6qINDkJ5uwjXTteI6SXVi+VbCV7v5TECM\/q1hHWJPtmMlWraoOZL+xrCE+tjOjbwatvX+K19PS0CGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNlEQjygQl5cOtusaX1RjGrauzOU9KdCYwKNB0+pC4EZVRMAU5cEMCq4aYOXZvIFmlUASIVABpiibjOsy+lP3SGJ2wIA8EYgA0xJ9w9nQ1kO7onPQY0AgHdoAVC6ZCSGIAYAJkYgA0xDbzqJIAYAJkQgA5TsxaXzTWFNDADkgkAGKFktMDcFAJALFvsCJep+tbImpr\/FehQjLTFqV2qv2o39zsHY591YNQIAC4hABihRXJOt8cOgZrfx8NmOAADGYmoJKJFW6suRFyjZazwgiAGAtAhkgDKZMTuVouiuAABSI5ABylUf9c3Go+9bAgBIjUAGqJBuc60uAIDUCGSAcnVGfvfULyTJAwAPBDJAmdSYQMadgA0ASI1ABihRbNSfR16gpNndWCGYAYCUCGSAEulYWuOvUjvdK6t3Xlw62xQAwEhKAJTKBimPU2X3RWkaD55SFwIzihEZoGyR2hUAQC4IZICSNR5914pF3RZURUcAzCwCGWAKtK7t2L\/agukzBDLALCOQAaagsd8+EB1dFYKZqTPK\/CQAZhaBDDAljf3vO6KX1plmmi5jTEsAzCwCGWCK3MjMmQffbUus1kWl2ZqNvGljGBUDZhhbDoEK6W6urMWxbGmlvrRzHmt2vICzl4p10HjwtCEAZhaBDDAnyE\/jz4i5\/28Pnm0KgJnF1BIwLyLNWhtPysi+AJhpBDLAvKgFLfvfA0FancbDZ3sCYKYRyABzwi0cZgeUBxZXA3OBQAaYI1rXbgmjMumoiKMigDlAIAPMEUZl0jK7SR4fADOPQAaYM\/1RmY5gmI7oeE8AzAUCGWDOJMcfxPqGYDDDaAwwTwhkgDnUePSXfaaYBojNbXYqAfOFQAaYU5yw\/YGO1H7eEQBzhUAGmFMnTtjuCDr2vVhv7HfY0QXMGY4oAOZcd\/NsKHHw2P4zlMXUD2JYFwPMIwIZYAEscDBDEAPMOaaWgAWQNOS2QZfFmmZqE8QA849ABlgQvWBm6cJC7GaKzW3RrwligAXA1BKwgLqXV7ZEqZsyd1NN6kDi6Frj0XNOtQYWBIEMsKB662ZqWyLmpsw85XYj2VGYV7fYmQQsFgIZYMG5gCaOgx07z3xRZm6EhgAGWHQEMgDeSqactL4iRpp2pKYulWSDF2PaYuLbUvtniwAGWGwEMgAG6l463xRl1kSri0lQY5LRmlDK1bF\/DmxN1ZZYvhWj2lJ71SZ4AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOaNEhSu2wzrh58shTpYWlNKQq3U5+9fExvzVzHqwJi4E8dHnf\/44\/+0BVPxt82z4dKRsp+VDrXI56Kl\/s4FsRzEyvxkjHTc51V79Uu70eocSMVRDoF8uHspOvWb5rA64vg+ik3UnpX6YZYRyBTEFXQ5\/cl1W5ib9l1uijd1IMa0IzF3g8O41fjT9x2pmO4fzoayHDxOefmB\/GNpvdFqV\/KGfnHpbLMWBF\/bz2tTxNQzPEXbfs7toyi6+++Pvm9JReRVDmOR+\/ow2i+qHL7cWLmlRV1Je\/3Htbj5m\/9+\/texz3t5dVsruS4ppX3etLpXVu7Z934t7fWNB0+\/SHNdUe+X091Y\/UHSK+y+\/vHS7zcDHX+T+gH6zdXGfnGBd1JHqOCKvY9sHSGh+Klk\/TAvaoJc9Qv7zbeNRuZQ0Tam9jkCsQ3QciDdy6utyMS3f\/fo+b5UxZL9PT1u6OjUr037V2Ve\/9tGXvR28n4b91UjGa3Zh67VdLBlG4KO\/fe+HEa3pxWA5l0Oba\/TlcNvknJog+vfPXy2J7lywaMKJW+qoOdN\/wJcUBxK7gr9vUKfi+X0oasHbkjeVOT3Ox4FWTogY\/14eWUrUMoFw6kD0gHeqR8iY3bzv4cWlxbkwo1O2Er+sS2oj7P1fMdwQY3W99zPSEZCqsDz9wyUTt0zLlp34\/x1OX3K9jzVTsYRmFFC+95su9Gq7sbKTSlRKeVQqTuu116Zcohp2+7awFnmjOsMuHLuyrtMFsS8Lzy+h1yQJJgYgUwOkkZxOfihkIbjfSrpGf9QdgP5vheXzjfFt+dmX3u3uVZIrymtpKHfWH1ig5dbBQQw7wtdoFRWo98rh7UnpZRD97tVoByiIlQwN+XAjdR2r5y\/l3QGChlNe6sX0FxZvUOnYDIEMhM4LvC9RrFsSQOZfv44ZzVlvpYM4tNvtmVKfrx0bjNp6PPtXaWRrCXqfrVSyM9NyuHl1TslBWfvseUw+dlYaDZ4fnn53NTu7bwkAcXpT5+IMZtSFiNbSf1AMJMZgUxGvfUVnz4utcB\/aHsajUh3c82tm9iSDHwWKObJBn1fu6m58hv6t0Ib\/eUezLwthxk\/j1zYn+2mswQLTSt9c9ojrpNI7s1eRyeU8hXa2Zl3BDJZucaj\/J79h1wjUvLITBS9mSR4Wyt7Pj0ZiRHZk+mrJ8FMnj2v6pTD5jRHCFEJ9f7C35mTBBA1\/XiKHR2nkM7OIiCQyaBfYVepsG13e411KQKtMk0rHYtFl\/ZaXdAQ6KBKUx912\/O6JzmoYjmch+kFTGTmFv4mHYuaujflIOaY6+zcY5rJD4GMp\/4q8zwq6470cgu0+v+ejNZ3yhjWTW4wM9liUm0DodKGoJM8N5NWUOpA3GfU+6za\/f+fxNrLjZUdmUBVy+GsTy8gBzqYrZG55cIX9foKZalSna\/KI4+Mh6QRVyrj0GnS+N22wxGtxqPvWgOf\/9L5ZqzNlo0uL4r\/jVXvL6TdkQLFy3o7h+i3XkZOme7GeftZmVCyMK5hN3cl+Hm\/sf9hVs7upi0LkW6KG53KENhpUddtg38rSyKxcsphvNlfzxSKn3pheUUwK9bcyNyZh8+nsAnCz0R1RK9Tc9\/dS1I76jT2ezmjkrrhqBbae6hp7yE3eh2Kr\/7i6Vl4D6uAQMaHZwK4t2JzW2qvdwY1iCf1Gxb3x91gO\/YG82qsJmkcPX5GLot1+zllCgtkekOzZkf8dSRW14Y18sf6ldae+5NUXLF3ry574FleOdzOUg6tLVsOd6uaxRnFS0bm\/nB2v4oZyY8VVUf06wb3x31\/p+tGT3sdj1A8zMJ7WBVMLaXU6wVn2BlijC3wz7bHNR7vazz4bsc9VvzUi9zenCl3zDBF55RZypTXoi369YVxQcz7kopLL11IHu+hH3h6vQeUQ8yIuizpak8xlVRHNFwGXx2ti2f9IO49\/Gh+8vMUiUAmrSyF3siNxgRpqJPHGr8h+iK3N2fNHTNMUY1dxsbeBiOv130b+mONfTv6oJfWxW+dyfEUW3qzUw5zLSuYQUptVnXhb8Y6op21juh3dvyDGWNHN1n4OxaBTAqZCr2SvcbDpxPPb\/afw6fwr\/3zv859Ljnr547JdbdRYUFXlsbe9piyBjHHkmAm1l4NfhCkfw8yfQZ5lsPeguC0wu7mf64JFpsO7lRy8bd\/HWEDkejqJHVEr7MTXRXPRfVxTTO6OQaBTArRkm6Kn46oaFfyEmuv5\/r5UK5Kzvq5Y9JWSJ2U1xWTU8Y7Rb\/ZPV6oN6nGo7+4dT\/pA8\/ktO10PD8DSRb25lkOI+X1XHFUawoWXVi1acZMHVOTTx2RPIdnZ6fUXZ4zikAmhQx5U\/bzahgTtaBl\/5u6J2AL\/peSM6\/3wN70aS\/NO6dMhnU8tpcU70mOYreTIb162hE073KoTK7lsL8uIHU5VEo1BQsvWQtWoemRLB3TRo4nVSedHb\/RzXr02Ztc68l5QyAzRjKc77u9Vke3JUfJkKQxrdQPMPk2IF65Y4y0+jd9qgYv796G1rHv1Eu+Qad7DUex126s14dqPdWFvuUwz9GYvlji1EGakvwDasykepXyonh3CDw6ZmnFsfh0diRgzdlIBDJjHB0d+c3zu4Y854bRsb38P3tcHkqO4qXAIzgwd5PH9P9OwX\/B6whaeTaeUZT2dabW+OMzN7XkMXIx\/vPqjzT5aBdRDsVon\/VaoQCO26VYlYW\/fh2CgzxHY47pYGlPPOoI+\/6tMb00HHlkxrA9\/KYrRWnFyvgEHOlfRxDty1HNd\/tePj9byfXUFwdxK3lMrPdFm1SPyzWnjOeoRePR9y0pQqxSr1PStagz9hrfchjPXznEjOst\/L0wzfxCvQ6BSX29kWLuIzfK3r2y2vaor+py6hfXqW4JPkAgM4bt4V\/0KPe2Ae815Hk7kWSpVP0bP0x18YnRKLeeorux6iqs8b2Ifk6ZSSs430qql723GL65aMbRRr70iGPsUGucT2D4nmmVQ1SVyxSd+giQsIzs46NoZbxG2I3PlL4nN72kPTYmxEoRyAzB1NI4RvyG8159PFe9Vb\/cMe9OJ3lML+WSU0aJ8vqsYmO+lVmhVOhz+byVQ1SUMW2fhata1M1pnu6sxVz0ut79fgXRkV+QVMQmjnlBIDOez013MHdp2X3ylgTvjkYl00sp5ZFTRunIr4JUpiOzY7HLIapLRS7zc\/ryFqjpZfytUodgebnjc7kYNbUAsOoIZEZIztDxYaS4Qj8F\/ROW041yDFjk7LldN4ecMn6HvxXZ28pTsnPOT0eAkrj7PhaVfqemnU7p1y3TEHpcW2iHINmN6hMAsnh+KAKZEY6OaqEsML9tioOnkbymlybMKaOVzj2jcSW8eRP6XG6DSkZjUCqta7fEI4AOlPqm7F04\/Q6Bz8\/sSPE6HtfW2bk0GIFMnvRMTVWM5JU7xgkGL3L2ml4qOYPlx8vqB5kBR1p7vSdGmZ8EKFHveA7lc7hoXU4flnwg4i9+dUsZHQLl9zM+\/rdffyv4AIEMBvLKfjkid47n9NLxFkNMQCnpClCy5F5Xyme33HapuWXeVLBDEBtGT3NAIDOCUnEoC8oO\/Xr0lkZPH\/lML4ma4Nh6wxwyMFXqyJ0j5JHoLShtVMZ3ZLOMDkHsGSz98sZ8IfgAeWSmyOU9qWlTSOruj2tx8zf\/\/fyvkoFX7hgnGJ07xyc5Xl45ZYrQvbJyr4idA3Fs7p959GxbpqSq5RCzx43Mdi+v7tr7ON3OJHu\/v7x8bvvMw+e3BMiIQGb6QqkYr9wxKY5k8EqOJ29zyuxI5SR5akLJmQ6kCvPeoQA5aDx8esve764OSRX0a6Vv2s7LHikDkBVTS\/iQ8knzn27ayGd6SRvllbQKQMXE6obH1XX57eH0cstg5hHI4B39\/A5h6gcE6Y5k8Nm9VKkD5gB4c6OwXrlljGxxzyMrAhm8IxBJn2HX46Rvz91LE+eUATBdWtd2xGfhrw4KWad1rBbHXlNXxkhDCmZHn\/2mlWsR028DEMiMYIzuyAJJcsco5RFAeOxGEs\/ppSw5ZRQZbYGqSHLLGNn1eEj4cmNlR4qy7BfIKN8gIwvtdz7cx7pGaoUBCGRGqGIEXySv3DFO4HfSt9f0UpacMp45GX6Jj2bi8\/IthxKrUIAKcAt\/PQ+VvJ50qArxsd99pDwPDC7BL\/\/7EckuByCQGcU3ghc10ynyA6XSbZF2PKaVjvlOL\/nmmPDNySCzcgSFZzm0BTEUoCqU8Vv4u1TMFFP\/bCMfoRTNeB0GK+zsGozt1yO5CP7Q5wGhz8VJTztQrVQX95K9hVKQ7lcr7oZKf1Mpab\/IsjhP2d\/XmHTTV945ZZTXTR57NvixMd9qpdJd7HO8wxhJbo6NVZ+HePUkq1QOMX8a+8\/aLzfO39bikUvK1i2RFKIj6ctvvYScVj73alswEIHMCC6Ctw1IRwoq+I0\/PnMFcz3NtS83zu1p0aEUJfAYjenZrunAP4mbnX\/z4ZNTxrjTx1PGGb0HqNDjajnzIF3SuuTUdBPkfY5TRzzK4T\/\/69znaRPRVaocYi4lC3\/jQ7eRIEz3gOCOMpJ+11Na7sR7pcLU1\/emt1tSgH7nMT0Ogx2KqaVxXMH3cerXpswild8IQp58csoEkV+PResZylfjWQ5\/eSMXBKiI3qGS2meKKdTK+HauxrKjsF5ZpmOVfybvY1HgN61kp87\/LBiIQGYM74Ivqikz5sdLv3dTPaFUkU9OmeXljvhZK\/O07UnYcuVVic1iOayCWVkAPosaj\/6y77Pw1978oeTMxEHL53o7+pg+HYWnQPw6Ujo2TC0NQSAzhudOm9nq5fcFKkp\/JMEUpM0pk\/T6lOcw8IyMoNmRKd\/RpsIq4Ll2FMxEYDuzVHRNZHpTJEHNL5Cx9UlxnR3fUfBXH7UEAxHIjFOr+UbBa7OUodI\/d0z5fHLKuAW54kPp3IevC9Erhz4NQEim1GTdVMfn+kjlvP7Hb1dKR+acW7julfE395\/v3dmpx5\/9uiU56x3M6zEK7naJsmNpKAKZMTL18oOg0iMcJ3nnjpmO1DllfEfQkqmrwvJW5KdfDv2C6hkqh4UxgWcSNL91C6P0y1X63rxZjISOWtduyRSDtjiW+z7XFzG9VFOxVwcqltjrNS8aApkUfAt+cm7IDDSOjlfumGlKmVPGO1eN85FfvpppiWK\/TMqcX+OmEg6nNiXn20nwHk2cUb2Fv+qaTIkOlvZ8rs\/77Lcso+A6MH4dtAVDIJNCv+D7NY4FJXXKUz\/YKmxVfq76OWXSXOo9dD0jDX4QLLvKzDM53mwEaUXpJ23seDwktym5wE6J+lyv1eLkCUk6HKqYbc1jf3aWUXYd3Mltrcxy8Njr+gzJRxcNgUwKruB7N46u4d1YrfbR9Euz1cj1c8qM1R+69mvwdXCv6qNoc1sOCxaL8RtRzSH4S06R902K6Hnkx8yb5sLfSPmcAeWE8tmbiTun3Y3zN8V3h6iJp7amaFYQyKSUqXEU2e5urOQSLOgiDjDzXTUf66t2SHg9tz\/GeA0vp80pk6nBd2sZbE8pl2DmjS5s58tclsOCZVo3NcH75cqQnbL1e\/wC9rqnufA304iQnQ7qXl7NHMz0ghizI346jUfPmVYag8y+KbnGsZ9m27OCUzu28DflMLrW+JN\/RZU0rG6aKueEdb1V8yZM\/QBX0bo8EDmzowXpeyj9uerGo+9b4y5NGvz40K3\/8QkqQhvMPHl5+dzumYfPb0kGtrJyP3PHvWFFmGo5\/Kj2TerjJSrENVq2nLngz6Ms2PdrY7Uu\/1ja9dktkhzboZNp5VC8eK5\/mhNnHnzn3mc3BRdK2dwZUEY98XuMnYbesPfRm2g97X30tg4X0xRfcTS1tUSzhBEZD5lX27sgZDn4oXtl9U6a84m6zbD+46Vzm90r5++5xxWRdbemjOeOlmIqWtsj83per5wyRnyHj526VvobW1n94KYH0ozQ\/P2r\/1xzPXj3GPs+2TJiChuRccosh+46GwB9I8u1J7MYxBzL2PPfltOHT9KUg\/779Limk\/UPofjpNB4+25NFNaWFv+4MqIzlIjy+j5J62t4n71\/wwb2TpQ5Xspem0wZGZLwkZy9dOn\/Njq\/7LdY6ZmTLVnRb\/QMA27Zh6Ig+cdBhbG+Q3kGGYZBcX0yvvrdqXrZ8HlPU\/L2O7fCultSjC7q3gDLVWpnGw6e3bGVzJeMBjm564I6tsNwoy0FyRIA+ETzENlhJzmxxf4oNXN6Xfzm0U1Xv\/G7\/Koe1Ew+aZRP0\/E+Ug9VOskX65HuVbNdW4URlwJgsAffccCNmLzdW79pedenpArzPgDrJ3keB1lty+tNeHSHm5MjdpPdOR1S00OXCB4GMp94w9XlbwHyH9j+wJu4cj5Nl3OfAwwm4baGBzwMKnL\/vD\/t3xOdgzpTTSwm3oNBk6iWf4IIWGwy981kdf1jTaeDzLYci0yiHpXM9\/6zBX08vwPvgI5+gDLhe94MFHo3p03ppux9QlN8p2Dy7LnHwZLKfnQSy+b12ba6yUyk9ppYyaNjeXRxLhee0ze6ok499t4UWPX\/vO73ks6skqQxspSBTTIs+hu15xZl6XrNeDsvWyzGkMr3XBaHX3TfBVHAOP9vWEbG6KlVh5Iab9hKkRiCT0ZlHT7eq2YiYXdvD2xn23WRaqWLbQpPpJR8eOWWcpFLQZl2qF8zYICtan6TnNavlcFpc8FeRYGbiz37euKngqeWWcUGu5y7KQrggxr0P8EIgMwHXiFSnh6dctsz1cY1HvKxTrS95q4Rtof1svB2Ph4jv+Se9YCa6IFU5z8YFH\/r1hTze2+qVw\/hqFYOYYxUIZghihomm97kkC661mVIdodw6vGsEMdkQyEwoqRR7kXxHpkWpfdGvvugHBCNp8U3BXs62UN\/ppSznn\/SmmaL1WKY5gtFv6G3w0djv5DZCVIlyaNzC7aMLs5D3ovd+yQ0pW\/IeEcQM4+qw6R4qmXR41kseGWon980i71ybEIFMDnqR\/BQaSFcpulGY+99dTdMoep+46pSUbTTT9FKGVPKuATnzwI5glN7ou91ptreZBJzFNPRTL4cPn85UA530fnX0hagyzrFxPe5k2oAgZoxkJ9EUp4Hd59O4\/3S9+DqiVyc0Hjy9QJmYDIFMTt42kLZiLLYhUQexmNtvG44UozDHvHPHlJhtNNP0UsqcMgN\/nm30bQXyReGVlWvkXc\/fBTB2FCDPUZhBZqEcVkmv0Xp2NSkHhfTCTwSwTBuk0lv4a8ofLXv\/dfQ7Bv1pyI7k5kSZSKY5Mal53Wg5dd3Ns6FEuiluh1C2PCZ9ydxpO1bmW5dqPWuD0d1cq0t82PV6UDJnW95w58uN8zueGWsPbDDSkBx07WhVrM2WjezdMQihZNdJGsRYvpXg9V7Rgcs4+ZVDSYKyScvhMC83zu3Z6cLUgfbHtTgsYkeUe7\/iWG\/bKVhXDtYkE9U7lDCO70vw834RZaDI96u7sZp+P7nr7NhAVgrQvbL62KvMxnbKrsAEcl13fpbW\/bxUvnmDevW4\/cf9KtQL84ZApiSuobRD2Gu2IQi10p8PuRE67j+xMX\/VLvFWIG224ZUvafyPltZiHa1ppexnNSiwUUkCLPtZ\/aSN6ojRHan9X6vqFVTWcijyc2fRKt\/uZliXo1Nro9+vt+WAe3aBpLiPOv+qG1Rbaq\/aBC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADW\/wOCsRAbILKbjQAAAABJRU5ErkJggg==\" alt=\"Gaggiuino\"\u003e\u003c\/a\u003e\n    \u003cnav class=\"nav-links\" aria-label=\"Primary\"\u003e\n      \u003ca href=\"#features\"\u003eHow it works\u003c\/a\u003e\n      \u003ca href=\"#kit\"\u003eKits\u003c\/a\u003e\n      \u003ca href=\"#opensource\"\u003eOpen source\u003c\/a\u003e\n      \u003ca href=\"https:\/\/gaggiuino.github.io\" target=\"_blank\" rel=\"noopener\"\u003eDocs\u003c\/a\u003e\n    \u003c\/nav\u003e\n    \u003ca class=\"cart\" href=\"\/cart\"\u003eCart · 0\u003c\/a\u003e\n    \u003cbutton class=\"menu-btn\" aria-label=\"Open menu\"\u003e≡\u003c\/button\u003e\n  \u003c\/div\u003e\n\u003c\/header\u003e\n\n\u003cmain id=\"top\"\u003e\n\n  \u003c!-- HERO --\u003e\n  \u003csection class=\"hero\"\u003e\n    \u003cdiv class=\"wrap hero-grid\"\u003e\n      \u003cdiv class=\"hero-copy\"\u003e\n        \u003cspan class=\"eyebrow\"\u003eOpen-source espresso control\u003c\/span\u003e\n        \u003ch1\u003eTurn a Gaggia Classic into a \u003cspan class=\"accent\"\u003eprofiling\u003c\/span\u003e espresso machine.\u003c\/h1\u003e\n        \u003cp class=\"sub\"\u003eGaggiuino adds real pressure and flow profiling, instrument-grade temperature control, and a touchscreen you actually want to use — to the machine you already own.\u003c\/p\u003e\n        \u003cdiv class=\"hero-cta\"\u003e\n          \u003ca class=\"btn btn-primary\" href=\"\/products\/gaggiuino-gen3-kit-set\"\u003eShop the Gen3 Kit →\u003c\/a\u003e\n          \u003ca class=\"btn btn-ghost\" href=\"#features\"\u003eSee how it works\u003c\/a\u003e\n        \u003c\/div\u003e\n        \u003cp class=\"trustline\"\u003e\u003cb\u003ePlug \u0026amp; Play\u003c\/b\u003e · PCB \u0026amp; screen pre-programmed · \u003cb\u003eOpen source\u003c\/b\u003e\u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003c!-- SIGNATURE: live shot screen --\u003e\n      \u003cdiv class=\"device\"\u003e\n        \u003cdiv class=\"screen\"\u003e\n          \u003cdiv class=\"screen-top\"\u003e\n            \u003cspan class=\"live\"\u003e\u003cspan class=\"dot\"\u003e\u003c\/span\u003eLIVE SHOT\u003c\/span\u003e\n            \u003cspan class=\"profile-tag\"\u003ePROFILE · 9-BAR CLASSIC\u003c\/span\u003e\n          \u003c\/div\u003e\n          \u003csvg id=\"shotsvg\" viewbox=\"0 0 360 300\" role=\"img\" aria-label=\"Live espresso shot: pressure, flow and temperature plotted over time\"\u003e\n            \u003cdefs\u003e\n              \u003cclippath id=\"reveal\"\u003e\u003crect id=\"revealRect\" x=\"32\" y=\"180\" width=\"0\" height=\"110\"\u003e\u003c\/rect\u003e\u003c\/clippath\u003e\n            \u003c\/defs\u003e\n            \u003c!-- gauge --\u003e\n            \u003cpath id=\"gaugeTrack\" fill=\"none\" stroke=\"rgba(243,236,227,.10)\" stroke-width=\"12\" stroke-linecap=\"round\"\u003e\u003c\/path\u003e\n            \u003cpath id=\"gaugeFill\" fill=\"none\" stroke=\"var(--coral)\" stroke-width=\"12\" stroke-linecap=\"round\"\u003e\u003c\/path\u003e\n            \u003cg id=\"gaugeTicks\" stroke=\"rgba(243,236,227,.22)\" stroke-width=\"2\"\u003e\u003c\/g\u003e\n            \u003cline id=\"needle\" stroke=\"#fff\" stroke-width=\"3\" stroke-linecap=\"round\"\u003e\u003c\/line\u003e\n            \u003ccircle cx=\"180\" cy=\"92\" r=\"6\" fill=\"#fff\"\u003e\u003c\/circle\u003e\n            \u003ctext id=\"presVal\" x=\"180\" y=\"86\" text-anchor=\"middle\" font-family=\"Space Grotesk\" font-weight=\"700\" font-size=\"46\" fill=\"#F3ECE3\"\u003e9.0\u003c\/text\u003e\n            \u003ctext x=\"180\" y=\"112\" text-anchor=\"middle\" font-family=\"IBM Plex Mono\" font-size=\"12\" letter-spacing=\"2\" fill=\"#A2978C\"\u003eBAR\u003c\/text\u003e\n            \u003c!-- graph grid --\u003e\n            \u003cline x1=\"32\" y1=\"180\" x2=\"340\" y2=\"180\" stroke=\"rgba(243,236,227,.06)\" stroke-width=\"1\"\u003e\u003c\/line\u003e\n            \u003cline x1=\"32\" y1=\"235\" x2=\"340\" y2=\"235\" stroke=\"rgba(243,236,227,.06)\" stroke-width=\"1\"\u003e\u003c\/line\u003e\n            \u003cline x1=\"32\" y1=\"290\" x2=\"340\" y2=\"290\" stroke=\"rgba(243,236,227,.12)\" stroke-width=\"1\"\u003e\u003c\/line\u003e\n            \u003c!-- graph lines (clipped reveal) --\u003e\n            \u003cg clip-path=\"url(#reveal)\" fill=\"none\" stroke-width=\"2.4\" stroke-linejoin=\"round\" stroke-linecap=\"round\"\u003e\n              \u003cpolyline id=\"lineTemp\" stroke=\"var(--temp)\" points=\"\"\u003e\u003c\/polyline\u003e\n              \u003cpolyline id=\"lineFlow\" stroke=\"var(--flow)\" points=\"\"\u003e\u003c\/polyline\u003e\n              \u003cpolyline id=\"linePres\" stroke=\"var(--coral)\" points=\"\"\u003e\u003c\/polyline\u003e\n            \u003c\/g\u003e\n            \u003cline id=\"playhead\" y1=\"180\" y2=\"290\" stroke=\"rgba(255,255,255,.35)\" stroke-width=\"1\"\u003e\u003c\/line\u003e\n            \u003ccircle id=\"playdot\" r=\"3.5\" fill=\"#fff\"\u003e\u003c\/circle\u003e\n          \u003c\/svg\u003e\n          \u003cdiv class=\"readouts\"\u003e\n            \u003cdiv class=\"ro flow\"\u003e\n\u003cdiv class=\"k\"\u003eFlow\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e\n\u003cspan id=\"roFlow\"\u003e2.1\u003c\/span\u003e ml\/s\u003c\/div\u003e\n\u003c\/div\u003e\n            \u003cdiv class=\"ro temp\"\u003e\n\u003cdiv class=\"k\"\u003eTemp\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e\n\u003cspan id=\"roTemp\"\u003e93.2\u003c\/span\u003e °C\u003c\/div\u003e\n\u003c\/div\u003e\n            \u003cdiv class=\"ro time\"\u003e\n\u003cdiv class=\"k\"\u003eTime\u003c\/div\u003e\n\u003cdiv class=\"v\"\u003e\n\u003cspan id=\"roTime\"\u003e22\u003c\/span\u003e s\u003c\/div\u003e\n\u003c\/div\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003c!-- STATS --\u003e\n  \u003csection class=\"stats\"\u003e\n    \u003cdiv class=\"wrap stats-grid\"\u003e\n      \u003cdiv class=\"stat\"\u003e\n\u003cdiv class=\"num c\"\u003e0–12\u003c\/div\u003e\n\u003cdiv class=\"lbl\"\u003ebar you script\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"stat\"\u003e\n\u003cdiv class=\"num\"\u003e±0.1°C\u003c\/div\u003e\n\u003cdiv class=\"lbl\"\u003eMPC temperature hold\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"stat\"\u003e\n\u003cdiv class=\"num\"\u003e4.3″\/7″\u003c\/div\u003e\n\u003cdiv class=\"lbl\"\u003etouchscreen options\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"stat\"\u003e\n\u003cdiv class=\"num c\"\u003eOTA\u003c\/div\u003e\n\u003cdiv class=\"lbl\"\u003eupdates over Wi-Fi\u003c\/div\u003e\n\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003c!-- FEATURES --\u003e\n  \u003csection class=\"section\" id=\"features\"\u003e\n    \u003cdiv class=\"wrap\"\u003e\n      \u003cdiv class=\"sec-head\"\u003e\n        \u003cspan class=\"eyebrow\"\u003eWhat it does\u003c\/span\u003e\n        \u003ch2\u003eControl everything that happens between the puck and the cup.\u003c\/h2\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"features\"\u003e\n        \u003cdiv class=\"card\"\u003e\n          \u003cdiv class=\"ic\"\u003e\u003csvg viewbox=\"0 0 24 24\"\u003e\u003cpath d=\"M3 17c3-6 6-9 9-9s6 3 9 9\"\u003e\u003c\/path\u003e\u003ccircle cx=\"12\" cy=\"8\" r=\"1.4\" fill=\"var(--coral)\" stroke=\"none\"\u003e\u003c\/circle\u003e\u003c\/svg\u003e\u003c\/div\u003e\n          \u003ch3\u003ePressure profiling\u003c\/h3\u003e\n          \u003cp\u003eScript the pump across the shot — ramp, hold, and taper pressure, or pull a straight 9-bar classic.\u003c\/p\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"card\"\u003e\n          \u003cdiv class=\"ic\"\u003e\u003csvg viewbox=\"0 0 24 24\"\u003e\u003cpath d=\"M5 12c4 0 4-5 8-5s4 10 6 10\" stroke=\"var(--flow)\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/div\u003e\n          \u003ch3\u003eFlow control\u003c\/h3\u003e\n          \u003cp\u003eTarget flow instead of pressure for gentler, sweeter extractions that repeat shot after shot.\u003c\/p\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"card\"\u003e\n          \u003cdiv class=\"ic\"\u003e\u003csvg viewbox=\"0 0 24 24\"\u003e\u003cpath d=\"M12 3v9\" stroke=\"var(--temp)\"\u003e\u003c\/path\u003e\u003ccircle cx=\"12\" cy=\"16\" r=\"4\" stroke=\"var(--temp)\"\u003e\u003c\/circle\u003e\u003c\/svg\u003e\u003c\/div\u003e\n          \u003ch3\u003eMPC temperature\u003c\/h3\u003e\n          \u003cp\u003eModel-predictive control holds brew temperature steady to ±0.1 °C, every single shot.\u003c\/p\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"card\"\u003e\n          \u003cdiv class=\"ic\"\u003e\u003csvg viewbox=\"0 0 24 24\"\u003e\u003crect x=\"3\" y=\"4\" width=\"18\" height=\"13\" rx=\"2\"\u003e\u003c\/rect\u003e\u003cpath d=\"M8 21h8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/div\u003e\n          \u003ch3\u003eTouchscreen UI\u003c\/h3\u003e\n          \u003cp\u003eA 4.3″ or 7″ display for live graphs, profiles, and shot history — no laptop in the kitchen.\u003c\/p\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"card\"\u003e\n          \u003cdiv class=\"ic\"\u003e\u003csvg viewbox=\"0 0 24 24\"\u003e\u003ccircle cx=\"12\" cy=\"12\" r=\"8\"\u003e\u003c\/circle\u003e\u003cpath d=\"M12 8v4l3 2\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/div\u003e\n          \u003ch3\u003eBluetooth scales\u003c\/h3\u003e\n          \u003cp\u003ePair BLE scales for shot-by-weight stops and live extraction weight right on the screen.\u003c\/p\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"card\"\u003e\n          \u003cdiv class=\"ic\"\u003e\u003csvg viewbox=\"0 0 24 24\"\u003e\u003cpath d=\"M12 3v10\"\u003e\u003c\/path\u003e\u003cpath d=\"M8 7l4-4 4 4\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/div\u003e\n          \u003ch3\u003eOTA updates\u003c\/h3\u003e\n          \u003cp\u003eFlash once with the included ST-Link, then take new features over Wi-Fi — forever.\u003c\/p\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003c!-- FEATURED KIT --\u003e\n  \u003csection class=\"section\" id=\"kit\" style=\"padding-top:0\"\u003e\n    \u003cdiv class=\"wrap\"\u003e\n      \u003cdiv class=\"kit\"\u003e\n        \u003cdiv class=\"kit-info\"\u003e\n          \u003cspan class=\"eyebrow\"\u003eFeatured kit\u003c\/span\u003e\n          \u003ch2\u003eGaggiuino Gen3 Kit Set\u003c\/h2\u003e\n          \u003cp class=\"desc\"\u003eEverything you need to convert a Gaggia Classic or Classic PRO\/E24. Fully Plug \u0026amp; Play, with the PCB and screen pre-programmed.\u003c\/p\u003e\n          \u003cdiv class=\"badges\"\u003e\n            \u003cspan class=\"badge fill\"\u003ePCB \u0026amp; screen programmed\u003c\/span\u003e\n            \u003cspan class=\"badge\"\u003ePTB sensor fittings\u003c\/span\u003e\n            \u003cspan class=\"badge\"\u003eSTM32U585\u003c\/span\u003e\n          \u003c\/div\u003e\n          \u003cul class=\"incl\"\u003e\n            \u003cli\u003eOfficial V4.0 PCB\u003c\/li\u003e\n            \u003cli\u003e4.3″ or 7″ touchscreen\u003c\/li\u003e\n            \u003cli\u003eLow + high voltage wiring\u003c\/li\u003e\n            \u003cli\u003ePressure sensor + CNC tap block\u003c\/li\u003e\n            \u003cli\u003eK-type thermocouple (M4)\u003c\/li\u003e\n            \u003cli\u003eSSR 40DA\u003c\/li\u003e\n            \u003cli\u003eUSB ST-Link tool\u003c\/li\u003e\n            \u003cli\u003ePTFE pipe, o-rings \u0026amp; screws\u003c\/li\u003e\n          \u003c\/ul\u003e\n          \u003ca class=\"btn btn-primary\" href=\"\/products\/gaggiuino-gen3-kit-set\"\u003eView the kit →\u003c\/a\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"kit-visual\"\u003e\n          \u003cdiv class=\"price\"\u003e\n            \u003cdiv class=\"from\"\u003eConfigure \u0026amp; price\u003c\/div\u003e\n            \u003cdiv class=\"big\"\u003eGen3\u003c\/div\u003e\n            \u003cdiv class=\"note\"\u003e4.3″ \/ 7″ · scales \u0026amp; ToFnLED options\u003c\/div\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003c!-- STEPS --\u003e\n  \u003csection class=\"section\" style=\"padding-top:0\"\u003e\n    \u003cdiv class=\"wrap\"\u003e\n      \u003cdiv class=\"sec-head\"\u003e\n        \u003cspan class=\"eyebrow\"\u003eInstall\u003c\/span\u003e\n        \u003ch2\u003eThree steps from stock to profiling.\u003c\/h2\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"steps\"\u003e\n        \u003cdiv class=\"step\"\u003e\n          \u003cspan class=\"n\"\u003e01\u003c\/span\u003e\n          \u003ch3\u003eBolt in\u003c\/h3\u003e\n          \u003cp\u003eMount the PCB and plumb the pressure sensor — two bolts, thanks to the PTB fittings.\u003c\/p\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"step\"\u003e\n          \u003cspan class=\"n\"\u003e02\u003c\/span\u003e\n          \u003ch3\u003eFlash\u003c\/h3\u003e\n          \u003cp\u003eConnect the included ST-Link once and flash the firmware. Screen and PCB ship pre-programmed.\u003c\/p\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"step\"\u003e\n          \u003cspan class=\"n\"\u003e03\u003c\/span\u003e\n          \u003ch3\u003eProfile\u003c\/h3\u003e\n          \u003cp\u003eDial in pressure, flow, and temperature on the touchscreen — then start pulling.\u003c\/p\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003c!-- COMPAT --\u003e\n  \u003csection class=\"compat\"\u003e\n    \u003cdiv class=\"wrap\"\u003e\n      \u003cdiv class=\"lbl\"\u003eCompatibility\u003c\/div\u003e\n      \u003ch2\u003eBuilt for the Gaggia \u003cspan\u003eClassic\u003c\/span\u003e · Classic \u003cspan\u003ePRO\u003c\/span\u003e · \u003cspan\u003eE24\u003c\/span\u003e\n\u003c\/h2\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003c!-- OPEN SOURCE --\u003e\n  \u003csection class=\"section\" id=\"opensource\"\u003e\n    \u003cdiv class=\"wrap os\"\u003e\n      \u003cdiv\u003e\n        \u003cspan class=\"eyebrow\"\u003eCommunity-built\u003c\/span\u003e\n        \u003ch2\u003eOpen source, made by people who actually pull shots.\u003c\/h2\u003e\n        \u003cp\u003eGaggiuino is free and open under CC BY-NC 4.0. Read the build guides, browse the source, or grab the printed mounting parts from the official supplier.\u003c\/p\u003e\n        \u003cdiv class=\"os-links\"\u003e\n          \u003ca class=\"os-link\" href=\"https:\/\/github.com\/Zer0-bit\/gaggiuino\" target=\"_blank\" rel=\"noopener\"\u003e↗ GitHub\u003c\/a\u003e\n          \u003ca class=\"os-link\" href=\"https:\/\/gaggiuino.github.io\/#\/pcb\/singleboard\" target=\"_blank\" rel=\"noopener\"\u003e↗ Install guide\u003c\/a\u003e\n          \u003ca class=\"os-link\" href=\"https:\/\/gaggiuino.espressio.nl\/\" target=\"_blank\" rel=\"noopener\"\u003e↗ Printed parts · EspressIO\u003c\/a\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"os-card\"\u003e\n        \u003cspan class=\"lic\"\u003eCC BY-NC 4.0\u003c\/span\u003e\n        \u003cpre\u003e\u003cspan class=\"cmt\"\u003e# firmware · ui · hardware\u003c\/span\u003e\ngit clone github.com\/Zer0-bit\/gaggiuino\n\n\u003cspan class=\"cmt\"\u003e# stack\u003c\/span\u003e\nSTM32U585  ·  ESP32\nLVGL touchscreen UI\nReact + TypeScript web\u003c\/pre\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n\u003c\/main\u003e\n\n\u003cfooter\u003e\n  \u003cdiv class=\"wrap\"\u003e\n    \u003cdiv class=\"foot-top\"\u003e\n      \u003cdiv class=\"foot-logo\"\u003e\u003cimg src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjIAAADWCAYAAADLhmjkAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAACHLSURBVHgB7d3fchNHvsDxX\/fITjYhrHTYc24zuThVYLMV8wTId1spMOa8QMwTYJ4A+wkCT4B5gYP5U1t7h\/YJUGoDpOpcRHu1VUs4cvZANsGe6dM9klkD+jM9mhmNpO+nikDskSxLPd2\/\/vdrEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOCYEgDo6zbDevzZp1tay5cSS2hriLD\/rQMx9o9I+8hE9\/\/90fctKZh7LdFnn2wGWl20P7tpq6u6iKn3v92xX+uU+XoAVBOBDAB5celss6aCm7ZGaKZ8SMde25Jfo93Gn77vSI66fzgbylJwXZTaOhG4jH09kTG7v3v4bE8ALBQCGWCB9YOGOx4BzABmp\/Hg2a7koLuxclNEb3sEMO\/ryJtoPe\/gCkB1EcgAC6q7sfq1rQJuTRA0nNS2AcTVrAGEm0aSzz69N1lA9dZBILJ9+sHTuwJg7hHIAAuoF8TInuQr02hIMiq0HDy2\/wwlR7GJb5x5+PyWAJhrBDLAgvnx0rnNQOt7UgyvYCZDENN5b9HvaLF9LSwEBuYagQywQFIFDkZa9r\/3JYj2G\/u9gKS7aad+jk6txTre1KKuyOjAI1Uwk0wnnf70yejnUm6n1G3RR3vHr+Xt64k+2RStr4gxm8MfLwf2tVxgzQwwvwhkgAXSvbzqFvZuDfl2R2J1rfHou5aMe56N8zs24rk59AIbDDUePl0f+vheEOMCqrWhzyFqt\/Hgux0Z91o2V9bs63YjTKFkeC0AZhuBDLAgXlw636xp83jIt9uiX6839jsHklI\/gHDPN3ia5x9LjUar\/cHzjQ9i7ChMLFfTBFT\/ei12pCkO7g19TqaYgLmlBcBCqKn4+pBvdURHV32CGKex\/8wGP8aNdAx83KAgJvHbU3dk1EiMjtd9gpjea7FTR3rJvZbOwAtcjhwAc4lABlgAydoYpQavJdF2tGI\/2xqS4cGMGZhXJpnaGrWmxZhryXNmei02cLJTYwO\/qaTZba7lsc0cQMUQyAALIFrSzYHfULKXNYg51gtmoguxyF0bLO0nwciDZzvvXzdmfU4viJkwM28ykqOSxcofiD\/7dUsAzJ2aAJh7gciVgd+IolySxvWDoa1h3+9urH4z6vtuBKeR1\/ECkdq1o0TN97+stfpSAMwdRmSARaBUOOCrB2UsgO1unHfrU7aHX2GDmAEjOFn119d8uD7HqDUBMHcIZIDFEH7wFSOZ1qL46AUxZmf4FfkGMSd0BnwtFABzh0AGWAwfLHQ1yvwkBZpiECOxxN8O+DKLfYE5RCADLCilpCsFmWYQ42ijfisAFgKBDLAYSlszMu0gJqHVoNEXrzw5AGYDgQywGDoDvhZKzsYGMbHcLTyIcczAhHsdATB3CGSABTBszUj30tmm5MQGMdfHBjGPnm5JwdxRDDJoPYwqfnEzgPKRRwZYAMYolyju6w++0Uvd35IJdTdW7XObW0MvGBDE9AOfbfsi6qLMvvy0dGPosQYeasp8Pfg1mD8LgLnDiAywAIJgeX\/gN1zq\/glHZXpBjOwNvUCp\/feDmB8vr2z1A5\/Q\/l23U0FbcvrwSXKUwgT+7g6yHJY9OIhbAmDuEMgACyA5h2hI6n7RwZ2sAcSLXhC0N+KStqhXH5x\/NCTTcCjLweOsr8U9bilW9wZ+M4ejGABUE4EMsChc6v7BMgUQLoip6dq9EZe0Rb9eH3Sqdjw8h417LU+6X6147ahKXvtycE+GLWBW0a4AmEsEMsCC6B2oqPaHfDsJZnpTPqN1m2G9u7Fys6aDx8m00GBDgxhHx8GeDFeXmnrifoakkIwKLbvXIoODH0ZjgLmmBMDC6G6u1SU+fCKjt153ImN24+iwvfTzYafR6hz8bfNsWDuSsKb1RRuGbI8IYJLHi47WxwUP3Uu\/37QRzR0ZnXG3Exu5HUVvWv\/xx\/95u+vIBVPRZ59sBqK+dut8ZMLXAmB2EcgAC6brtidr81iK4RU4dG2AJHEymhJKOp1kl9PoQOpftLnQ2H\/GtmtgjjG1BCyYZIrJmGuSP+\/Rj+Ra+xhJn6wuTB3E2N+RIAaYfwQywAJqPHy2J7G+Kvllu21nncLpBTNLF4buqvKmDiRW68nvCGDuMbUELLBkascEd8SMXGcyWmxuS+3nnWELe71ez8b5HTuUkmqR70DGBkNBdI01McDiIJABIF23W0mp6zJs588gSdBgbuQ9feOCqzgOduxw8depH+Rei1G7ybQZgIVCIAPgre7mylocy6ZW6qINDkJ5uwjXTteI6SXVi+VbCV7v5TECM\/q1hHWJPtmMlWraoOZL+xrCE+tjOjbwatvX+K19PS0CGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNlEQjygQl5cOtusaX1RjGrauzOU9KdCYwKNB0+pC4EZVRMAU5cEMCq4aYOXZvIFmlUASIVABpiibjOsy+lP3SGJ2wIA8EYgA0xJ9w9nQ1kO7onPQY0AgHdoAVC6ZCSGIAYAJkYgA0xDbzqJIAYAJkQgA5TsxaXzTWFNDADkgkAGKFktMDcFAJALFvsCJep+tbImpr\/FehQjLTFqV2qv2o39zsHY591YNQIAC4hABihRXJOt8cOgZrfx8NmOAADGYmoJKJFW6suRFyjZazwgiAGAtAhkgDKZMTuVouiuAABSI5ABylUf9c3Go+9bAgBIjUAGqJBuc60uAIDUCGSAcnVGfvfULyTJAwAPBDJAmdSYQMadgA0ASI1ABihRbNSfR16gpNndWCGYAYCUCGSAEulYWuOvUjvdK6t3Xlw62xQAwEhKAJTKBimPU2X3RWkaD55SFwIzihEZoGyR2hUAQC4IZICSNR5914pF3RZURUcAzCwCGWAKtK7t2L\/agukzBDLALCOQAaagsd8+EB1dFYKZqTPK\/CQAZhaBDDAljf3vO6KX1plmmi5jTEsAzCwCGWCK3MjMmQffbUus1kWl2ZqNvGljGBUDZhhbDoEK6W6urMWxbGmlvrRzHmt2vICzl4p10HjwtCEAZhaBDDAnyE\/jz4i5\/28Pnm0KgJnF1BIwLyLNWhtPysi+AJhpBDLAvKgFLfvfA0FancbDZ3sCYKYRyABzwi0cZgeUBxZXA3OBQAaYI1rXbgmjMumoiKMigDlAIAPMEUZl0jK7SR4fADOPQAaYM\/1RmY5gmI7oeE8AzAUCGWDOJMcfxPqGYDDDaAwwTwhkgDnUePSXfaaYBojNbXYqAfOFQAaYU5yw\/YGO1H7eEQBzhUAGmFMnTtjuCDr2vVhv7HfY0QXMGY4oAOZcd\/NsKHHw2P4zlMXUD2JYFwPMIwIZYAEscDBDEAPMOaaWgAWQNOS2QZfFmmZqE8QA849ABlgQvWBm6cJC7GaKzW3RrwligAXA1BKwgLqXV7ZEqZsyd1NN6kDi6Frj0XNOtQYWBIEMsKB662ZqWyLmpsw85XYj2VGYV7fYmQQsFgIZYMG5gCaOgx07z3xRZm6EhgAGWHQEMgDeSqactL4iRpp2pKYulWSDF2PaYuLbUvtniwAGWGwEMgAG6l463xRl1kSri0lQY5LRmlDK1bF\/DmxN1ZZYvhWj2lJ71SZ4AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOaNEhSu2wzrh58shTpYWlNKQq3U5+9fExvzVzHqwJi4E8dHnf\/44\/+0BVPxt82z4dKRsp+VDrXI56Kl\/s4FsRzEyvxkjHTc51V79Uu70eocSMVRDoF8uHspOvWb5rA64vg+ik3UnpX6YZYRyBTEFXQ5\/cl1W5ib9l1uijd1IMa0IzF3g8O41fjT9x2pmO4fzoayHDxOefmB\/GNpvdFqV\/KGfnHpbLMWBF\/bz2tTxNQzPEXbfs7toyi6+++Pvm9JReRVDmOR+\/ow2i+qHL7cWLmlRV1Je\/3Htbj5m\/9+\/texz3t5dVsruS4ppX3etLpXVu7Z934t7fWNB0+\/SHNdUe+X091Y\/UHSK+y+\/vHS7zcDHX+T+gH6zdXGfnGBd1JHqOCKvY9sHSGh+Klk\/TAvaoJc9Qv7zbeNRuZQ0Tam9jkCsQ3QciDdy6utyMS3f\/fo+b5UxZL9PT1u6OjUr037V2Ve\/9tGXvR28n4b91UjGa3Zh67VdLBlG4KO\/fe+HEa3pxWA5l0Oba\/TlcNvknJog+vfPXy2J7lywaMKJW+qoOdN\/wJcUBxK7gr9vUKfi+X0oasHbkjeVOT3Ox4FWTogY\/14eWUrUMoFw6kD0gHeqR8iY3bzv4cWlxbkwo1O2Er+sS2oj7P1fMdwQY3W99zPSEZCqsDz9wyUTt0zLlp34\/x1OX3K9jzVTsYRmFFC+95su9Gq7sbKTSlRKeVQqTuu116Zcohp2+7awFnmjOsMuHLuyrtMFsS8Lzy+h1yQJJgYgUwOkkZxOfihkIbjfSrpGf9QdgP5vheXzjfFt+dmX3u3uVZIrymtpKHfWH1ig5dbBQQw7wtdoFRWo98rh7UnpZRD97tVoByiIlQwN+XAjdR2r5y\/l3QGChlNe6sX0FxZvUOnYDIEMhM4LvC9RrFsSQOZfv44ZzVlvpYM4tNvtmVKfrx0bjNp6PPtXaWRrCXqfrVSyM9NyuHl1TslBWfvseUw+dlYaDZ4fnn53NTu7bwkAcXpT5+IMZtSFiNbSf1AMJMZgUxGvfUVnz4utcB\/aHsajUh3c82tm9iSDHwWKObJBn1fu6m58hv6t0Ib\/eUezLwthxk\/j1zYn+2mswQLTSt9c9ojrpNI7s1eRyeU8hXa2Zl3BDJZucaj\/J79h1wjUvLITBS9mSR4Wyt7Pj0ZiRHZk+mrJ8FMnj2v6pTD5jRHCFEJ9f7C35mTBBA1\/XiKHR2nkM7OIiCQyaBfYVepsG13e411KQKtMk0rHYtFl\/ZaXdAQ6KBKUx912\/O6JzmoYjmch+kFTGTmFv4mHYuaujflIOaY6+zcY5rJD4GMp\/4q8zwq6470cgu0+v+ejNZ3yhjWTW4wM9liUm0DodKGoJM8N5NWUOpA3GfU+6za\/f+fxNrLjZUdmUBVy+GsTy8gBzqYrZG55cIX9foKZalSna\/KI4+Mh6QRVyrj0GnS+N22wxGtxqPvWgOf\/9L5ZqzNlo0uL4r\/jVXvL6TdkQLFy3o7h+i3XkZOme7GeftZmVCyMK5hN3cl+Hm\/sf9hVs7upi0LkW6KG53KENhpUddtg38rSyKxcsphvNlfzxSKn3pheUUwK9bcyNyZh8+nsAnCz0R1RK9Tc9\/dS1I76jT2ezmjkrrhqBbae6hp7yE3eh2Kr\/7i6Vl4D6uAQMaHZwK4t2JzW2qvdwY1iCf1Gxb3x91gO\/YG82qsJmkcPX5GLot1+zllCgtkekOzZkf8dSRW14Y18sf6ldae+5NUXLF3ry574FleOdzOUg6tLVsOd6uaxRnFS0bm\/nB2v4oZyY8VVUf06wb3x31\/p+tGT3sdj1A8zMJ7WBVMLaXU6wVn2BlijC3wz7bHNR7vazz4bsc9VvzUi9zenCl3zDBF55RZypTXoi369YVxQcz7kopLL11IHu+hH3h6vQeUQ8yIuizpak8xlVRHNFwGXx2ti2f9IO49\/Gh+8vMUiUAmrSyF3siNxgRpqJPHGr8h+iK3N2fNHTNMUY1dxsbeBiOv130b+mONfTv6oJfWxW+dyfEUW3qzUw5zLSuYQUptVnXhb8Y6op21juh3dvyDGWNHN1n4OxaBTAqZCr2SvcbDpxPPb\/afw6fwr\/3zv859Ljnr547JdbdRYUFXlsbe9piyBjHHkmAm1l4NfhCkfw8yfQZ5lsPeguC0wu7mf64JFpsO7lRy8bd\/HWEDkejqJHVEr7MTXRXPRfVxTTO6OQaBTArRkm6Kn46oaFfyEmuv5\/r5UK5Kzvq5Y9JWSJ2U1xWTU8Y7Rb\/ZPV6oN6nGo7+4dT\/pA8\/ktO10PD8DSRb25lkOI+X1XHFUawoWXVi1acZMHVOTTx2RPIdnZ6fUXZ4zikAmhQx5U\/bzahgTtaBl\/5u6J2AL\/peSM6\/3wN70aS\/NO6dMhnU8tpcU70mOYreTIb162hE073KoTK7lsL8uIHU5VEo1BQsvWQtWoemRLB3TRo4nVSedHb\/RzXr02Ztc68l5QyAzRjKc77u9Vke3JUfJkKQxrdQPMPk2IF65Y4y0+jd9qgYv796G1rHv1Eu+Qad7DUex126s14dqPdWFvuUwz9GYvlji1EGakvwDasykepXyonh3CDw6ZmnFsfh0diRgzdlIBDJjHB0d+c3zu4Y854bRsb38P3tcHkqO4qXAIzgwd5PH9P9OwX\/B6whaeTaeUZT2dabW+OMzN7XkMXIx\/vPqjzT5aBdRDsVon\/VaoQCO26VYlYW\/fh2CgzxHY47pYGlPPOoI+\/6tMb00HHlkxrA9\/KYrRWnFyvgEHOlfRxDty1HNd\/tePj9byfXUFwdxK3lMrPdFm1SPyzWnjOeoRePR9y0pQqxSr1PStagz9hrfchjPXznEjOst\/L0wzfxCvQ6BSX29kWLuIzfK3r2y2vaor+py6hfXqW4JPkAgM4bt4V\/0KPe2Ae815Hk7kWSpVP0bP0x18YnRKLeeorux6iqs8b2Ifk6ZSSs430qql723GL65aMbRRr70iGPsUGucT2D4nmmVQ1SVyxSd+giQsIzs46NoZbxG2I3PlL4nN72kPTYmxEoRyAzB1NI4RvyG8159PFe9Vb\/cMe9OJ3lML+WSU0aJ8vqsYmO+lVmhVOhz+byVQ1SUMW2fhata1M1pnu6sxVz0ut79fgXRkV+QVMQmjnlBIDOez013MHdp2X3ylgTvjkYl00sp5ZFTRunIr4JUpiOzY7HLIapLRS7zc\/ryFqjpZfytUodgebnjc7kYNbUAsOoIZEZIztDxYaS4Qj8F\/ROW041yDFjk7LldN4ecMn6HvxXZ28pTsnPOT0eAkrj7PhaVfqemnU7p1y3TEHpcW2iHINmN6hMAsnh+KAKZEY6OaqEsML9tioOnkbymlybMKaOVzj2jcSW8eRP6XG6DSkZjUCqta7fEI4AOlPqm7F04\/Q6Bz8\/sSPE6HtfW2bk0GIFMnvRMTVWM5JU7xgkGL3L2ml4qOYPlx8vqB5kBR1p7vSdGmZ8EKFHveA7lc7hoXU4flnwg4i9+dUsZHQLl9zM+\/rdffyv4AIEMBvLKfjkid47n9NLxFkNMQCnpClCy5F5Xyme33HapuWXeVLBDEBtGT3NAIDOCUnEoC8oO\/Xr0lkZPH\/lML4ma4Nh6wxwyMFXqyJ0j5JHoLShtVMZ3ZLOMDkHsGSz98sZ8IfgAeWSmyOU9qWlTSOruj2tx8zf\/\/fyvkoFX7hgnGJ07xyc5Xl45ZYrQvbJyr4idA3Fs7p959GxbpqSq5RCzx43Mdi+v7tr7ON3OJHu\/v7x8bvvMw+e3BMiIQGb6QqkYr9wxKY5k8EqOJ29zyuxI5SR5akLJmQ6kCvPeoQA5aDx8esve764OSRX0a6Vv2s7LHikDkBVTS\/iQ8knzn27ayGd6SRvllbQKQMXE6obH1XX57eH0cstg5hHI4B39\/A5h6gcE6Y5k8Nm9VKkD5gB4c6OwXrlljGxxzyMrAhm8IxBJn2HX46Rvz91LE+eUATBdWtd2xGfhrw4KWad1rBbHXlNXxkhDCmZHn\/2mlWsR028DEMiMYIzuyAJJcsco5RFAeOxGEs\/ppSw5ZRQZbYGqSHLLGNn1eEj4cmNlR4qy7BfIKN8gIwvtdz7cx7pGaoUBCGRGqGIEXySv3DFO4HfSt9f0UpacMp45GX6Jj2bi8\/IthxKrUIAKcAt\/PQ+VvJ50qArxsd99pDwPDC7BL\/\/7EckuByCQGcU3ghc10ynyA6XSbZF2PKaVjvlOL\/nmmPDNySCzcgSFZzm0BTEUoCqU8Vv4u1TMFFP\/bCMfoRTNeB0GK+zsGozt1yO5CP7Q5wGhz8VJTztQrVQX95K9hVKQ7lcr7oZKf1Mpab\/IsjhP2d\/XmHTTV945ZZTXTR57NvixMd9qpdJd7HO8wxhJbo6NVZ+HePUkq1QOMX8a+8\/aLzfO39bikUvK1i2RFKIj6ctvvYScVj73alswEIHMCC6Ctw1IRwoq+I0\/PnMFcz3NtS83zu1p0aEUJfAYjenZrunAP4mbnX\/z4ZNTxrjTx1PGGb0HqNDjajnzIF3SuuTUdBPkfY5TRzzK4T\/\/69znaRPRVaocYi4lC3\/jQ7eRIEz3gOCOMpJ+11Na7sR7pcLU1\/emt1tSgH7nMT0Ogx2KqaVxXMH3cerXpswild8IQp58csoEkV+PResZylfjWQ5\/eSMXBKiI3qGS2meKKdTK+HauxrKjsF5ZpmOVfybvY1HgN61kp87\/LBiIQGYM74Ivqikz5sdLv3dTPaFUkU9OmeXljvhZK\/O07UnYcuVVic1iOayCWVkAPosaj\/6y77Pw1978oeTMxEHL53o7+pg+HYWnQPw6Ujo2TC0NQSAzhudOm9nq5fcFKkp\/JMEUpM0pk\/T6lOcw8IyMoNmRKd\/RpsIq4Ll2FMxEYDuzVHRNZHpTJEHNL5Cx9UlxnR3fUfBXH7UEAxHIjFOr+UbBa7OUodI\/d0z5fHLKuAW54kPp3IevC9Erhz4NQEim1GTdVMfn+kjlvP7Hb1dKR+acW7julfE395\/v3dmpx5\/9uiU56x3M6zEK7naJsmNpKAKZMTL18oOg0iMcJ3nnjpmO1DllfEfQkqmrwvJW5KdfDv2C6hkqh4UxgWcSNL91C6P0y1X63rxZjISOWtduyRSDtjiW+z7XFzG9VFOxVwcqltjrNS8aApkUfAt+cm7IDDSOjlfumGlKmVPGO1eN85FfvpppiWK\/TMqcX+OmEg6nNiXn20nwHk2cUb2Fv+qaTIkOlvZ8rs\/77Lcso+A6MH4dtAVDIJNCv+D7NY4FJXXKUz\/YKmxVfq76OWXSXOo9dD0jDX4QLLvKzDM53mwEaUXpJ23seDwktym5wE6J+lyv1eLkCUk6HKqYbc1jf3aWUXYd3Mltrcxy8Njr+gzJRxcNgUwKruB7N46u4d1YrfbR9Euz1cj1c8qM1R+69mvwdXCv6qNoc1sOCxaL8RtRzSH4S06R902K6Hnkx8yb5sLfSPmcAeWE8tmbiTun3Y3zN8V3h6iJp7amaFYQyKSUqXEU2e5urOQSLOgiDjDzXTUf66t2SHg9tz\/GeA0vp80pk6nBd2sZbE8pl2DmjS5s58tclsOCZVo3NcH75cqQnbL1e\/wC9rqnufA304iQnQ7qXl7NHMz0ghizI346jUfPmVYag8y+KbnGsZ9m27OCUzu28DflMLrW+JN\/RZU0rG6aKueEdb1V8yZM\/QBX0bo8EDmzowXpeyj9uerGo+9b4y5NGvz40K3\/8QkqQhvMPHl5+dzumYfPb0kGtrJyP3PHvWFFmGo5\/Kj2TerjJSrENVq2nLngz6Ms2PdrY7Uu\/1ja9dktkhzboZNp5VC8eK5\/mhNnHnzn3mc3BRdK2dwZUEY98XuMnYbesPfRm2g97X30tg4X0xRfcTS1tUSzhBEZD5lX27sgZDn4oXtl9U6a84m6zbD+46Vzm90r5++5xxWRdbemjOeOlmIqWtsj83per5wyRnyHj526VvobW1n94KYH0ozQ\/P2r\/1xzPXj3GPs+2TJiChuRccosh+46GwB9I8u1J7MYxBzL2PPfltOHT9KUg\/779Limk\/UPofjpNB4+25NFNaWFv+4MqIzlIjy+j5J62t4n71\/wwb2TpQ5Xspem0wZGZLwkZy9dOn\/Njq\/7LdY6ZmTLVnRb\/QMA27Zh6Ig+cdBhbG+Q3kGGYZBcX0yvvrdqXrZ8HlPU\/L2O7fCultSjC7q3gDLVWpnGw6e3bGVzJeMBjm564I6tsNwoy0FyRIA+ETzENlhJzmxxf4oNXN6Xfzm0U1Xv\/G7\/Koe1Ew+aZRP0\/E+Ug9VOskX65HuVbNdW4URlwJgsAffccCNmLzdW79pedenpArzPgDrJ3keB1lty+tNeHSHm5MjdpPdOR1S00OXCB4GMp94w9XlbwHyH9j+wJu4cj5Nl3OfAwwm4baGBzwMKnL\/vD\/t3xOdgzpTTSwm3oNBk6iWf4IIWGwy981kdf1jTaeDzLYci0yiHpXM9\/6zBX08vwPvgI5+gDLhe94MFHo3p03ppux9QlN8p2Dy7LnHwZLKfnQSy+b12ba6yUyk9ppYyaNjeXRxLhee0ze6ok499t4UWPX\/vO73ks6skqQxspSBTTIs+hu15xZl6XrNeDsvWyzGkMr3XBaHX3TfBVHAOP9vWEbG6KlVh5Iab9hKkRiCT0ZlHT7eq2YiYXdvD2xn23WRaqWLbQpPpJR8eOWWcpFLQZl2qF8zYICtan6TnNavlcFpc8FeRYGbiz37euKngqeWWcUGu5y7KQrggxr0P8EIgMwHXiFSnh6dctsz1cY1HvKxTrS95q4Rtof1svB2Ph4jv+Se9YCa6IFU5z8YFH\/r1hTze2+qVw\/hqFYOYYxUIZghihomm97kkC661mVIdodw6vGsEMdkQyEwoqRR7kXxHpkWpfdGvvugHBCNp8U3BXs62UN\/ppSznn\/SmmaL1WKY5gtFv6G3w0djv5DZCVIlyaNzC7aMLs5D3ovd+yQ0pW\/IeEcQM4+qw6R4qmXR41kseGWon980i71ybEIFMDnqR\/BQaSFcpulGY+99dTdMoep+46pSUbTTT9FKGVPKuATnzwI5glN7ou91ptreZBJzFNPRTL4cPn85UA530fnX0hagyzrFxPe5k2oAgZoxkJ9EUp4Hd59O4\/3S9+DqiVyc0Hjy9QJmYDIFMTt42kLZiLLYhUQexmNtvG44UozDHvHPHlJhtNNP0UsqcMgN\/nm30bQXyReGVlWvkXc\/fBTB2FCDPUZhBZqEcVkmv0Xp2NSkHhfTCTwSwTBuk0lv4a8ofLXv\/dfQ7Bv1pyI7k5kSZSKY5Mal53Wg5dd3Ns6FEuiluh1C2PCZ9ydxpO1bmW5dqPWuD0d1cq0t82PV6UDJnW95w58uN8zueGWsPbDDSkBx07WhVrM2WjezdMQihZNdJGsRYvpXg9V7Rgcs4+ZVDSYKyScvhMC83zu3Z6cLUgfbHtTgsYkeUe7\/iWG\/bKVhXDtYkE9U7lDCO70vw834RZaDI96u7sZp+P7nr7NhAVgrQvbL62KvMxnbKrsAEcl13fpbW\/bxUvnmDevW4\/cf9KtQL84ZApiSuobRD2Gu2IQi10p8PuRE67j+xMX\/VLvFWIG224ZUvafyPltZiHa1ppexnNSiwUUkCLPtZ\/aSN6ojRHan9X6vqFVTWcijyc2fRKt\/uZliXo1Nro9+vt+WAe3aBpLiPOv+qG1Rbaq\/aBC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADW\/wOCsRAbILKbjQAAAABJRU5ErkJggg==\" alt=\"Gaggiuino\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"foot-cols\"\u003e\n        \u003cdiv class=\"foot-col\"\u003e\n          \u003ch4\u003eShop\u003c\/h4\u003e\n          \u003ca href=\"\/products\/gaggiuino-gen3-kit-set\"\u003eGen3 Kit Set\u003c\/a\u003e\n          \u003ca href=\"#kit\"\u003eDual scales PCB\u003c\/a\u003e\n          \u003ca href=\"#kit\"\u003eToFnLED kit\u003c\/a\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"foot-col\"\u003e\n          \u003ch4\u003eLearn\u003c\/h4\u003e\n          \u003ca href=\"https:\/\/gaggiuino.github.io\" target=\"_blank\" rel=\"noopener\"\u003eDocumentation\u003c\/a\u003e\n          \u003ca href=\"https:\/\/gaggiuino.github.io\/#\/pcb\/singleboard\" target=\"_blank\" rel=\"noopener\"\u003eInstall guide\u003c\/a\u003e\n          \u003ca href=\"https:\/\/github.com\/Zer0-bit\/gaggiuino\" target=\"_blank\" rel=\"noopener\"\u003eGitHub\u003c\/a\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"foot-col\"\u003e\n          \u003ch4\u003eParts\u003c\/h4\u003e\n          \u003ca href=\"https:\/\/gaggiuino.espressio.nl\/\" target=\"_blank\" rel=\"noopener\"\u003e3D printed parts\u003c\/a\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"foot-bottom\"\u003e\n      \u003cspan\u003e© 2026 Gaggiuino · Open source under CC BY-NC 4.0\u003c\/span\u003e\n      \u003cspan\u003ePCB colour may vary · Not affiliated with Gaggia\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/footer\u003e\n\n\u003cscript\u003e\n(function(){\n  var reduce = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n  \/\/ ---- geometry helpers ----\n  var CX=180, CY=92, R=70, A0=150, A1=390; \/\/ gauge: 240deg sweep\n  function pol(cx,cy,r,deg){var a=deg*Math.PI\/180;return [cx+r*Math.cos(a), cy+r*Math.sin(a)];}\n  function arc(cx,cy,r,a0,a1){\n    var s=pol(cx,cy,r,a0), e=pol(cx,cy,r,a1);\n    var large=(a1-a0)\u003e180?1:0;\n    return \"M \"+s[0].toFixed(2)+\" \"+s[1].toFixed(2)+\" A \"+r+\" \"+r+\" 0 \"+large+\" 1 \"+e[0].toFixed(2)+\" \"+e[1].toFixed(2);\n  }\n  function angleFor(p){return A0 + (Math.max(0,Math.min(12,p))\/12)*(A1-A0);}\n\n  document.getElementById('gaugeTrack').setAttribute('d', arc(CX,CY,R,A0,A1));\n  \/\/ ticks at 0,3,6,9,12\n  var ticks=document.getElementById('gaugeTicks'), tg=\"\";\n  [0,3,6,9,12].forEach(function(v){\n    var a=angleFor(v), o=pol(CX,CY,R+9,a), i=pol(CX,CY,R+2,a);\n    tg+='\u003cline x1=\"'+i[0].toFixed(1)+'\" y1=\"'+i[1].toFixed(1)+'\" x2=\"'+o[0].toFixed(1)+'\" y2=\"'+o[1].toFixed(1)+'\"\/\u003e';\n  });\n  ticks.innerHTML=tg;\n\n  \/\/ ---- shot data ----\n  var N=140, X0=32, X1=340, Y0=180, Y1=290;\n  function X(i){return X0+(i\/(N-1))*(X1-X0);}\n  function Yp(p){return Y1-(p\/12)*(Y1-Y0);}\n  function Yf(f){return Y1-(f\/8)*(Y1-Y0);}\n  function Yt(t){return Y1-((t-88)\/8)*(Y1-Y0);}\n  var P=[],F=[],T=[];\n  for(var i=0;i\u003cN;i++){\n    var t=i\/(N-1), p,f,tp;\n    if(t\u003c0.16) p=3.2*(t\/0.16);\n    else if(t\u003c0.28) p=3.2-0.7*((t-0.16)\/0.12);\n    else if(t\u003c0.44) p=2.5+6.6*((t-0.28)\/0.16);\n    else if(t\u003c0.74) p=9.1-0.6*((t-0.44)\/0.30);\n    else p=8.5-2.9*((t-0.74)\/0.26);\n    if(t\u003c0.16) f=0.8+1.4*(t\/0.16);\n    else if(t\u003c0.44) f=2.2-1.0*((t-0.16)\/0.28);\n    else f=1.2+1.7*((t-0.44)\/0.56);\n    tp=93+0.7*Math.sin(t*6.28)-(t\u003c0.2?0.7*(0.2-t)\/0.2:0);\n    P.push(p);F.push(Math.max(0,f));T.push(tp);\n  }\n  function pts(arr,Y){var s=\"\";for(var i=0;i\u003cN;i++){s+=X(i).toFixed(1)+\",\"+Y(arr[i]).toFixed(1)+\" \";}return s;}\n  document.getElementById('linePres').setAttribute('points',pts(P,Yp));\n  document.getElementById('lineFlow').setAttribute('points',pts(F,Yf));\n  document.getElementById('lineTemp').setAttribute('points',pts(T,Yt));\n\n  var rect=document.getElementById('revealRect'),\n      needle=document.getElementById('needle'),\n      gFill=document.getElementById('gaugeFill'),\n      presVal=document.getElementById('presVal'),\n      roFlow=document.getElementById('roFlow'),\n      roTemp=document.getElementById('roTemp'),\n      roTime=document.getElementById('roTime'),\n      head=document.getElementById('playhead'),\n      dot=document.getElementById('playdot');\n\n  function frame(prog){\n    var idx=Math.min(N-1, Math.floor(prog*(N-1)));\n    var p=P[idx];\n    rect.setAttribute('width', (prog*(X1-X0)).toFixed(1));\n    var a=angleFor(p), tip=pol(CX,CY,R-6,a);\n    needle.setAttribute('x1',CX);needle.setAttribute('y1',CY);\n    needle.setAttribute('x2',tip[0].toFixed(1));needle.setAttribute('y2',tip[1].toFixed(1));\n    gFill.setAttribute('d', arc(CX,CY,R,A0,Math.max(A0+0.2,a)));\n    presVal.textContent=p.toFixed(1);\n    roFlow.textContent=F[idx].toFixed(1);\n    roTemp.textContent=T[idx].toFixed(1);\n    roTime.textContent=Math.round(prog*36);\n    var hx=X(idx);\n    head.setAttribute('x1',hx);head.setAttribute('x2',hx);\n    dot.setAttribute('cx',hx);dot.setAttribute('cy',Yp(p).toFixed(1));\n  }\n\n  if(reduce){ frame(0.60); return; }\n\n  var DUR=7200, start=null;\n  function loop(ts){\n    if(start===null) start=ts;\n    var prog=((ts-start)%DUR)\/DUR;\n    frame(prog);\n    requestAnimationFrame(loop);\n  }\n  requestAnimationFrame(loop);\n})();\n\u003c\/script\u003e\n\n\u003c\/body\u003e","products":[{"product_id":"tofnled-add-on","title":"ToFnLed - add-on","description":"\u003c!-- ============================================================\n     Gaggiuino Gen3 Kit Set — Shopify product description\n     Paste into the product Description field via the \"\u003c\u003e\" (Edit code) view.\n     Inline styles are used so formatting survives the paste.\n     ============================================================ --\u003e\n\u003cdiv style=\"font-family: -apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif; line-height: 1.6; color: #1a1a1a; max-width: 760px;\"\u003e\n\u003ch2\u003eDescription\u003c\/h2\u003e\n\u003cp\u003eTime of Flight and LED PCB with QWICC connector loom to plug into mating socket on v3.x\/v4.x PCB\u003c\/p\u003e\n\u003cp\u003eInstallation resources can be found\u003cspan\u003e \u003c\/span\u003e\u003ca href=\"https:\/\/gaggiuino.github.io\/#\/\" rel=\"noopener\" target=\"_blank\"\u003eHERE\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e","brand":"Gaggiuino","offers":[{"title":"Default Title","offer_id":44840863072279,"sku":null,"price":1.0,"currency_code":"USD","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0762\/9121\/1287\/files\/20230823_143502-scaled.png?v=1782758716"},{"product_id":"gaggiuino-kit-gaggia-classic-pro","title":"Gen3.5 Software Kit","description":"\u003c!-- ============================================================\n     Gaggiuino Gen3 Kit Set — Shopify product description\n     Paste into the product Description field via the \"\u003c\u003e\" (Edit code) view.\n     Inline styles are used so formatting survives the paste.\n     ============================================================ --\u003e\n\u003cdiv style=\"font-family: -apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif; line-height: 1.6; max-width: 760px;\"\u003e\n\u003ch2 style=\"font-size: 1.4em; margin: 0 0 .4em;\"\u003eDescription\u003c\/h2\u003e\n\u003cp style=\"margin: 0 0 1em;\"\u003eThis software includes all of the parts needed to complete an installation on a \u003cstrong\u003eGaggia Classic\u003c\/strong\u003e or \u003cstrong\u003eGaggia Classic PRO \/ E24\u003c\/strong\u003e.\u003cbr\u003eComes fully \u003cstrong\u003ePlug\u0026amp;Play\u003c\/strong\u003e ready and pre-programmed with the Gaggiuino software\u003c\/p\u003e\n\u003c!-- Highlight badges --\u003e\u003c!-- What's included --\u003e\n\u003ch3 style=\"font-size: 1.15em; border-left: 4px solid #EF4E2B; padding-left: 10px; margin: 1.5em 0 .6em;\"\u003eWhat's included\u003c\/h3\u003e\n\u003cul style=\"margin: 0 0 1.5em; padding-left: 1.25em;\"\u003e\n\u003cli\u003eGaggiuno firmware\u003c\/li\u003e\n\u003cli\u003eOfficial Gaggiuino PCB V4.0\u003c\/li\u003e\n\u003cli\u003e4.3″Touchscreen (Updated)\u003c\/li\u003e\n\u003cli\u003eLow voltage harness\u003c\/li\u003e\n\u003cli\u003eHigh voltage harness\u003c\/li\u003e\n\u003cli\u003ePressure Sensor\u003c\/li\u003e\n\u003cli\u003eThermocouple K M4\u003c\/li\u003e\n\u003cli\u003eSSR 40DA\u003c\/li\u003e\n\u003cli\u003eSTLink v2 (weact)\u003c\/li\u003e\n\u003cli\u003e1 × CNC Pressure tap block\u003c\/li\u003e\n\u003cli\u003e1 × Pressure sensor fitting\u003c\/li\u003e\n\u003cli\u003e1 × M5 pressure block fitting\u003c\/li\u003e\n\u003cli\u003e1 × 8CM PTFE Pipe (enough for 2 attempts)\u003c\/li\u003e\n\u003cli\u003e2 × Pressure block o-rings (red)\u003c\/li\u003e\n\u003cli\u003e2 × Pressure sensor o-rings (white)\u003c\/li\u003e\n\u003cli\u003e2 × M5x25 Stainless socket head screws\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c!-- Options --\u003e\u003c!-- Footer notes --\u003e\n\u003cdiv style=\"border-top: 1px solid #e5e5e5; margin-top: 1.5em; padding-top: 1.25em; font-size: .95em;\"\u003e\n\u003cp style=\"margin: 0 0 .75em;\"\u003eInstallation resources can be found \u003ca href=\"https:\/\/gaggiuino.github.io\/#\/\" style=\"color: #ef4e2b; font-weight: 600;\"\u003eHERE\u003c\/a\u003e.\u003c\/p\u003e\n\u003cp style=\"margin: 0 0 .75em;\"\u003e3D printed parts not included. Those can be purchased separately from \u003ca href=\"https:\/\/espressio.shop\/\"\u003eEspressio(EU)\u003c\/a\u003e or \u003ca href=\"https:\/\/gaggiuino.hudsoncreativegroup.com\/\"\u003eHudson Creative(USA)\u003c\/a\u003e additionally can be self-printed.\u003cbr\u003ePlease reach out on \u003ca href=\"https:\/\/discord.com\/invite\/gaggiuino-890339612441063494\"\u003eDiscord \u003c\/a\u003efor additional information or install help.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Gaggiuino","offers":[{"title":"Gaggia Classic Pro\/E24 \/ 115V","offer_id":45243255193623,"sku":"110V","price":240.0,"currency_code":"USD","in_stock":false},{"title":"Gaggia Classic Pro\/E24 \/ 230V","offer_id":45251086843927,"sku":"230V","price":240.0,"currency_code":"USD","in_stock":false},{"title":"Gaggia Classic \/ 115V","offer_id":45250941157399,"sku":"110V","price":240.0,"currency_code":"USD","in_stock":false},{"title":"Gaggia Classic \/ 230V","offer_id":45251086876695,"sku":"230V","price":240.0,"currency_code":"USD","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0762\/9121\/1287\/files\/Screenshot_2026-08-18_100736.png?v=1787036898"}],"url":"https:\/\/gaggiuino.co\/collections\/frontpage.oembed","provider":"Gaggiuino","version":"1.0","type":"link"}