{"id":18812,"date":"2026-10-27T22:19:30","date_gmt":"2026-10-27T22:19:30","guid":{"rendered":"https:\/\/sofapiano.com\/?page_id=18812"},"modified":"2026-11-04T07:02:39","modified_gmt":"2026-11-04T07:02:39","slug":"home","status":"publish","type":"page","link":"https:\/\/sofapiano.com\/es\/","title":{"rendered":"Inicio"},"content":{"rendered":"\n<span hidden data-spx-mark=\"head-start\"><\/span>\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=Fraunces:ital,opsz,wght@0,9..144,400;0,9..144,600;1,9..144,400;1,9..144,500&#038;family=Inter:wght@400;500;600;700;800&#038;display=swap\">\n<style>\n\/* ===== SPX Design: Grundlagen (gilt f\u00fcr alle neuen Seiten) ===== *\/\n#masthead,#colophon,.elementor-location-header,.elementor-location-footer,.page-header,.entry-title{display:none!important}\n\/* Wei\u00dfe Theme-Fu\u00dfzeile (Hello: Footer-Men\u00fc + \u201eAlle Rechte vorbehalten\u201c) ausblenden \u2013 die Legal-Zeile steht schon im Petrol-Footer *\/\n#site-footer:not(:has(.spx-foot)),footer.site-footer:not(.spx-foot):not(:has(.spx-foot)){display:none!important}\n\/* Theme-Kopf (Logo + Seitentitel + Untertitel) ausblenden \u2013 das SPX-Men\u00fc steht schon oben *\/\n#site-header:not(:has(.spx-top)),header.site-header:not(:has(.spx-top)),.site-header .site-branding{display:none!important}\n.site-main,.page-content,main#content{padding:0!important;margin:0!important;max-width:none!important;width:auto!important}\nbody{background:#FBF8F2}\n.spx-page,.spx-foot{--ink:#1D2427;--dark:#0E1A20;--teal:#14708C;--sky:#6EC1E4;--sun:#FFCF33;--paper:#FBF8F2;--muted:#4B565A;--line:#EFEAE0;width:100vw;margin-left:calc(50% - 50vw);font-family:'Inter','Segoe UI',Roboto,Arial,sans-serif;font-size:16px;line-height:1.6;-webkit-font-smoothing:antialiased}\n.spx-page{background:var(--paper);color:var(--ink);min-height:60vh}\n.spx{--ink:#1D2427;--dark:#0E1A20;--teal:#14708C;--sky:#6EC1E4;--sun:#FFCF33;--paper:#FBF8F2;--muted:#4B565A;--line:#EFEAE0;font-family:'Inter','Segoe UI',Roboto,Arial,sans-serif}\n.spx *,.spx-page .pg *{box-sizing:border-box}\n.spx h1,.spx h2,.spx h3,.spx p,.spx ul,.spx ol{margin:0;padding:0}\n.spx ul,.spx ol{list-style:none}\n.spx a{color:var(--teal);text-decoration:none}\n.spx a:hover{color:#0E5367}\n.spx em{font-style:italic}\n.spx .wrap{max-width:1120px;margin:0 auto;padding:0 24px}\n.spx .btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;min-height:52px;padding:0 26px;border-radius:999px;font-weight:700;font-size:16px;border:none;cursor:pointer;font-family:inherit;text-decoration:none}\n.spx .b-teal{background:var(--teal);color:#fff}.spx .b-teal:hover{color:#fff;background:#0E5367}\n.spx .b-sun{background:var(--sun);color:var(--dark)}.spx .b-sun:hover{color:var(--dark);background:#FFD94F}\n.spx .b-ghost{background:#fff;color:var(--ink);box-shadow:inset 0 0 0 1.5px #D9D2C4}.spx .b-ghost:hover{color:var(--ink);box-shadow:inset 0 0 0 1.5px var(--ink)}\n\/* Seitenkopf *\/\n.spx .a1-head,.spx .pg-head{padding:116px 0 20px;text-align:center}\n.spx .pg-head{padding-bottom:34px}\n.spx .kicker{font-family:'Fraunces',Georgia,serif;font-style:italic;font-size:19px;color:var(--teal);margin-bottom:8px}\n.spx h1{font-family:'Fraunces',Georgia,serif;font-weight:600;font-size:clamp(1.9rem,3.6vw,2.9rem);line-height:1.1;letter-spacing:-1px;color:var(--ink);margin-bottom:14px}\n.spx .a1-head h1{font-size:clamp(1.7rem,3.2vw,2.5rem);margin-bottom:16px}\n.spx h1 em,.spx h2 em{font-weight:500;color:var(--teal)}\n.spx .a1-sub,.spx .sub{font-size:16.5px;line-height:1.55;color:var(--muted);max-width:620px;margin:-4px auto 6px}\n.spx .a1-sub{font-size:16px;max-width:560px;margin:-6px auto 6px}\n\/* \u00dcbungs-\/Tool-B\u00fchne *\/\n.a1-stage,.tool-stage{padding:6px 16px 80px;min-height:60vh}\n.tool-stage{max-width:1100px;margin:0 auto}\n\/* Inhaltsbereiche *\/\n.spx .sec{padding:56px 0}\n.spx .sec+.sec{border-top:1px solid var(--line)}\n.spx .sec-head{text-align:center;max-width:720px;margin:0 auto 32px}\n.spx h2{font-family:'Fraunces',Georgia,serif;font-weight:600;font-size:clamp(1.6rem,2.8vw,2.2rem);line-height:1.12;letter-spacing:-.6px;color:var(--ink);margin-bottom:10px}\n.spx h3{font-size:18px;font-weight:800;color:var(--ink);margin-bottom:6px;line-height:1.3}\n.spx .txt{font-size:16.5px;color:var(--muted)}\n.spx .cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:16px}\n.spx .card{display:flex;flex-direction:column;gap:6px;background:#fff;border-radius:22px;padding:24px;color:var(--ink);box-shadow:0 1px 2px rgba(29,36,39,.04),0 10px 26px rgba(29,36,39,.05)}\na.card:hover{color:var(--ink);box-shadow:inset 0 0 0 1.5px var(--teal),0 10px 26px rgba(29,36,39,.06)}\n.spx .card p{font-size:15px;color:var(--muted)}\n.spx .card .ic{display:flex;width:44px;height:44px;border-radius:13px;align-items:center;justify-content:center;color:var(--dark);margin-bottom:8px;font-size:20px}\n.spx .card .go{margin-top:auto;padding-top:8px;font-weight:700;font-size:14.5px;color:var(--teal)}\n.spx .tag{display:inline-block;font-size:11.5px;font-weight:800;letter-spacing:1.1px;color:var(--teal);text-transform:uppercase}\n\/* Flie\u00dftext (z.B. Rechtliches, Story) *\/\n.spx .prose{max-width:780px;margin:0 auto;background:#fff;border-radius:26px;padding:40px clamp(22px,5vw,56px);font-size:16px;line-height:1.75;color:#33403F;box-shadow:0 1px 2px rgba(29,36,39,.04),0 10px 26px rgba(29,36,39,.05)}\n.spx .prose h2{font-size:clamp(1.35rem,2.2vw,1.65rem);margin:34px 0 10px}\n.spx .prose h3{font-size:17px;margin:24px 0 6px}\n.spx .prose h4{font-size:15.5px;font-weight:800;margin:18px 0 4px}\n.spx .prose h2:first-child,.spx .prose h3:first-child{margin-top:0}\n.spx .prose p{margin:0 0 14px}\n.spx .prose ul,.spx .prose ol{margin:0 0 16px 22px;padding:0}\n.spx .prose ul{list-style:disc}.spx .prose ol{list-style:decimal}\n.spx .prose li{margin:0 0 6px}\n.spx .prose a{text-decoration:underline;text-underline-offset:2px}\n.spx .prose table{width:100%;border-collapse:collapse;margin:0 0 18px;font-size:14.5px}\n.spx .prose th,.spx .prose td{border:1px solid var(--line);padding:8px 10px;text-align:left;vertical-align:top}\n.spx .prose img{max-width:100%;height:auto;border-radius:16px}\n\/* FAQ *\/\n.spx .faq{max-width:780px;margin:0 auto;background:#fff;border-radius:24px;padding:6px 26px;box-shadow:0 1px 2px rgba(29,36,39,.04),0 10px 26px rgba(29,36,39,.05)}\n.spx .faq details{border-bottom:1px solid var(--line)}\n.spx .faq details:last-child{border-bottom:0}\n.spx .faq summary{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:20px 0;cursor:pointer;list-style:none;font-size:17px;font-weight:700;color:var(--ink)}\n.spx .faq summary::-webkit-details-marker{display:none}\n.spx .faq summary::after{content:\"+\";flex-shrink:0;font-size:24px;font-weight:400;color:var(--teal);transition:transform .2s}\n.spx .faq details[open] summary::after{transform:rotate(45deg)}\n.spx .faq .a{padding:0 0 20px;font-size:15.5px;color:var(--muted);line-height:1.7}\n.spx .faq .a p{margin:0 0 10px}\n.spx .faq .a ul{list-style:disc;margin:0 0 10px 20px}\n\/* Anleitung \/ Info (ersetzt die alten Info-Popups) *\/\n.spx .howto{max-width:680px;margin:22px auto 0;background:#fff;border-radius:20px;padding:2px 22px;box-shadow:0 1px 2px rgba(29,36,39,.04),0 10px 26px rgba(29,36,39,.05)}\n.spx .howto summary{display:flex;align-items:center;gap:10px;padding:16px 0;cursor:pointer;list-style:none;font-size:15.5px;font-weight:700;color:var(--ink)}\n.spx .howto summary::-webkit-details-marker{display:none}\n.spx .howto summary::before{content:\"i\";display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:50%;background:var(--sky);color:var(--dark);font-family:'Fraunces',Georgia,serif;font-style:italic;font-weight:600;font-size:14px;flex-shrink:0}\n.spx .howto summary::after{content:\"+\";margin-left:auto;font-size:22px;font-weight:400;color:var(--teal);transition:transform .2s}\n.spx .howto[open] summary::after{transform:rotate(45deg)}\n.spx .howto .a{padding:0 0 18px;font-size:15px;line-height:1.7;color:var(--muted)}\n.spx .howto .a h3{font-size:16px;margin:4px 0 8px}\n.spx .howto .a p{margin:0 0 10px}\n.spx .howto .a ul,.spx .howto .a ol{margin:0 0 10px 20px}\n.spx .howto .a ul{list-style:disc}.spx .howto .a ol{list-style:decimal}\n.spx .howto .a li{margin:0 0 5px}\n.spx .howto .a li p{margin:0}\n\/* Preis-\/Mitgliedschaftskarte *\/\n.spx .plans{display:flex;flex-wrap:wrap;justify-content:center;gap:18px}\n.spx .plan{position:relative;width:100%;max-width:380px;background:#fff;border-radius:26px;padding:30px 28px;box-shadow:0 1px 2px rgba(29,36,39,.04),0 14px 34px rgba(29,36,39,.07);text-align:left}\n.spx .plan.hot{background:var(--dark);color:#DCE6E9}\n.spx .plan .pname{font-family:'Fraunces',Georgia,serif;font-size:28px;font-weight:600;color:var(--ink);margin:0 0 4px}\n.spx .plan.hot .pname{color:#fff}\n.spx .plan .price{font-size:20px;font-weight:800;color:var(--teal);margin:0 0 16px}\n.spx .plan.hot .price{color:var(--sun)}\n.spx .plan .note{font-size:13px;color:var(--muted);margin:10px 0 0}\n.spx .plan.hot .note{color:#9FB2BA}\n.spx .plan ul.feat{list-style:none;margin:18px 0 0;padding:16px 0 0;border-top:1px solid var(--line)}\n.spx .plan.hot ul.feat{border-top-color:#22363F}\n.spx .plan ul.feat li{position:relative;padding:0 0 0 28px;margin:0 0 10px;font-size:15.5px}\n.spx .plan ul.feat li::before{content:\"\u2713\";position:absolute;left:0;top:0;width:20px;height:20px;border-radius:50%;background:#E3F5FC;color:var(--teal);font-size:12px;font-weight:800;display:flex;align-items:center;justify-content:center}\n.spx .plan.hot ul.feat li::before{background:rgba(255,207,51,.18);color:var(--sun)}\n.spx .plan .buy input[type=submit],.spx .plan .buy button,.spx .plan .buy .swpm-payment-button input{display:inline-flex;align-items:center;justify-content:center;min-height:50px;padding:0 28px;border-radius:999px;border:0;background:var(--sun);color:var(--dark);font:inherit;font-weight:800;cursor:pointer}\n\/* Sprach-Tabs (Rechtstexte) *\/\n.spx .ltabs{max-width:780px;margin:0 auto}\n.spx .ltabs>input{position:absolute;opacity:0;pointer-events:none}\n.spx .ltabs .lt-bar{display:inline-flex;gap:4px;background:#fff;border-radius:999px;padding:5px;box-shadow:inset 0 0 0 1px #E5E0D6;margin:0 0 18px}\n.spx .ltabs .lt-bar label{cursor:pointer;padding:9px 18px;border-radius:999px;font-size:14px;font-weight:700;color:var(--muted)}\n.spx .ltabs .lt-p{display:none}\n.spx .ltabs #lt-en:checked~.lt-bar label[for=lt-en],.spx .ltabs #lt-de:checked~.lt-bar label[for=lt-de],.spx .ltabs #lt-es:checked~.lt-bar label[for=lt-es]{background:var(--dark);color:#fff}\n.spx .ltabs #lt-en:checked~.lt-panels .p-en,.spx .ltabs #lt-de:checked~.lt-panels .p-de,.spx .ltabs #lt-es:checked~.lt-panels .p-es{display:block}\n.spx .prose h1{font-family:'Fraunces',Georgia,serif;font-size:clamp(1.6rem,2.6vw,2rem);font-weight:600;margin:0 0 16px;letter-spacing:-.5px}\n.spx .prose hr{border:0;border-top:1px solid var(--line);margin:22px 0}\n\/* Formular-H\u00fclle f\u00fcr Plugins (Login, Registrierung, Kontakt) *\/\n.spx .form-card{max-width:560px;margin:0 auto;background:#fff;border-radius:26px;padding:34px clamp(20px,5vw,40px);box-shadow:0 1px 2px rgba(29,36,39,.04),0 10px 26px rgba(29,36,39,.05)}\n.spx .form-card input[type=text],.spx .form-card input[type=email],.spx .form-card input[type=password],.spx .form-card input[type=tel],.spx .form-card input[type=url],.spx .form-card textarea,.spx .form-card select{width:100%;min-height:48px;padding:10px 14px;border-radius:12px;border:1px solid #DDD6C9;background:#FBF8F2;font:inherit;color:var(--ink)}\n.spx .form-card textarea{min-height:130px}\n.spx .form-card input:focus,.spx .form-card textarea:focus,.spx .form-card select:focus{outline:none;border-color:var(--teal);background:#fff;box-shadow:0 0 0 3px rgba(20,112,140,.15)}\n.spx .form-card label{font-size:14px;font-weight:700;color:var(--ink)}\n.spx .form-card input[type=submit],.spx .form-card button[type=submit],.spx .form-card .swpm-login-form-submit{display:inline-flex;align-items:center;justify-content:center;min-height:50px;padding:0 28px;border-radius:999px;border:0;background:var(--teal);color:#fff;font:inherit;font-weight:700;cursor:pointer}\n.spx .form-card input[type=submit]:hover,.spx .form-card button[type=submit]:hover{background:#0E5367}\n\/* Footer *\/\n.spx-foot{background:var(--dark);color:#C9D6DB;margin-top:0}\n.spx-foot .fi{max-width:1120px;margin:0 auto;padding:56px 24px 28px;display:grid;grid-template-columns:1.4fr repeat(3,1fr);gap:32px}\n.spx-foot .logo{display:flex;align-items:center;gap:16px;font-family:'Fraunces',Georgia,serif;font-size:24px;font-weight:600;color:#fff;letter-spacing:-.3px;text-decoration:none;margin-bottom:12px}\n.spx-foot .logo-dot{width:11px;height:11px;border-radius:50%;background:var(--sun);box-shadow:7px 0 0 var(--sky)}\n.spx-foot .claim{font-size:15px;max-width:300px;color:#9FB2BA}\n.spx-foot .claim em{font-family:'Fraunces',Georgia,serif;color:#fff}\n.spx-foot h4{font-size:12px;font-weight:800;letter-spacing:1.4px;color:#6EC1E4;margin:0 0 14px;text-transform:uppercase}\n.spx-foot ul{list-style:none;margin:0;padding:0}\n.spx-foot li{margin:0 0 9px}\n.spx-foot a{color:#DCE6E9;text-decoration:none;font-size:15px}\n.spx-foot a:hover{color:#fff;text-decoration:underline}\n.spx-foot .fb{max-width:1120px;margin:0 auto;padding:18px 24px 30px;border-top:1px solid #22363F;display:flex;flex-wrap:wrap;justify-content:space-between;gap:10px;font-size:13.5px;color:#7F949C}\n.spx-foot .fb a{font-size:13.5px;color:#9FB2BA}\n@media (max-width:860px){.spx-foot .fi{grid-template-columns:1fr 1fr}.spx-foot .fi>div:first-child{grid-column:1\/-1}}\n@media (max-width:520px){.spx .sec{padding:40px 0}.spx .prose{border-radius:20px}}\n\/* ===== Men\u00fc: Inseln (aktiv) ===== *\/\n.spx .sr{position:absolute;width:1px;height:1px;opacity:0;margin:0;pointer-events:none}\nhtml:not(.spx-member) .spx .mb-only{display:none!important}\nhtml.spx-member .spx .g-only{display:none!important}\nhtml.spx-plus .spx .free-only{display:none!important}\n.spx .a1-head,.spx .pg-head{padding-top:132px}\n.spx .nav{position:fixed;top:18px;left:0;right:0;z-index:999;padding:0 16px}\n.admin-bar .spx .nav{top:50px}\n.spx .nav-in{position:relative;max-width:1200px;margin:0 auto;display:flex;align-items:center;gap:16px}\n.spx .isl{display:flex;align-items:center;gap:4px;height:60px;padding:0 8px;border-radius:999px;background:rgba(14,26,32,.8);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:0 10px 30px rgba(0,0,0,.18),inset 0 0 0 1px rgba(255,255,255,.12);color:#fff}\n.spx .logo{gap:16px;padding:0 26px;font-family:'Fraunces',Georgia,serif;font-size:22px;font-weight:600;letter-spacing:-.3px;color:#fff;white-space:nowrap}\n.spx .logo:hover{color:#fff}\n.spx .logo-dot{display:block;width:11px;height:11px;border-radius:50%;background:var(--sun);box-shadow:7px 0 0 var(--sky)}\n.spx .isl-nav{margin:0 auto}\n.spx .nl{display:inline-flex;align-items:center;gap:8px;height:44px;padding:0 18px;border-radius:999px;font-size:15.5px;font-weight:600;color:#E6F3F7;white-space:nowrap}\n.spx .nl:hover,.spx .dd:hover>.nl,.spx .dd:focus-within>.nl{background:rgba(255,255,255,.12);color:#fff}\n.spx .nl svg{transition:transform .2s}\n.spx .dd{position:relative}\n.spx .dd:hover>.nl svg,.spx .dd:focus-within>.nl svg{transform:rotate(180deg)}\n.spx .nav-in a:focus-visible,.spx .nav-in button:focus-visible,.spx .nav-in summary:focus-visible{outline:2px solid #fff;outline-offset:2px}\n.spx .panel{position:absolute;top:calc(100% + 18px);left:50%;transform:translate(-50%,8px);opacity:0;visibility:hidden;transition:opacity .18s,transform .18s,visibility .18s;background:#fff;color:var(--ink);border-radius:24px;padding:20px;box-shadow:0 24px 60px rgba(14,26,32,.28);z-index:5}\n.spx .panel::before{content:\"\";position:absolute;left:0;right:0;top:-22px;height:22px}\n.spx .dd:hover>.panel,.spx .dd:focus-within>.panel{opacity:1;visibility:visible;transform:translate(-50%,0)}\n.spx .mega{width:580px}\n.spx .pt{margin:0 0 12px;font-size:12px;font-weight:800;letter-spacing:1.3px;color:#6A7477}\n.spx .lvl-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}\n.spx .lvl{display:flex;flex-direction:column;gap:2px;padding:14px;border-radius:16px;background:var(--c);color:var(--f,#0E1A20)}\n.spx .lvl b{font-family:'Fraunces',Georgia,serif;font-size:30px;font-weight:600;line-height:1}\n.spx .lvl small{margin-bottom:10px;font-size:12px;opacity:.85}\n.spx .lvl a{padding:3px 0;font-size:13px;font-weight:700;color:inherit}\n.spx .lvl a:hover{color:inherit;text-decoration:underline}\n.spx .panel-foot{display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px 16px;margin-top:14px;padding-top:12px;border-top:1px solid var(--line);font-size:14px;font-weight:700}\n.spx .prac{width:420px}\n.spx .prac-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}\n.spx .prac-a{display:flex;flex-direction:column;gap:4px;padding:16px;border-radius:16px;background:#E3F5FC;color:var(--dark);font-weight:700}\n.spx .prac-a.g{background:var(--teal);color:#fff}\n.spx .prac-a:hover{color:inherit;opacity:.9}\n.spx .prac-a.g:hover{color:#fff}\n.spx .prac-a small{font-size:12.5px;font-weight:500;opacity:.85}\n.spx .tools-p{width:540px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px}\n.spx .tl{display:grid;grid-template-columns:38px 1fr;column-gap:12px;align-items:center;padding:10px;border-radius:14px;color:var(--ink)}\n.spx .tl:hover{background:#F4F1EA;color:var(--ink)}\n.spx .tl i{grid-row:1 \/ span 2;display:flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:12px;background:var(--c);color:var(--dark)}\n.spx .tl b{display:block;font-size:14.5px;line-height:1.25}\n.spx .tl small{display:block;font-size:12.5px;color:#6A7477}\n.spx .m-only{display:none}\n.spx button.nl{background:none;border:0;margin:0;font-family:inherit;cursor:pointer}\n.spx .tl i{color:var(--f,#0E1A20);font-style:normal}\n.spx .tl i.lv{font-family:'Fraunces',Georgia,serif;font-size:15px;font-weight:600}\n.spx .tl .dk-tag{font-weight:700}\n.spx .ac-l{padding:8px 10px}\n.spx .ac-l svg{width:38px;height:38px;padding:10px;box-sizing:border-box;border-radius:12px;background:#E3F5FC;color:var(--dark)}\n.spx .ac-l.out svg{background:#F4F1EA;color:var(--muted)}\n.spx .more-p{width:280px;display:flex;flex-direction:column;gap:2px;padding:10px}\n.spx .mo{display:flex;flex-direction:column;gap:1px;padding:11px 14px;border-radius:14px;color:var(--ink)}\n.spx .mo:hover{background:#F4F1EA;color:var(--ink)}\n.spx .mo b{font-size:15px;font-weight:700}\n.spx .mo small{font-size:12.5px;color:#6A7477}\n.spx .isl-act{gap:6px;padding:0 8px 0 14px;flex-shrink:0}\n.spx .lang{padding:8px;font-size:13px;font-weight:700;color:#CFEFFB}\n.spx .lang:hover{color:#fff}\n.spx .login{display:inline-flex;align-items:center;height:44px;padding:0 14px;font-size:15.5px;font-weight:600;color:#fff;white-space:nowrap}\n.spx .login:hover{color:#fff}\n.spx .cta{display:inline-flex;align-items:center;height:44px;padding:0 22px;border-radius:999px;background:var(--sun);color:var(--dark);font-size:15.5px;font-weight:700;white-space:nowrap}\n.spx .cta:hover{background:#FFD94F;color:var(--dark)}\n.spx .lvp{position:relative}\n.spx .lvp>summary{display:flex;align-items:center;gap:8px;height:44px;padding:0 14px 0 16px;border-radius:999px;background:var(--sky);color:var(--dark);font-size:15px;font-weight:700;cursor:pointer;list-style:none;white-space:nowrap}\n.spx .lvp>summary::-webkit-details-marker{display:none}\n.spx .lvp>summary svg{transition:transform .2s}\n.spx .lvp[open]>summary svg{transform:rotate(180deg)}\n.spx .lvp .dk-tag:empty::after{content:\"?\"}\n.spx .lvp-p{position:absolute;right:0;top:calc(100% + 18px);z-index:6;width:310px;max-width:calc(100vw - 32px);padding:10px;border-radius:22px;background:#fff;color:var(--ink);box-shadow:0 24px 60px rgba(14,26,32,.3)}\n.spx .lvp-p .pt{padding:6px 12px 0}\n.spx .lvp-p button{all:unset;box-sizing:border-box;cursor:pointer;display:flex;align-items:center;gap:14px;width:100%;padding:10px 12px;border-radius:14px;font-family:inherit}\n.spx .lvp-p button:hover{background:#F7F4EE}\n.spx .lvp-p button[aria-pressed=true]{background:#F4F1EA;box-shadow:inset 0 0 0 1.5px var(--teal)}\n.spx .lv-ic{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:12px;background:var(--c);color:var(--f,#0E1A20);font-family:'Fraunces',Georgia,serif;font-size:16px;font-weight:600}\n.spx .lv-t b{display:block;font-size:15px}\n.spx .lv-t small{display:block;font-size:13px;color:var(--muted)}\n.spx .lvp-p a{display:block;margin-top:6px;padding:12px;border-top:1px solid var(--line);font-size:14px;font-weight:700}\n.spx .gp{display:flex;align-items:center;gap:10px;height:44px;padding:0 14px 0 4px;border-radius:999px;color:#fff;--p:0;white-space:nowrap}\n.spx .gp:hover{background:rgba(255,255,255,.1);color:#fff}\n.spx .gp-ring{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:38px;height:38px;border-radius:50%;background:conic-gradient(var(--sun) calc(var(--p) * 1%),rgba(255,255,255,.2) 0)}\n.spx .gp-in{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:50%;background:#1F3A44;font-size:12px;font-weight:800}\n.spx .gp-txt{display:flex;flex-direction:column;line-height:1.15}\n.spx .gp-top{font-size:13.5px;font-weight:700}\n.spx .gp-bot{font-size:12px;color:#C9D6DB}\n.spx .gp.done .gp-in{background:var(--sun);color:var(--dark)}\n.spx .acct{position:relative}\n.spx .acct>summary{display:flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:50%;background:#fff;cursor:pointer;list-style:none}\n.spx .acct>summary::-webkit-details-marker{display:none}\n.spx .av{display:flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:50%;background:#fff;color:var(--teal);font-size:16px;font-weight:800}\n.spx .acct-p{position:absolute;right:0;top:calc(100% + 18px);z-index:6;display:flex;flex-direction:column;gap:2px;width:320px;max-width:calc(100vw - 32px);padding:10px;border-radius:22px;background:#fff;box-shadow:0 24px 60px rgba(14,26,32,.28)}\n.spx .ac-card{display:flex;flex-direction:column;gap:10px;margin-bottom:4px;padding:14px;border-radius:16px;background:var(--dark);color:#fff}\n.spx .ac-top{display:flex;justify-content:space-between;align-items:center;gap:10px;font-weight:700}\n.spx .ac-badge{padding:3px 10px;border-radius:999px;background:var(--sun);color:var(--dark);font-size:11px;font-weight:800;letter-spacing:.5px}\n.spx .ac-badge.free{background:#2A3A41;color:#C9D3D6}\n.spx .ac-row{display:flex;justify-content:space-between;font-size:13px;color:#C9D3D6}\n.spx .ac-row b{color:#fff}\n.spx .ac-bar{height:8px;border-radius:999px;background:#2A3A41;overflow:hidden}\n.spx .ac-bar i{display:block;height:100%;width:0;background:var(--sun);border-radius:999px;transition:width .3s}\n.spx .ac-note{font-size:12px;color:#C9D3D6}\n.spx .ac-go{display:block;padding:11px;border-radius:12px;background:var(--sky);color:var(--dark);text-align:center;font-size:14px;font-weight:700}\n.spx .ac-go:hover{background:#8DD0EC;color:var(--dark)}\n.spx .ac-l{display:flex;align-items:center;gap:12px;padding:11px 12px;border-radius:12px;color:var(--ink);font-size:14px;font-weight:600}\n.spx .ac-l:hover{background:#F3EFE6;color:var(--ink)}\n.spx .ac-l svg{flex-shrink:0;color:var(--teal)}\n.spx .ac-l.out{color:var(--muted)}.spx .ac-l.out svg{color:var(--muted)}\n.spx .ac-hr{height:1px;margin:4px 8px;background:var(--line)}\n.spx .burger{display:none;flex-direction:column;align-items:center;justify-content:center;gap:5px;width:44px;height:44px;border-radius:50%;background:rgba(255,255,255,.12);cursor:pointer}\n.spx .burger span{display:block;width:18px;height:2px;border-radius:2px;background:#fff;transition:transform .2s}\n.spx .nav-toggle:focus-visible ~ .nav .burger{outline:2px solid #fff;outline-offset:2px}\n@media (max-width:1140px){.spx .nl{padding:0 13px}.spx .logo{padding:0 20px}.spx .nav-in{gap:10px}}\n@media (max-width:1020px){\n .spx .nav-in{justify-content:space-between}\n .spx .burger{display:flex}\n .spx .gp-txt{display:none}\n .spx .gp{padding:0 4px}\n .spx .isl-nav{display:none;position:absolute;top:calc(100% + 12px);left:0;right:0;height:auto;margin:0;flex-direction:column;align-items:stretch;gap:4px;max-height:calc(100vh - 110px);overflow:auto;padding:14px;border-radius:24px;background:#0E1A20}\n .spx .nav-toggle:checked ~ .nav .isl-nav{display:flex}\n .spx .nav-toggle:checked ~ .nav .burger span:first-child{transform:translateY(3.5px) rotate(45deg)}\n .spx .nav-toggle:checked ~ .nav .burger span:last-child{transform:translateY(-3.5px) rotate(-45deg)}\n .spx .isl-nav .nl{display:flex;justify-content:space-between;height:auto;padding:12px 14px;font-size:17px}\n .spx .isl-nav .nl svg{display:none}\n .spx .panel{position:static;opacity:1;visibility:visible;transform:none;width:auto;margin:2px 0 10px;padding:14px;border-radius:18px;box-shadow:none}\n .spx .panel::before{display:none}\n .spx .dd:hover>.panel,.spx .dd:focus-within>.panel{transform:none}\n .spx .mega,.spx .tools-p,.spx .prac{width:auto}\n .spx .lvl-grid{grid-template-columns:repeat(2,minmax(0,1fr))}\n .spx .tools-p{grid-template-columns:minmax(0,1fr)}\n .spx .m-only{display:block;margin-top:6px;padding-top:6px;border-top:1px solid #24404C}\n}\n@media (max-width:640px){\n .spx .login,.spx .lang,.spx .lvp-w{display:none}\n .spx .logo,.spx .isl-act{height:54px}\n .spx .logo{padding:0 18px;font-size:20px;gap:14px}\n .spx .isl-act{padding:0 5px;gap:4px}\n .spx .lvp>summary{padding:0 12px}\n .spx .cta{padding:0 16px;font-size:14.5px}\n .spx .nav-in{gap:8px}\n}\n@media (max-width:400px){.spx .logo{padding:0 14px;font-size:18px}.spx .gp{display:none}}\n\/* ===== Header A: Logo frei links oben, Men\u00fc + Konto in einer Insel ===== *\/\n.spx-top{position:relative}\n.spx .logo-free{position:absolute;top:24px;left:36px;z-index:998;display:flex;align-items:center;gap:24px;height:60px;font-family:'Fraunces',Georgia,serif;font-size:28px;font-weight:600;letter-spacing:-.5px;line-height:1;color:var(--ink);white-space:nowrap;text-decoration:none}\n.spx .logo-free:hover{color:var(--ink)}\n\n.spx .logo-free .logo-dot{display:block;width:15px;height:15px;border-radius:50%;background:var(--sun);box-shadow:10px 0 0 var(--sky)}\n.admin-bar .spx .logo-free{top:24px}\n.spx .nav{pointer-events:none}\n.spx .nav-in>*{pointer-events:auto}\n.spx .logo-free{z-index:1000;cursor:pointer}\n.spx .nav{padding:0 28px}\n.spx .nav-in{justify-content:flex-end;max-width:none}\n.spx .isl-grp{margin:0 0 0 auto;display:flex;align-items:center;gap:2px;height:60px;padding:0 8px;border-radius:999px;background:rgba(15,92,115,.92);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:0 10px 30px rgba(14,26,32,.18),inset 0 0 0 1px rgba(255,255,255,.16);color:#fff}\n.spx .isl-grp .isl{height:auto;padding:0;background:none;box-shadow:none;backdrop-filter:none;-webkit-backdrop-filter:none;border-radius:0}\n.spx .isl-grp .isl-nav{margin:0}\n.spx .isl-grp .isl-act{gap:6px;margin-left:8px;padding-left:14px;border-left:1px solid rgba(255,255,255,.2)}\n.spx .isl-grp .nl{color:#F0F8FB}\n.spx .isl-grp .gp-in{background:#0B4A5C}\n.spx .isl-grp .burger{background:rgba(255,255,255,.14)}\n@media (max-width:1140px){.spx .isl-grp .nl{padding:0 13px}}\n@media (max-width:1020px){\n .spx .nav-in{justify-content:flex-end}\n .spx .isl-grp{margin:0 0 0 auto;padding:0 6px;background:#0F5C73;backdrop-filter:none;-webkit-backdrop-filter:none}\n .spx .isl-grp .isl-nav{position:absolute;top:calc(100% + 12px);left:0;right:0;padding:14px;border-radius:24px;background:#0F5C73;box-shadow:0 24px 60px rgba(14,26,32,.3)}\n .spx .isl-grp .isl-act{margin-left:0;padding-left:0;border-left:0}\n .spx .isl-grp .m-only{border-top-color:rgba(255,255,255,.2)}\n}\n@media (max-width:640px){\n .spx .nav{padding:0 16px}\n .spx .logo-free{top:18px;left:18px;height:54px;gap:18px;font-size:21px}\n .spx .logo-free .logo-dot{width:12px;height:12px;box-shadow:8px 0 0 var(--sky)}\n .spx .isl-grp{height:54px}\n .spx .isl-grp .gp{display:none}\n}\n@media (max-width:360px){.spx .logo-free{font-size:18px;gap:16px}}\n<\/style>\n<style media=\"not all\">\n\/* ===== Level Dock (deaktiviert, bleibt als Sicherung) ===== *\/\n.spx .sr{position:absolute;width:1px;height:1px;opacity:0;margin:0;pointer-events:none}\nhtml:not(.spx-member) .spx .mb-only{display:none!important}\nhtml.spx-member .spx .g-only{display:none!important}\nhtml.spx-plus .spx .free-only{display:none!important}\n.spx .a1-head,.spx .pg-head{padding-top:142px}\n.spx .nav{position:fixed;top:12px;left:0;right:0;z-index:999;padding:0 16px}\n.admin-bar .spx .nav{top:44px}\n.spx .nav-in{position:relative;max-width:1200px;margin:0 auto;border-radius:26px;background:rgba(14,26,32,.82);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:0 12px 34px rgba(0,0,0,.25),inset 0 0 0 1px rgba(255,255,255,.09);color:#fff}\n.spx .dk-row1{display:flex;align-items:center;gap:16px;min-height:58px;padding:7px 8px 7px 22px;border-bottom:1px solid rgba(255,255,255,.08)}\n.spx .dk-row2{display:flex;align-items:center;gap:2px;min-height:44px;padding:3px 10px}\n.spx .logo{display:flex;align-items:center;gap:16px;font-family:'Fraunces',Georgia,serif;font-size:22px;font-weight:600;letter-spacing:-.3px;color:#fff;white-space:nowrap}\n.spx .logo:hover{color:#fff}\n.spx .logo-mark{display:block;width:11px;height:11px;border-radius:50%;background:var(--sun);box-shadow:7px 0 0 var(--sky);font-size:0;line-height:0;overflow:hidden}\n.spx .dk-lv{display:flex;align-items:center;gap:2px;padding:4px;border-radius:999px;background:rgba(255,255,255,.07);box-shadow:inset 0 0 0 1px rgba(255,255,255,.08)}\n.spx .dk-lv-l{padding:0 8px 0 10px;font-size:12px;font-weight:600;color:#9FB2BA;white-space:nowrap}\n.spx .dk-lv button{all:unset;box-sizing:border-box;cursor:pointer;min-width:42px;height:34px;padding:0 10px;border-radius:999px;text-align:center;line-height:34px;font-family:'Inter','Segoe UI',Roboto,Arial,sans-serif;font-size:14px;font-weight:700;color:#D6E2E6;transition:background .15s,color .15s}\n.spx .dk-lv button:hover{background:rgba(255,255,255,.1);color:#fff}\n.spx .dk-lv button[aria-pressed=true]{background:var(--sky);color:var(--dark)}\n.spx .nav-in button:focus-visible,.spx .nav-in a:focus-visible,.spx .nav-in summary:focus-visible{outline:2px solid #fff;outline-offset:2px}\n.spx .dk-lv-m{display:none}\n.spx .nav-right{display:flex;align-items:center;gap:6px;margin-left:auto;flex-shrink:0}\n.spx .lang{padding:8px 10px;border-radius:999px;font-size:13px;font-weight:700;color:#D6E2E6;box-shadow:inset 0 0 0 1px rgba(255,255,255,.2);white-space:nowrap}\n.spx .login{padding:10px 12px;font-size:15px;font-weight:600;color:#fff;white-space:nowrap}\n.spx .lang:hover,.spx .login:hover{color:#fff}\n.spx .cta{padding:12px 20px;border-radius:999px;background:var(--sun);color:var(--dark);font-size:15px;font-weight:700;white-space:nowrap}\n.spx .cta:hover{background:#FFD94F;color:var(--dark)}\n.spx .nl{display:inline-flex;align-items:center;gap:7px;padding:9px 14px;border-radius:999px;font-size:15px;font-weight:600;color:#D6E2E6;white-space:nowrap}\n.spx .nl:hover,.spx .dd:hover>.nl,.spx .dd:focus-within>.nl{background:rgba(255,255,255,.09);color:#fff}\n.spx .nl.hl{background:rgba(110,193,228,.16);color:#fff}\n.spx .nl.hl:hover{background:rgba(110,193,228,.26);color:#fff}\n.spx .dk-tag{display:inline-block;padding:2px 7px;border-radius:999px;background:var(--sky);color:var(--dark);font-size:11.5px;font-weight:800;letter-spacing:.3px}\n.spx .dk-tag:empty{display:none}\n.spx .nl svg{transition:transform .2s}\n.spx .dd{position:relative}\n.spx .dd:hover>.nl svg,.spx .dd:focus-within>.nl svg{transform:rotate(180deg)}\n.spx .panel{position:absolute;top:calc(100% + 12px);left:0;opacity:0;visibility:hidden;transform:translateY(8px);transition:opacity .18s,transform .18s,visibility .18s;background:#fff;color:var(--ink);border-radius:24px;padding:20px;box-shadow:0 24px 60px rgba(14,26,32,.28);z-index:5}\n.spx .panel::before{content:\"\";position:absolute;left:0;right:0;top:-16px;height:16px}\n.spx .dd:hover>.panel,.spx .dd:focus-within>.panel{opacity:1;visibility:visible;transform:none}\n.spx .mega{width:580px}\n.spx .pt{margin:0 0 12px;font-size:12px;font-weight:800;letter-spacing:1.3px;color:#8E979A}\n.spx .lvl-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}\n.spx .lvl{display:flex;flex-direction:column;gap:2px;padding:14px;border-radius:16px;background:var(--c);color:var(--f,#0E1A20)}\n.spx .lvl b{font-family:'Fraunces',Georgia,serif;font-size:30px;font-weight:600;line-height:1}\n.spx .lvl small{margin-bottom:10px;font-size:12px;opacity:.8}\n.spx .lvl a{padding:3px 0;font-size:13px;font-weight:700;color:inherit}\n.spx .lvl a:hover{color:inherit;text-decoration:underline}\n.spx .panel-foot{display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px 16px;margin-top:14px;padding-top:12px;border-top:1px solid var(--line);font-size:14px;font-weight:700}\n.spx .tools-p{width:540px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px}\n.spx .tl{display:grid;grid-template-columns:38px 1fr;column-gap:12px;align-items:center;padding:10px;border-radius:14px;color:var(--ink)}\n.spx .tl:hover{background:#F4F1EA;color:var(--ink)}\n.spx .tl i{grid-row:1 \/ span 2;display:flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:12px;background:var(--c);color:var(--dark)}\n.spx .tl i svg{width:18px;height:18px}\n.spx .tl b{display:block;font-size:14.5px;line-height:1.25}\n.spx .tl small{display:block;font-size:12.5px;color:#6A7477}\n.spx .dk-r2r{display:flex;align-items:center;gap:8px;margin-left:auto}\n.spx .dk-note{font-size:13px;color:#9FB2BA;white-space:nowrap}\n.spx .dk-upg{padding:7px 14px;border-radius:999px;background:var(--sun);color:var(--dark);font-size:13px;font-weight:700;white-space:nowrap}\n.spx .dk-upg:hover{background:#FFD94F;color:var(--dark)}\n.spx .dk-dash{padding:8px 12px;font-size:14px;font-weight:600;color:#C9D6DB;white-space:nowrap}\n.spx .dk-dash:hover{color:#fff}\n.spx .m-only{display:none}\n.spx .gp{display:flex;align-items:center;gap:10px;padding:5px 14px 5px 5px;border-radius:999px;background:rgba(255,255,255,.1);color:#fff;--p:0;white-space:nowrap}\n.spx .gp:hover{color:#fff;background:rgba(255,255,255,.16)}\n.spx .gp-ring{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:34px;height:34px;border-radius:50%;background:conic-gradient(var(--sun) calc(var(--p) * 1%),#4B5A5F 0)}\n.spx .gp-in{display:flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:50%;background:#26343A;font-size:11px;font-weight:700}\n.spx .gp-txt{display:flex;flex-direction:column;line-height:1.15}\n.spx .gp-main{font-size:13px;font-weight:700}\n.spx .gp-sub{font-size:11px;color:#C9D3D6}\n.spx .gp-sep{width:1px;height:24px;background:rgba(255,255,255,.2)}\n.spx .gp-streak{display:flex;align-items:center;gap:4px;font-size:13px;font-weight:700;color:var(--sun)}\n.spx .gp.done{background:var(--sun);color:var(--dark)}\n.spx .gp.done:hover{background:#FFD94F;color:var(--dark)}\n.spx .gp.done .gp-ring{background:var(--dark)}\n.spx .gp.done .gp-in{background:var(--dark);color:var(--sun)}\n.spx .gp.done .gp-sub,.spx .gp.done .gp-streak{color:var(--dark)}\n.spx .gp.done .gp-sep{background:rgba(14,26,32,.25)}\n.spx .acct{position:relative}\n.spx .acct>summary{display:flex;align-items:center;gap:8px;padding:4px 12px 4px 4px;border-radius:999px;background:#fff;color:var(--ink);font-size:14px;font-weight:600;cursor:pointer;list-style:none;white-space:nowrap}\n.spx .acct>summary::-webkit-details-marker{display:none}\n.spx .acct>summary svg{transition:transform .2s}\n.spx .acct[open]>summary svg{transform:rotate(180deg)}\n.spx .av{display:flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:50%;background:var(--teal);color:#fff;font-size:15px;font-weight:700}\n.spx .acct-p{position:absolute;right:0;top:calc(100% + 16px);z-index:6;display:flex;flex-direction:column;gap:2px;width:320px;max-width:calc(100vw - 32px);padding:10px;border-radius:22px;background:#fff;box-shadow:0 24px 60px rgba(14,26,32,.28)}\n.spx .ac-card{display:flex;flex-direction:column;gap:10px;margin-bottom:4px;padding:14px;border-radius:16px;background:var(--dark);color:#fff}\n.spx .ac-top{display:flex;justify-content:space-between;align-items:center;gap:10px;font-weight:700}\n.spx .ac-badge{padding:3px 10px;border-radius:999px;background:var(--sun);color:var(--dark);font-size:11px;font-weight:800;letter-spacing:.5px}\n.spx .ac-badge.free{background:#2A3A41;color:#C9D3D6}\n.spx .ac-row{display:flex;justify-content:space-between;font-size:13px;color:#C9D3D6}\n.spx .ac-row b{color:#fff}\n.spx .ac-bar{height:8px;border-radius:999px;background:#2A3A41;overflow:hidden}\n.spx .ac-bar i{display:block;height:100%;width:0;background:var(--sun);border-radius:999px;transition:width .3s}\n.spx .ac-note{font-size:12px;color:#C9D3D6}\n.spx .ac-go{display:block;padding:11px;border-radius:12px;background:var(--sky);color:var(--dark);text-align:center;font-size:14px;font-weight:700}\n.spx .ac-go:hover{background:#8DD0EC;color:var(--dark)}\n.spx .ac-l{display:flex;align-items:center;gap:12px;padding:11px 12px;border-radius:12px;color:var(--ink);font-size:14px;font-weight:600}\n.spx .ac-l:hover{background:#F3EFE6;color:var(--ink)}\n.spx .ac-l svg{flex-shrink:0;color:var(--teal)}\n.spx .ac-l.out{color:var(--muted)}.spx .ac-l.out svg{color:var(--muted)}\n.spx .ac-hr{height:1px;margin:4px 8px;background:var(--line)}\n.spx .burger{display:none;flex-direction:column;align-items:center;justify-content:center;gap:5px;width:44px;height:44px;border-radius:50%;background:rgba(255,255,255,.1);cursor:pointer}\n.spx .burger span{display:block;width:18px;height:2px;border-radius:2px;background:#fff;transition:transform .2s}\n.spx .nav-toggle:focus-visible ~ .nav .burger{outline:2px solid #fff;outline-offset:2px}\n@media (max-width:1100px){.spx .dk-lv-l,.spx .dk-note{display:none}}\n@media (max-width:1020px){\n .spx .burger{display:flex}\n .spx .nav-in{border-radius:999px}\n .spx .dk-row1{border-bottom:0;padding-left:18px}\n .spx .login,.spx .lang,.spx .dk-r2r .dk-dash{display:none}\n .spx .dk-row2{display:none;position:absolute;top:calc(100% + 10px);left:0;right:0;flex-direction:column;align-items:stretch;gap:4px;max-height:calc(100vh - 110px);overflow:auto;padding:14px;border-radius:24px;background:#0E1A20;box-shadow:0 24px 60px rgba(0,0,0,.35)}\n .spx .nav-toggle:checked ~ .nav .dk-row2{display:flex}\n .spx .nav-toggle:checked ~ .nav .burger span:first-child{transform:translateY(3.5px) rotate(45deg)}\n .spx .nav-toggle:checked ~ .nav .burger span:last-child{transform:translateY(-3.5px) rotate(-45deg)}\n .spx .nl{display:flex;justify-content:space-between;padding:12px 14px;font-size:17px}\n .spx .nl svg{display:none}\n .spx .panel{position:static;opacity:1;visibility:visible;transform:none;width:auto;margin:2px 0 10px;padding:14px;border-radius:18px;box-shadow:none}\n .spx .panel::before{display:none}\n .spx .mega,.spx .tools-p{width:auto}\n .spx .lvl-grid{grid-template-columns:repeat(2,minmax(0,1fr))}\n .spx .tools-p{grid-template-columns:minmax(0,1fr)}\n .spx .dk-r2r{margin:6px 0 0;flex-wrap:wrap}\n .spx .m-only{display:block;margin-top:6px;padding-top:6px;border-top:1px solid #24404C}\n .spx .gp-txt,.spx .gp-sep,.spx .acct-name,.spx .acct>summary svg{display:none}\n .spx .gp{padding:4px 10px 4px 4px;gap:6px}\n .spx .acct>summary{padding:4px}\n}\n@media (max-width:680px){\n .spx .dk-lv-d{display:none}\n .spx .dk-lv-m{display:flex;margin-bottom:8px}\n .spx .dk-lv-m button{flex:1}\n .spx .dk-lv-m .dk-lv-l{display:block}\n}\n@media (max-width:420px){.spx .gp-streak{display:none}.spx .gp{padding:4px}.spx .cta{padding:10px 14px;font-size:14px}.spx .logo{font-size:20px;gap:14px}.spx .dk-row1{gap:10px;padding-left:16px}}\n<\/style>\n<style media=\"not all\">\n\/* ===== Altes Men\u00fc (deaktiviert, bleibt als Sicherung) ===== *\/\n.spx .sr{position:absolute;width:1px;height:1px;opacity:0;margin:0;pointer-events:none}\n.spx .nav{position:fixed;top:14px;left:0;right:0;z-index:999;padding:0 16px}\n.admin-bar .spx .nav{top:46px}\n.spx .nav-in{position:relative;max-width:1200px;margin:0 auto;display:flex;align-items:center;gap:18px;padding:8px 8px 8px 22px;border-radius:999px;background:rgba(14,26,32,.8);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:0 12px 34px rgba(0,0,0,.25),inset 0 0 0 1px rgba(255,255,255,.09)}\n.spx .logo{display:flex;align-items:center;gap:16px;font-family:'Fraunces',Georgia,serif;font-size:22px;font-weight:600;color:#fff;letter-spacing:-.3px}\n.spx .logo:hover{color:#fff}\n.spx .logo-dot{width:11px;height:11px;border-radius:50%;background:var(--sun);box-shadow:7px 0 0 var(--sky)}\n.spx .nav-links{display:flex;align-items:center;gap:2px;margin:0 auto}\n.spx .nl{display:inline-flex;align-items:center;gap:6px;padding:10px 14px;border-radius:999px;font-size:15px;font-weight:600;color:#D6E2E6;white-space:nowrap}\n.spx .nl:hover,.spx .dd:hover>.nl,.spx .dd:focus-within>.nl{background:rgba(255,255,255,.09);color:#fff}\n.spx .nl svg{transition:transform .2s}\n.spx .dd{position:relative}\n.spx .dd:hover>.nl svg,.spx .dd:focus-within>.nl svg{transform:rotate(180deg)}\n.spx .panel{position:absolute;top:calc(100% + 14px);left:50%;transform:translate(-50%,8px);opacity:0;visibility:hidden;transition:opacity .18s,transform .18s,visibility .18s;background:#fff;color:var(--ink);border-radius:24px;padding:20px;box-shadow:0 24px 60px rgba(14,26,32,.28)}\n.spx .panel::before{content:\"\";position:absolute;left:0;right:0;top:-16px;height:16px}\n.spx .dd:hover>.panel,.spx .dd:focus-within>.panel{opacity:1;visibility:visible;transform:translate(-50%,0)}\n.spx .mega{width:580px}\n.spx .pt{font-size:12px;font-weight:800;letter-spacing:1.3px;color:#8E979A;margin-bottom:12px}\n.spx .lvl-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}\n.spx .lvl{background:var(--c);color:var(--f);border-radius:16px;padding:14px;display:flex;flex-direction:column;gap:2px}\n.spx .lvl b{font-family:'Fraunces',Georgia,serif;font-size:30px;font-weight:600;line-height:1}\n.spx .lvl small{font-size:12px;opacity:.8;margin-bottom:10px}\n.spx .lvl a{font-size:13px;font-weight:700;color:inherit;padding:3px 0}\n.spx .lvl a:hover{color:inherit;text-decoration:underline}\n.spx .panel-foot{display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px 16px;margin-top:14px;padding-top:12px;border-top:1px solid var(--line);font-size:14px;font-weight:700}\n.spx .tools-p{width:540px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px}\n.spx .tl{display:flex;gap:12px;align-items:center;padding:10px;border-radius:14px;color:var(--ink)}\n.spx .tl:hover{background:#F4F1EA;color:var(--ink)}\n.spx .tl i{flex-shrink:0;width:38px;height:38px;border-radius:12px;display:flex;align-items:center;justify-content:center;color:var(--dark)}\n.spx .tl b{display:block;font-size:14.5px}\n.spx .tl small{display:block;font-size:12.5px;color:#6A7477}\n.spx .nav-right{display:flex;align-items:center;gap:6px;flex-shrink:0;margin-left:auto}\n.spx .lang{font-size:13px;font-weight:700;color:#D6E2E6;padding:8px 10px;border-radius:999px;box-shadow:inset 0 0 0 1px rgba(255,255,255,.2)}\n.spx .login{font-size:15px;font-weight:600;color:#fff;padding:10px 12px}\n.spx .lang:hover,.spx .login:hover{color:#fff}\n.spx .cta{font-size:15px;font-weight:700;color:var(--dark);background:var(--sun);padding:12px 20px;border-radius:999px}\n.spx .cta:hover{color:var(--dark);background:#FFD94F}\n.spx .burger{display:none;width:44px;height:44px;border-radius:50%;background:rgba(255,255,255,.1);cursor:pointer;flex-direction:column;align-items:center;justify-content:center;gap:5px}\n.spx .burger span{display:block;width:18px;height:2px;background:#fff;border-radius:2px;transition:transform .2s}\n.spx .nav-toggle:focus-visible ~ .nav .burger{outline:2px solid #fff;outline-offset:2px}\n.spx .m-only{display:none}\n@media (max-width:1020px){\n .spx .burger{display:flex}\n .spx .login,.spx .lang{display:none}\n .spx .nav-links{display:none;position:absolute;top:calc(100% + 10px);left:0;right:0;max-height:calc(100vh - 110px);overflow:auto;flex-direction:column;align-items:stretch;gap:4px;background:#0E1A20;border-radius:24px;padding:14px;box-shadow:0 24px 60px rgba(0,0,0,.35)}\n .spx .nav-toggle:checked ~ .nav .nav-links{display:flex}\n .spx .nav-toggle:checked ~ .nav .burger span:first-child{transform:translateY(3.5px) rotate(45deg)}\n .spx .nav-toggle:checked ~ .nav .burger span:last-child{transform:translateY(-3.5px) rotate(-45deg)}\n .spx .nl{display:flex;justify-content:space-between;padding:12px 14px;font-size:17px}\n .spx .nl svg{display:none}\n .spx .panel{position:static;transform:none;opacity:1;visibility:visible;width:auto;box-shadow:none;margin:2px 0 10px;padding:14px;border-radius:18px}\n .spx .panel::before{display:none}\n .spx .dd:hover>.panel,.spx .dd:focus-within>.panel{transform:none}\n .spx .mega,.spx .tools-p{width:auto}\n .spx .lvl-grid{grid-template-columns:repeat(2,minmax(0,1fr))}\n .spx .tools-p{grid-template-columns:minmax(0,1fr)}\n .spx .m-only{display:block;border-top:1px solid #24404C;margin-top:6px;padding-top:6px}\n .spx .nav-in{padding-left:18px}\n}\n\/* ===== Mitglieder-Men\u00fc ===== *\/\nhtml:not(.spx-member) .spx .mb-only{display:none!important}\nhtml.spx-member .spx .g-only{display:none!important}\n.spx .gp{display:flex;align-items:center;gap:10px;padding:5px 14px 5px 5px;border-radius:999px;background:rgba(255,255,255,.1);color:#fff;--p:0;white-space:nowrap}\n.spx .gp:hover{color:#fff;background:rgba(255,255,255,.16)}\n.spx .gp-ring{width:34px;height:34px;border-radius:50%;background:conic-gradient(var(--sun) calc(var(--p) * 1%),#4B5A5F 0);display:flex;align-items:center;justify-content:center;flex-shrink:0}\n.spx .gp-in{width:26px;height:26px;border-radius:50%;background:#26343A;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700}\n.spx .gp-txt{display:flex;flex-direction:column;line-height:1.15}\n.spx .gp-main{font-size:13px;font-weight:700}\n.spx .gp-sub{font-size:11px;color:#C9D3D6}\n.spx .gp-sep{width:1px;height:24px;background:rgba(255,255,255,.2)}\n.spx .gp-streak{display:flex;align-items:center;gap:4px;font-size:13px;font-weight:700;color:var(--sun)}\n.spx .gp.done{background:var(--sun);color:var(--dark)}\n.spx .gp.done:hover{background:#FFD94F;color:var(--dark)}\n.spx .gp.done .gp-ring{background:var(--dark)}\n.spx .gp.done .gp-in{background:var(--dark);color:var(--sun)}\n.spx .gp.done .gp-sub,.spx .gp.done .gp-streak{color:var(--dark)}\n.spx .gp.done .gp-sep{background:rgba(14,26,32,.25)}\n.spx .acct{position:relative}\n.spx .acct>summary{list-style:none;display:flex;align-items:center;gap:8px;padding:4px 12px 4px 4px;border-radius:999px;background:#fff;color:var(--ink);font-weight:600;font-size:14px;cursor:pointer;white-space:nowrap}\n.spx .acct>summary::-webkit-details-marker{display:none}\n.spx .acct>summary svg{transition:transform .2s}\n.spx .acct[open]>summary svg{transform:rotate(180deg)}\n.spx .av{width:34px;height:34px;border-radius:50%;background:var(--teal);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:15px}\n.spx .acct-p{position:absolute;right:0;top:calc(100% + 16px);width:320px;max-width:calc(100vw - 32px);background:#fff;border-radius:22px;box-shadow:0 24px 60px rgba(14,26,32,.28);padding:10px;display:flex;flex-direction:column;gap:2px;z-index:5}\n.spx .ac-card{background:var(--dark);color:#fff;border-radius:16px;padding:14px;display:flex;flex-direction:column;gap:10px;margin-bottom:4px}\n.spx .ac-top{display:flex;justify-content:space-between;align-items:center;gap:10px;font-weight:700}\n.spx .ac-badge{padding:3px 10px;border-radius:999px;background:var(--sun);color:var(--dark);font-size:11px;font-weight:800;letter-spacing:.5px}\n.spx .ac-badge.free{background:#2A3A41;color:#C9D3D6}\n.spx .ac-row{display:flex;justify-content:space-between;font-size:13px;color:#C9D3D6}\n.spx .ac-row b{color:#fff}\n.spx .ac-bar{height:8px;border-radius:999px;background:#2A3A41;overflow:hidden}\n.spx .ac-bar i{display:block;height:100%;width:0;background:var(--sun);border-radius:999px;transition:width .3s}\n.spx .ac-note{font-size:12px;color:#C9D3D6}\n.spx .ac-go{display:block;text-align:center;padding:11px;border-radius:12px;background:var(--sky);color:var(--dark);font-weight:700;font-size:14px}\n.spx .ac-go:hover{background:#8DD0EC;color:var(--dark)}\n.spx .ac-l{display:flex;align-items:center;gap:12px;padding:11px 12px;border-radius:12px;color:var(--ink);font-size:14px;font-weight:600}\n.spx .ac-l:hover{background:#F3EFE6;color:var(--ink)}\n.spx .ac-l svg{color:var(--teal);flex-shrink:0}\n.spx .ac-l.out{color:var(--muted)}.spx .ac-l.out svg{color:var(--muted)}\n.spx .ac-hr{height:1px;background:var(--line);margin:4px 8px}\n@media (max-width:1020px){.spx .gp-txt,.spx .gp-sep,.spx .acct-name,.spx .acct>summary svg{display:none}.spx .gp{padding:4px 10px 4px 4px;gap:6px}.spx .acct>summary{padding:4px}}\n@media (max-width:400px){.spx .gp-streak{display:none}.spx .gp{padding:4px}}\n<\/style>\n<script>(function(){var u=window.wpTrainerUserInfo;if(u){var h=document.documentElement;h.classList.add('spx-member');if((parseInt(u.level,10)||1)>=3){h.classList.add('spx-plus');}}})();<\/script>\n<style id=\"spx-kopf-d\">\n\/* ===== Seitenkopf \"Kopf D\" + Men\u00fc (global, 29.10.) =====\n   Kopf: kompakt, linksb\u00fcndig auf 780px, kleine Kapitelzeile, feine Verlaufslinie, heller Schein oben rechts.\n   Men\u00fc: Petrol-Pille leicht transparent, aufklappende K\u00e4sten in derselben Farbe. *\/\nhtml body:not(.home) .spx-page{background:radial-gradient(ellipse 62% 460px at 85% 0%,#CBE8F4 0%,rgba(203,232,244,.6) 45%,rgba(251,248,242,0) 100%),radial-gradient(ellipse 40% 300px at 100% 0%,rgba(255,207,51,.16) 0%,rgba(255,207,51,0) 100%),#FBF8F2 !important}\nhtml body .spx .pg-head,html body .spx .a1-head{text-align:left!important;padding-top:124px!important;padding-bottom:0!important;margin-bottom:30px!important}\nhtml body .spx .a1-head{margin-bottom:0!important}\nhtml body .spx-page .a1-stage{padding-top:30px}\n\/* Einheitlicher Abstand Titel-Linie -> Inhalt auf allen Unterseiten *\/\nhtml body .spx-page .spx .pg-head,html body .spx-page .spx .a1-head{margin-bottom:0!important}\nhtml body .spx-page .pg-head + section,html body .spx-page .a1-head + section,html body .spx-page .spx:has(> .pg-head:last-child) + *,html body .spx-page .spx:has(> .a1-head:last-child) + *,html body .spx-page .a1-stage,html body .spx-page .tool-stage{padding-top:48px!important;margin-top:0!important}\n@media (max-width:840px){html body .spx-page .pg-head + section,html body .spx-page .a1-head + section,html body .spx-page .spx:has(> .pg-head:last-child) + *,html body .spx-page .spx:has(> .a1-head:last-child) + *,html body .spx-page .a1-stage,html body .spx-page .tool-stage{padding-top:36px!important}}\nhtml body .spx .pg-head .wrap,html body .spx .a1-head .wrap{max-width:780px!important;width:auto!important;margin:0 auto!important;padding:0 0 22px!important;position:relative;box-sizing:border-box}\nhtml body .spx .pg-head .wrap::after,html body .spx .a1-head .wrap::after{content:\"\";position:absolute;left:0;right:0;bottom:0;height:1px;background:linear-gradient(to right,#0F5C73 0%,#6EC1E4 45%,rgba(110,193,228,0) 100%)}\nhtml body .spx .pg-head .kicker,html body .spx .a1-head .kicker{margin:0 0 8px!important;font-family:'Inter','Segoe UI',Arial,sans-serif!important;font-style:normal!important;font-size:12px!important;font-weight:700!important;line-height:1.4!important;letter-spacing:1.4px!important;text-transform:uppercase!important;color:#5E686B!important;text-align:left!important}\nhtml body .spx .pg-head h1,html body .spx .a1-head h1{font-size:34px!important;line-height:1.15!important;letter-spacing:-.5px!important;margin:0 0 8px!important;text-align:left!important}\nhtml body .spx .pg-head .sub,html body .spx .a1-head .a1-sub{margin:0!important;max-width:600px!important;font-size:16px!important;line-height:1.55!important;color:#5E686B!important;text-align:left!important}\n@media (max-width:840px){\n html body .spx .pg-head .wrap,html body .spx .a1-head .wrap{margin:0 16px!important}\n html body .spx .pg-head h1,html body .spx .a1-head h1{font-size:28px!important}\n html body .spx .pg-head,html body .spx .a1-head{padding-top:108px!important}\n}\n\/* Startseite: dezente Farbverl\u00e4ufe im Stil der Unterseiten *\/\nhtml body.home #spx .hero{background-color:#14708C!important;background-image:radial-gradient(ellipse 55% 75% at 88% 0%,rgba(110,193,228,.38) 0%,rgba(110,193,228,0) 70%),radial-gradient(ellipse 45% 55% at 100% 100%,rgba(255,207,51,.12) 0%,rgba(255,207,51,0) 70%),radial-gradient(ellipse 55% 70% at 0% 100%,rgba(14,83,103,.75) 0%,rgba(14,83,103,0) 70%)!important}\n\/* Verl\u00e4ufe als weiche Farbschicht \u00fcber den R\u00e4ndern (multiply), damit K\u00e4sten mit eigenem Hintergrund keine Kanten bilden *\/\nhtml body.home #spx section.ch2::after,html body.home #spx section.ch3::after,html body.home #spx section#pricing::after,html body.home #spx section.ch:last-of-type::after{content:\"\";position:absolute;top:0;bottom:0;left:50%;width:100vw;margin-left:-50vw;z-index:60;pointer-events:none;mix-blend-mode:multiply}\nhtml body.home #spx section.ch2::after{background:radial-gradient(ellipse 34% 42% at 0% 50%,#D3ECF6 0%,rgba(255,255,255,0) 100%)}\nhtml body.home #spx section.ch3::after{background:radial-gradient(ellipse 34% 42% at 100% 50%,#D3ECF6 0%,rgba(255,255,255,0) 100%)}\nhtml body.home #spx section#pricing::after{background:radial-gradient(ellipse 30% 40% at 0% 45%,#D6EEF7 0%,rgba(255,255,255,0) 100%),radial-gradient(ellipse 26% 36% at 100% 60%,#FFF3C9 0%,rgba(255,255,255,0) 100%)}\nhtml body.home #spx section.ch:last-of-type::after{background:radial-gradient(ellipse 34% 40% at 100% 50%,#D6EEF7 0%,rgba(255,255,255,0) 100%)}\n\/* Men\u00fc-Pille: gleich wie bisher, nur leicht transparent *\/\nhtml body .spx .isl-grp{background:rgba(15,92,115,.8)!important;-webkit-backdrop-filter:blur(14px) saturate(140%)!important;backdrop-filter:blur(14px) saturate(140%)!important;box-shadow:0 8px 24px rgba(14,26,32,.12),inset 0 0 0 1px rgba(255,255,255,.2)!important}\n\/* Aufklappende K\u00e4sten in derselben Farbe *\/\nhtml body .spx .lvp-p,html body .spx .acct-p{background:rgba(15,92,115,.92)!important;-webkit-backdrop-filter:blur(18px)!important;backdrop-filter:blur(18px)!important;color:#fff!important;box-shadow:0 24px 60px rgba(14,26,32,.22),inset 0 0 0 1px rgba(255,255,255,.18)!important}\n@media (min-width:901px){\n html body .spx .panel{background:rgba(15,92,115,.92)!important;-webkit-backdrop-filter:blur(18px)!important;backdrop-filter:blur(18px)!important;color:#fff!important;box-shadow:0 24px 60px rgba(14,26,32,.22),inset 0 0 0 1px rgba(255,255,255,.18)!important}\n}\n@media (max-width:900px){\n html body .spx .isl-grp{-webkit-backdrop-filter:none!important;backdrop-filter:none!important;background:rgba(15,92,115,.88)!important}\n html body .spx .isl-nav{background:rgba(15,92,115,.94)!important;-webkit-backdrop-filter:blur(18px)!important;backdrop-filter:blur(18px)!important}\n html body .spx .panel{background:rgba(255,255,255,.07)!important;color:#fff!important}\n}\nhtml body .spx .tl,html body .spx .tl b{color:#fff!important}\nhtml body .spx .tl:hover{background:rgba(255,255,255,.1)!important;color:#fff!important}\nhtml body .spx .tl small{color:#CFE3EA!important}\nhtml body .spx .lvl{box-shadow:inset 0 0 0 1px rgba(255,255,255,.14)}\nhtml body .spx .panel-foot{border-top-color:rgba(255,255,255,.2)!important}\nhtml body .spx .panel-foot a{color:#fff!important}\nhtml body .spx .panel-foot a:hover{color:#CFEFFB!important}\nhtml body .spx .lvp-p .pt{color:#CFE3EA!important}\nhtml body .spx .lvp-p button{color:#fff!important}\nhtml body .spx .lvp-p button:hover{background:rgba(255,255,255,.1)!important}\nhtml body .spx .lvp-p button[aria-pressed=true]{background:rgba(255,255,255,.14)!important;box-shadow:inset 0 0 0 1.5px #6EC1E4!important}\nhtml body .spx .lv-t small{color:#CFE3EA!important}\nhtml body .spx .lvp-p a{color:#fff!important;border-top-color:rgba(255,255,255,.2)!important}\n\/* Konto-Kasten: nur Name und Mitgliedschaft, kein dunkler Block mit Tagesziel\/Button *\/\nhtml body .spx .ac-card{background:transparent!important;color:#fff!important;padding:10px 12px 12px!important;margin:0 0 4px!important;border-radius:0!important;border-bottom:1px solid rgba(255,255,255,.2)!important;gap:0!important}\nhtml body .spx .ac-card .ac-row,html body .spx .ac-card .ac-bar,html body .spx .ac-card .ac-note,html body .spx .ac-card .ac-go{display:none!important}\nhtml body .spx .ac-card .ac-nm{font-family:'Fraunces',Georgia,serif;font-size:18px;font-weight:600;color:#fff}\nhtml body .spx .ac-l{color:#fff!important}\nhtml body .spx .ac-l:hover{background:rgba(255,255,255,.1)!important;color:#fff!important}\nhtml body .spx .ac-l svg{background:rgba(255,255,255,.12)!important;color:#9ADCF5!important}\nhtml body .spx .ac-l.out,html body .spx .ac-l.out svg{color:#CFE3EA!important}\nhtml body .spx .ac-hr{background:rgba(255,255,255,.2)!important}\n\/* ===== Men\u00fc in Beige (29.10., \u00fcberschreibt die Petrol-Variante oben) ===== *\/\nhtml body .spx .isl-grp{background:rgba(246,250,251,.62)!important;box-shadow:0 6px 20px rgba(14,26,32,.06),inset 0 0 0 1px rgba(20,112,140,.14)!important;color:#1D2427!important}\nhtml body .spx .isl-grp .nl,html body .spx .nl{color:#1D2427!important}\nhtml body .spx .nl:hover,html body .spx .dd:hover>.nl,html body .spx .dd:focus-within>.nl{background:rgba(20,112,140,.08)!important;color:#0F5C73!important}\nhtml body .spx .isl-grp .login,html body .spx .isl-grp .login:hover{color:#1D2427!important}\nhtml body .spx .isl-grp .lang{color:#4B565A!important;box-shadow:inset 0 0 0 1px rgba(29,36,39,.16)!important}\nhtml body .spx .isl-grp .gp{color:#1D2427!important;background:rgba(29,36,39,.05)!important}\nhtml body .spx .isl-grp .gp-bot,html body .spx .isl-grp .gp-sub{color:#5E686B!important}\nhtml body .spx .isl-grp .gp-in{background:#FBF8F2!important;color:#1D2427!important}\nhtml body .spx .isl-grp .gp-sep{background:rgba(29,36,39,.15)!important}\nhtml body .spx .isl-grp .burger{background:rgba(29,36,39,.07)!important}\nhtml body .spx .isl-grp .burger span{background:#1D2427!important}\nhtml body .spx .lvp-p,html body .spx .acct-p{background:rgba(247,251,252,.94)!important;color:#1D2427!important;box-shadow:0 24px 60px rgba(14,26,32,.12),inset 0 0 0 1px rgba(20,112,140,.14)!important}\n@media (min-width:901px){\n html body .spx .panel{background:rgba(247,251,252,.94)!important;color:#1D2427!important;box-shadow:0 24px 60px rgba(14,26,32,.12),inset 0 0 0 1px rgba(20,112,140,.14)!important}\n}\n@media (max-width:900px){\n html body .spx .isl-grp{background:rgba(246,250,251,.82)!important}\n html body .spx .isl-nav{background:rgba(247,251,252,.96)!important;box-shadow:0 24px 60px rgba(14,26,32,.14),inset 0 0 0 1px rgba(20,112,140,.14)!important}\n html body .spx .panel{background:rgba(20,112,140,.05)!important;color:#1D2427!important}\n}\nhtml body .spx .tl,html body .spx .tl b{color:#1D2427!important}\nhtml body .spx .tl:hover{background:rgba(20,112,140,.07)!important;color:#1D2427!important}\nhtml body .spx .tl small{color:#5E686B!important}\nhtml body .spx .lvl{box-shadow:none}\nhtml body .spx .panel-foot{border-top-color:#E6DFD1!important}\nhtml body .spx .panel-foot a{color:#14708C!important}\nhtml body .spx .panel-foot a:hover{color:#0E5367!important}\nhtml body .spx .lvp-p .pt{color:#5E686B!important}\nhtml body .spx .lvp-p button{color:#1D2427!important}\nhtml body .spx .lvp-p button:hover{background:rgba(20,112,140,.07)!important}\nhtml body .spx .lvp-p button[aria-pressed=true]{background:rgba(20,112,140,.1)!important;box-shadow:inset 0 0 0 1.5px #14708C!important}\nhtml body .spx .lv-t small{color:#5E686B!important}\nhtml body .spx .lvp-p a{color:#14708C!important;border-top-color:#E6DFD1!important}\nhtml body .spx .ac-card{color:#1D2427!important;border-bottom-color:#E6DFD1!important}\nhtml body .spx .ac-card .ac-nm{color:#1D2427!important}\nhtml body .spx .ac-l{color:#1D2427!important}\nhtml body .spx .ac-l:hover{background:rgba(20,112,140,.07)!important;color:#1D2427!important}\nhtml body .spx .ac-l svg{background:#E3F5FC!important;color:#14708C!important}\nhtml body .spx .ac-l.out,html body .spx .ac-l.out svg{color:#5E686B!important}\nhtml body .spx .ac-l.out svg{background:#F4F1EA!important}\nhtml body .spx .ac-hr{background:#E6DFD1!important}\n\/* ===== Mitglieder-Men\u00fc wie das Original + eigener Bereich f\u00fcr Level\/Streak\/Konto (03.11.) ===== *\/\nhtml.spx-member .spx .isl-nav>.dd.g-only{display:block!important}\nhtml.spx-member .spx .isl-nav>.dd.mb-only{display:none!important}\n@media (min-width:901px){\n html.spx-member body .spx .isl-grp{background:transparent!important;box-shadow:none!important;-webkit-backdrop-filter:none!important;backdrop-filter:none!important;padding:0!important;gap:18px!important}\n html.spx-member body .spx .isl-grp .isl-nav,html.spx-member body .spx .isl-grp .isl-act{height:60px!important;padding:0 8px!important;border-radius:999px!important;background:rgba(246,250,251,.62)!important;-webkit-backdrop-filter:blur(14px) saturate(140%)!important;backdrop-filter:blur(14px) saturate(140%)!important;box-shadow:0 6px 20px rgba(14,26,32,.06),inset 0 0 0 1px rgba(20,112,140,.14)!important}\n html.spx-member body .spx .isl-grp .isl-act{margin-left:0!important;border-left:0!important;gap:10px!important}\n html.spx-member body .spx .isl-grp .isl-act .gp{background:#fff!important;box-shadow:inset 0 0 0 1px rgba(20,112,140,.14)!important}\n}\n<\/style>\n<style id=\"spx-kopf-act-0311b\">\n\/* ===== Level \/ Streak \/ Konto: aufger\u00e4umt, mehr Abstand, Profil klar klickbar (03.11. b) ===== *\/\n.spx .ia-sep{display:none}\n.spx .isl-act .gp-ring{display:none!important}\n\/* Level: dezent statt Farbfl\u00e4che *\/\nhtml body .spx .isl-act .lvp>summary{height:40px!important;padding:0 10px 0 12px!important;gap:7px!important;border-radius:12px!important;background:transparent!important;box-shadow:none!important;color:#6A7477!important;font-size:13px!important;font-weight:500!important;transition:background .15s!important}\nhtml body .spx .isl-act .lvp>summary:hover,html body .spx .isl-act .lvp[open]>summary{background:rgba(20,112,140,.07)!important}\nhtml body .spx .isl-act .lvp .dk-tag{display:inline-flex;align-items:center;height:22px;padding:0 7px;border-radius:7px;background:#EEF5F7;color:#14708C;font-size:12.5px;font-weight:700;letter-spacing:.2px}\nhtml body .spx .isl-act .lvp>summary svg{width:10px!important;height:10px!important;opacity:.5}\n\/* Account: Avatar + Name + Pfeil, deutlich als Button *\/\nhtml body .spx .isl-act .acct>summary{display:flex!important;align-items:center!important;gap:8px!important;width:auto!important;height:44px!important;padding:0 12px 0 4px!important;border-radius:999px!important;background:#fff!important;color:#1D2427!important;box-shadow:inset 0 0 0 1px rgba(20,112,140,.25),0 1px 3px rgba(14,26,32,.08)!important;cursor:pointer!important;transition:box-shadow .15s,transform .15s!important}\nhtml body .spx .isl-act .acct>summary:hover,html body .spx .isl-act .acct[open]>summary{box-shadow:inset 0 0 0 1.5px #14708C,0 6px 16px rgba(20,112,140,.18)!important;transform:translateY(-1px)}\nhtml body .spx .isl-act .acct>summary:focus-visible{outline:2px solid #14708C!important;outline-offset:2px!important}\nhtml body .spx .isl-act .acct .av{width:36px!important;height:36px!important;background:#14708C!important;color:#fff!important;font-size:15px!important;font-weight:700!important}\nhtml body .spx .isl-act .acct-name{display:block!important;max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:600;color:#1D2427}\nhtml body .spx .isl-act .acct-chev{display:block!important;flex-shrink:0;color:#14708C;transition:transform .2s}\nhtml body .spx .isl-act .acct[open] .acct-chev{transform:rotate(180deg)}\n@media (min-width:641px){\n \/* Streak: ohne runde Zahl, Flamme + zwei Zeilen *\/\n html.spx-member body .spx .isl-grp .isl-act .gp{display:flex!important;align-items:center!important;gap:9px!important;height:40px!important;padding:0 12px 0 10px!important;border-radius:12px!important;background:transparent!important;box-shadow:none!important;color:#1D2427!important;text-decoration:none!important;transition:background .15s!important}\n html.spx-member body .spx .isl-grp .isl-act .gp:hover{background:rgba(20,112,140,.07)!important}\n html body .spx .isl-act .gp-fl{flex-shrink:0;color:#E89A00}\n html body .spx .isl-act .gp.done .gp-fl{fill:#FFCF33}\n html body .spx .isl-act .gp-txt{display:flex!important;flex-direction:column;line-height:1.2}\n html body .spx .isl-act .gp-top{font-size:13.5px;font-weight:700;color:#1D2427!important}\n html body .spx .isl-act .gp-bot{font-size:12px;font-weight:500;color:#6A7477!important}\n html body .spx .isl-act .gp-bot .ac-val{font-weight:700;color:#14708C}\n}\n@media (min-width:901px){\n html.spx-member body .spx .isl-grp{gap:44px!important}\n html.spx-member body .spx .isl-grp .isl-act{gap:8px!important;padding:0 8px 0 10px!important;background:rgba(255,255,255,.86)!important}\n html.spx-member body .spx .isl-grp .isl-nav{background:rgba(255,255,255,.86)!important}\n html.spx-member .spx .ia-sep{display:block;flex-shrink:0;width:1px;height:26px;background:rgba(20,112,140,.16)}\n}\n@media (max-width:1020px){\n html body .spx .isl-act .gp-bot{display:none}\n html body .spx .isl-act .acct-name{display:none!important}\n html body .spx .isl-act .acct>summary{padding:0 10px 0 4px!important}\n}\n<\/style>\n<div class=\"spx spx-top\">\n<style>html body.home .spx a.logo-free,html body.home .spx a.logo-free:hover{filter:none!important}html body.home .spx a.logo-free{width:130px!important;height:90px!important}@media (max-width:767px){html body.home .spx a.logo-free{width:96px!important;height:66px!important}}<\/style><input type=\"checkbox\" id=\"spx-isl\" class=\"nav-toggle sr\" aria-label=\"Toggle menu\">\n<a class=\"logo-free\" href=\"https:\/\/sofapiano.com\/\"><span class=\"logo-dot\" aria-hidden=\"true\"><\/span>sofapiano<\/a>\n<header class=\"nav\"><div class=\"nav-in\">\n <div class=\"isl-grp\">\n <nav class=\"isl isl-nav\" aria-label=\"Main\">\n  <div class=\"dd g-only\">\n   <a class=\"nl\" href=\"https:\/\/sofapiano.com\/exercises\/\">Exercises <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m6 9 6 6 6-6\"\/><\/svg><\/a>\n   <div class=\"panel tools-p ex-p\">\n    <a class=\"tl ex-mine\" style=\"--c:#6EC1E4\" data-lvl-link=\"sentences\" href=\"https:\/\/sofapiano.com\/exercises\/\"><i class=\"lv ex-lvt\"><\/i><b>Mixed Translations<\/b><small>Sentences from daily life<\/small><\/a>\n    <a class=\"tl ex-mine\" style=\"--c:#FFCF33\" data-lvl-link=\"grammar\" href=\"https:\/\/sofapiano.com\/exercises\/\"><i class=\"lv ex-lvt\"><\/i><b>Grammar-Specific Translations<\/b><small>Target your weak spot<\/small><\/a>\n    <div class=\"ex-col\">\n     <div class=\"ex-hd\"><span><b>Mixed Translations<\/b><small>Sentences from daily life<\/small><\/span><\/div>\n     <div class=\"ex-lv\"><a class=\"ex-t\" style=\"--c:#E3F5FC\" href=\"https:\/\/sofapiano.com\/a1-mixed-translations\/\">A1<\/a><a class=\"ex-t\" style=\"--c:#6EC1E4\" href=\"https:\/\/sofapiano.com\/a2-mixed-translations\/\">A2<\/a><a class=\"ex-t\" style=\"--c:#14708C;--f:#FFFFFF\" href=\"https:\/\/sofapiano.com\/b1-mixed-translations\/\">B1<\/a><a class=\"ex-t\" style=\"--c:#FFCF33\" href=\"https:\/\/sofapiano.com\/b2-mixed-translations\/\">B2<\/a><\/div>\n    <\/div>\n    <div class=\"ex-col\">\n     <div class=\"ex-hd\"><span><b>Grammar-Specific Translations<\/b><small>Target your weak spot<\/small><\/span><\/div>\n     <div class=\"ex-lv\"><a class=\"ex-t\" style=\"--c:#E3F5FC\" href=\"https:\/\/sofapiano.com\/a1-grammar-specific-translations\/\">A1<\/a><a class=\"ex-t\" style=\"--c:#6EC1E4\" href=\"https:\/\/sofapiano.com\/a2-grammar-specific-translations\/\">A2<\/a><a class=\"ex-t\" style=\"--c:#14708C;--f:#FFFFFF\" href=\"https:\/\/sofapiano.com\/b1-grammar-specific-translations\/\">B1<\/a><a class=\"ex-t\" style=\"--c:#FFCF33\" href=\"https:\/\/sofapiano.com\/b2-grammar-specific-translations\/\">B2<\/a><\/div>\n    <\/div>\n    <div class=\"panel-foot\"><a href=\"https:\/\/sofapiano.com\/level-test\/\">Not sure? Find your level \u2192<\/a><\/div>\n   <\/div>\n  <\/div>\n  <div class=\"dd mb-only\">\n   <a class=\"nl\" data-lvl-link=\"sentences\" href=\"https:\/\/sofapiano.com\/exercises\/\">Practise <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m6 9 6 6 6-6\"\/><\/svg><\/a>\n   <div class=\"panel tools-p\">\n    <a class=\"tl\" style=\"--c:#6EC1E4\" data-lvl-link=\"sentences\" href=\"https:\/\/sofapiano.com\/exercises\/\"><i><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M21 12a8 8 0 0 1-11.6 7.1L4 20l1-4.6A8 8 0 1 1 21 12z\"\/><\/svg><\/i><b>Mixed Translations<\/b><small>Your level <span class=\"dk-tag\"><\/span><\/small><\/a>\n    <a class=\"tl\" style=\"--c:#14708C;--f:#FFFFFF\" data-lvl-link=\"grammar\" href=\"https:\/\/sofapiano.com\/exercises\/\"><i><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M4 19V5a2 2 0 0 1 2-2h12v18H6a2 2 0 0 1-2-2zM8 7h6\"\/><\/svg><\/i><b>Grammar-Specific Translations<\/b><small>Your level <span class=\"dk-tag\"><\/span><\/small><\/a>\n   <\/div>\n  <\/div>\n  <div class=\"dd\">\n   <a class=\"nl\" href=\"https:\/\/sofapiano.com\/learning-tools\/\">Tools <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m6 9 6 6 6-6\"\/><\/svg><\/a>\n   <div class=\"panel tools-p\">\n    <a class=\"tl\" style=\"--c:#6EC1E4\" href=\"https:\/\/sofapiano.com\/listening-trainer\/\"><i><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M3 14v-2a9 9 0 0 1 18 0v2M3 14h3v6H3zM18 14h3v6h-3z\"\/><\/svg><\/i><b>Listening Trainer<\/b><small>Train your ear<\/small><\/a>\n    <a class=\"tl\" style=\"--c:#FFCF33\" href=\"https:\/\/sofapiano.com\/word-context-search\/\"><i><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M11 4a7 7 0 1 0 0 14 7 7 0 0 0 0-14zM21 21l-5-5\"\/><\/svg><\/i><b>Word Context Search<\/b><small>Words in real sentences<\/small><\/a>\n    <a class=\"tl\" style=\"--c:#F3A08C\" href=\"https:\/\/sofapiano.com\/word-video-search\/\"><i><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M3 6h12v12H3zM15 10l6-3v10l-6-3\"\/><\/svg><\/i><b>Word Video Search<\/b><small>Hear it from natives<\/small><\/a>\n    <a class=\"tl\" style=\"--c:#9BE38A\" href=\"https:\/\/sofapiano.com\/synonym-finder\/\"><i><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10M7 7l3-3M7 7l3 3M17 17H7M17 17l-3-3M17 17l-3 3\"\/><\/svg><\/i><b>Synonym Finder<\/b><small>Natural alternatives<\/small><\/a>\n    <a class=\"tl\" style=\"--c:#14708C;--f:#FFFFFF\" href=\"https:\/\/sofapiano.com\/level-test\/\"><i><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M9 11l3 3 8-8M20 12v7a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h9\"\/><\/svg><\/i><b>Level test<\/b><small>A1 to B2 in a few minutes<\/small><\/a>\n    <a class=\"tl\" style=\"--c:#C9B6F2\" href=\"https:\/\/sofapiano.com\/workbook\/\"><i><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M4 5a2 2 0 0 1 2-2h13v16H6a2 2 0 0 0-2 2zM4 19V5M8 7h7\"\/><\/svg><\/i><b>Workbook<\/b><small>Practise by hand<\/small><\/a>\n    <a class=\"tl mb-only\" style=\"--c:#E3F5FC\" href=\"https:\/\/sofapiano.com\/my-sentences\/\"><i><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M6 3h12v18l-6-4-6 4z\"\/><\/svg><\/i><b>Saved Sentences<\/b><small>Your personal list<\/small><\/a>\n   <\/div>\n  <\/div>\n  <div class=\"dd g-only\">\n   <button type=\"button\" class=\"nl\">About <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m6 9 6 6 6-6\"\/><\/svg><\/button>\n   <div class=\"panel tools-p\">\n    <a class=\"tl\" style=\"--c:#FFCF33\" href=\"https:\/\/sofapiano.com\/membership-join\/\"><i><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 3l2.6 5.6 6.1.7-4.5 4.2 1.2 6L12 16.6 6.6 19.5l1.2-6L3.3 9.3l6.1-.7z\"\/><\/svg><\/i><b>Membership<\/b><small>Free and Plus compared<\/small><\/a>\n    <a class=\"tl\" style=\"--c:#9BE38A\" href=\"https:\/\/sofapiano.com\/faq\/\"><i><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M9.1 9a3 3 0 0 1 5.8 1c0 2-3 3-3 3M12 17h.01M12 22a10 10 0 1 0 0-20 10 10 0 0 0 0 20z\"\/><\/svg><\/i><b>FAQ<\/b><small>Questions and answers<\/small><\/a>\n    <a class=\"tl\" style=\"--c:#E3F5FC\" href=\"https:\/\/sofapiano.com\/contact\/\"><i><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M4 5h16v14H4zM4 6l8 7 8-7\"\/><\/svg><\/i><b>Contact<\/b><small>Write to us<\/small><\/a>\n    <a class=\"tl\" style=\"--c:#6EC1E4\" href=\"https:\/\/sofapiano.com\/blog\/\"><i><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M4 20h4L19 9l-4-4L4 16zM13 7l4 4\"\/><\/svg><\/i><b>Blog<\/b><small>Tips and real German<\/small><\/a>\n   <\/div>\n  <\/div>\n  <div class=\"dd mb-only\">\n   <button type=\"button\" class=\"nl\">About <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m6 9 6 6 6-6\"\/><\/svg><\/button>\n   <div class=\"panel tools-p\">\n    <a class=\"tl\" style=\"--c:#9BE38A\" href=\"https:\/\/sofapiano.com\/quiz\/\"><i><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M9.1 9a3 3 0 0 1 5.8 1c0 2-3 3-3 3M12 17h.01M12 22a10 10 0 1 0 0-20 10 10 0 0 0 0 20z\"\/><\/svg><\/i><b>Quiz<\/b><small>Test what you know<\/small><\/a>\n    <a class=\"tl\" style=\"--c:#6EC1E4\" href=\"https:\/\/sofapiano.com\/blog\/\"><i><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M4 20h4L19 9l-4-4L4 16zM13 7l4 4\"\/><\/svg><\/i><b>Blog<\/b><small>Tips and real German<\/small><\/a>\n    <a class=\"tl\" style=\"--c:#F3A08C\" href=\"https:\/\/sofapiano.com\/level-test\/\"><i><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M9 11l3 3 8-8M20 12v7a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h9\"\/><\/svg><\/i><b>Level test<\/b><small>Check your level again<\/small><\/a>\n   <\/div>\n  <\/div>\n  <div class=\"m-only\">\n   <a class=\"nl g-only\" href=\"https:\/\/sofapiano.com\/membership-login\/\">Log in<\/a>\n   <a class=\"nl mb-only\" href=\"https:\/\/sofapiano.com\/membership-login\/#dt-1\">My dashboard<\/a>\n   <a class=\"nl mb-only free-only\" href=\"https:\/\/sofapiano.com\/membership-join\/\">Upgrade to Plus<\/a>\n   <a class=\"nl mb-only\" href=\"https:\/\/sofapiano.com\/?swpm-logout=true\">Log out<\/a>\n   <a class=\"nl\" href=\"https:\/\/sofapiano.com\/es\/\">Espa\u00f1ol<\/a>\n  <\/div>\n <\/nav>\n <div class=\"isl isl-act\">\n  <a class=\"lang g-only\" href=\"https:\/\/sofapiano.com\/es\/\" aria-label=\"Espa\u00f1ol\">ES<\/a>\n  <a class=\"login g-only\" href=\"https:\/\/sofapiano.com\/membership-login\/\">Log in<\/a>\n  <a class=\"cta g-only\" href=\"https:\/\/sofapiano.com\/membership-join\/\">Create free account<\/a>\n  <details class=\"lvp mb-only\">\n   <summary aria-label=\"Your level\"><span class=\"lvp-w\">Level <\/span><span class=\"dk-tag\"><\/span><svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m6 9 6 6 6-6\"\/><\/svg><\/summary>\n   <div class=\"lvp-p\">\n    <p class=\"pt\">YOUR LEVEL<\/p>\n    <button type=\"button\" data-lv=\"A1\" aria-pressed=\"false\"><span class=\"lv-ic\" style=\"--c:#E3F5FC\">A1<\/span><span class=\"lv-t\"><b>Beginner<\/b><small>Order food, ask questions<\/small><\/span><\/button>\n    <button type=\"button\" data-lv=\"A2\" aria-pressed=\"false\"><span class=\"lv-ic\" style=\"--c:#6EC1E4\">A2<\/span><span class=\"lv-t\"><b>Elementary<\/b><small>Your day, past and plans<\/small><\/span><\/button>\n    <button type=\"button\" data-lv=\"B1\" aria-pressed=\"false\"><span class=\"lv-ic\" style=\"--c:#14708C;--f:#FFFFFF\">B1<\/span><span class=\"lv-t\"><b>Intermediate<\/b><small>Reasons, stories, opinions<\/small><\/span><\/button>\n    <button type=\"button\" data-lv=\"B2\" aria-pressed=\"false\"><span class=\"lv-ic\" style=\"--c:#0E1A20;--f:#FFFFFF\">B2<\/span><span class=\"lv-t\"><b>Upper intermediate<\/b><small>Complex topics, fluently<\/small><\/span><\/button>\n    <a href=\"https:\/\/sofapiano.com\/level-test\/\">Not sure? Take the level test \u2192<\/a>\n   <\/div>\n  <\/details>\n  <span class=\"ia-sep mb-only\" aria-hidden=\"true\"><\/span>\n  <a class=\"gp mb-only spx-goal\" href=\"https:\/\/sofapiano.com\/membership-login\/#dt-1\" aria-label=\"Daily goal\">\n   <svg class=\"gp-fl\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 22c4 0 7-3 7-7 0-4-3-6-4-10-2 2-3 4-3 6-1-1-2-2-2-4-2 2-5 5-5 8 0 4 3 7 7 7z\"\/><\/svg>\n   <span class=\"gp-txt\"><span class=\"gp-top\"><span class=\"gp-s\">0<\/span>-day streak<\/span><span class=\"gp-bot\"><span class=\"gp-gl\">Daily goal<\/span> <span class=\"ac-val\">0 \/ 10<\/span><\/span><\/span>\n  <\/a>\n  <span class=\"ia-sep mb-only\" aria-hidden=\"true\"><\/span>\n  <details class=\"acct mb-only\">\n   <summary aria-label=\"Account menu\" title=\"Open account menu\"><span class=\"av ac-init\">S<\/span><span class=\"acct-name ac-nm\">Account<\/span><svg class=\"acct-chev\" width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m6 9 6 6 6-6\"\/><\/svg><\/summary>\n   <div class=\"acct-p\">\n    <div class=\"ac-card\">\n     <div class=\"ac-top\"><span class=\"ac-nm\">Account<\/span><span class=\"ac-badge\">PLUS<\/span><\/div>\n     <div class=\"ac-row\"><span>Daily goal<\/span><b class=\"ac-val\">0 \/ 10<\/b><\/div>\n     <div class=\"ac-bar\"><i><\/i><\/div>\n     <div class=\"ac-note\">Loading your progress \u2026<\/div>\n     <a class=\"ac-go\" href=\"https:\/\/sofapiano.com\/membership-login\/#dt-2\">Continue practising<\/a>\n    <\/div>\n    <a class=\"ac-l\" href=\"https:\/\/sofapiano.com\/membership-login\/#dt-1\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M3 3h7v9H3zM14 3h7v5h-7zM14 12h7v9h-7zM3 16h7v5H3z\"\/><\/svg>My dashboard<\/a>\n    <a class=\"ac-l\" href=\"https:\/\/sofapiano.com\/membership-login\/#dt-3\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M6 3h12v18l-6-4-6 4z\"\/><\/svg>Saved Sentences<\/a>\n    <a class=\"ac-l\" href=\"https:\/\/sofapiano.com\/membership-login\/#dt-4\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M4 19V5a2 2 0 0 1 2-2h12v18H6a2 2 0 0 1-2-2zM8 7h6\"\/><\/svg>Grammar tracker<\/a>\n    <a class=\"ac-l\" href=\"https:\/\/sofapiano.com\/membership-login\/#dt-5\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M9 11l3 3 8-8M20 12v7a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h9\"\/><\/svg>Test results<\/a>\n    <a class=\"ac-l\" href=\"https:\/\/sofapiano.com\/membership-login\/#dt-8\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M4 20V10M10 20V4M16 20v-8M22 20H2\"\/><\/svg>Statistics<\/a>\n    <a class=\"ac-l\" href=\"https:\/\/sofapiano.com\/membership-login\/#dt-9\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 12a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM4 21a8 8 0 0 1 16 0\"\/><\/svg>Account &amp; membership<\/a>\n    <a class=\"ac-l free-only\" href=\"https:\/\/sofapiano.com\/membership-join\/\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 3l2.6 5.6 6.1.7-4.5 4.2 1.2 6L12 16.6 6.6 19.5l1.2-6L3.3 9.3l6.1-.7z\"\/><\/svg>Upgrade to Plus<\/a>\n    <div class=\"ac-hr\"><\/div>\n    <a class=\"ac-l out\" href=\"https:\/\/sofapiano.com\/?swpm-logout=true\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4M10 17l-5-5 5-5M5 12h11\"\/><\/svg>Log out<\/a>\n   <\/div>\n  <\/details>\n  <label for=\"spx-isl\" class=\"burger\" aria-hidden=\"true\"><span><\/span><span><\/span><\/label>\n <\/div>\n <\/div>\n<\/div>\n<\/header>\n<\/div>\n<script>\n(function(){\n document.addEventListener('click', function (e) {\n  var d = document.querySelector('.spx-top .lvp[open]');\n  if (!d) return;\n  if (e.target.closest('[data-lv]')) { d.removeAttribute('open'); return; }\n  if (!d.contains(e.target)) d.removeAttribute('open');\n });\n})();\n<\/script>\n<style>\n\/* ===== Update 28.10.: \u00dcbungs-Men\u00fc mit vier gro\u00dfen Level-K\u00e4sten, helleres Konto-Men\u00fc ===== *\/\n.spx .lv-panel{width:680px;padding:14px}\n.spx .lv-big{gap:10px}\n.spx .lv-big .lvl{min-height:180px;padding:18px 16px 14px;gap:2px;border-radius:18px}\n.spx .lv-big .lvl b{font-size:42px;letter-spacing:-1px}\n.spx .lv-big .lvl small{margin-bottom:auto;padding-bottom:16px;font-size:12.5px;font-weight:600}\n.spx .lv-big .lvl a{display:flex;justify-content:space-between;align-items:center;padding:8px 0;font-size:13.5px;font-weight:700;border-top:1px solid rgba(14,26,32,.12)}\n.spx .lv-big .lvl a::after{content:\"\u2192\";font-weight:700}\n.spx .lv-big .lvl[style*=\"#14708C\"] a{border-top-color:rgba(255,255,255,.25)}\n.spx .lv-big .lvl a:hover{text-decoration:none;opacity:.75}\n.spx .ac-card{background:#E2F0F4;color:var(--ink)}\n.spx .ac-card .ac-badge{background:#14708C;color:#fff}\n.spx .ac-card .ac-bar{background:rgba(20,112,140,.15)}\n.spx .ac-card .ac-bar i{background:#14708C}\n.spx .ac-card .ac-note{color:var(--muted)}\n.spx .acct-p{gap:0;padding:8px}\n.spx .acct-p .ac-l{padding:6px 10px;gap:10px;font-size:13.5px}\n.spx .acct-p .ac-l svg{width:32px;height:32px;padding:8px;border-radius:10px}\n.spx .acct-p .ac-hr{margin:3px 8px}\n@media (max-width:1020px){.spx .lv-panel{width:auto}.spx .lv-big .lvl{min-height:0}}\n\/* ===== Update 03.11.: \u00dcbungs-Men\u00fc im Stil von Tools\/About, Workbook unter Tools ===== *\/\n.spx .ex-p{width:660px}\n.spx .ex-p .tl.ex{grid-template-columns:38px 1fr;align-items:center}\n.spx .ex-p .tl.ex i{grid-row:auto}\n.spx .ex-p .tl.ex b{padding-top:1px}\n.spx .ex-p .ex-l{display:flex;flex-direction:column;gap:7px;margin-top:0}\n.spx .ex-p .tl.ex{padding:14px 10px!important}\n.spx .ex-p .tl.ex i.lv{font-size:19px!important}\nhtml body .spx .ex-p .ex-l a{display:inline-flex;align-items:center;gap:6px;width:fit-content;padding:2px 0;font-size:13.5px;font-weight:500;line-height:1.3;white-space:nowrap;color:#1D2427!important}\n.spx .ex-p .ex-l a::after{content:\"\u2192\";font-weight:700;transition:transform .15s}\nhtml body .spx .ex-p .ex-l a:hover{color:#1D2427!important;text-decoration:underline;text-underline-offset:3px}\n.spx .ex-p .ex-l a:hover::after{transform:translateX(3px)}\n.spx .ex-p .panel-foot{grid-column:1 \/ -1;margin-top:6px}\n@media (max-width:900px){.spx .ex-p{width:auto}}\n.spx .ex-p .ex-mine{display:none}\n.spx .ex-p.ex-one{width:620px}\n.spx .ex-p .ex-mine b{white-space:nowrap}\n.spx .ex-p.ex-one .ex-mine{display:grid}\n.spx .ex-p.ex-one .tl.ex,.spx .ex-p.ex-one .panel-foot{display:none!important}\n@media (max-width:900px){.spx .ex-p.ex-one{width:auto}}\n\/* ===== Update 03.11. (2): \u00dcbungs-Men\u00fc f\u00fcr G\u00e4ste \u2013 oben zwei K\u00e4sten Mixed \/ Grammar, darunter je A1\u2013B2 zum Anklicken ===== *\/\n.spx .ex-p{width:600px;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}\n.spx .ex-col{display:flex;flex-direction:column;gap:12px;padding:12px;border-radius:18px;background:#F4F8FA;box-shadow:inset 0 0 0 1px rgba(20,112,140,.10)}\n.spx .ex-hd{flex:1;display:flex;align-items:center;gap:12px;padding:0 2px 12px;border-bottom:1px solid rgba(20,112,140,.12)}\n.spx .ex-hd i{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:12px;background:var(--c);color:var(--f,#0E1A20);font-style:normal}\n.spx .ex-hd span{min-width:0}\nhtml body .spx .ex-hd b{display:block;font-size:14.5px;line-height:1.25;color:#1D2427!important}\nhtml body .spx .ex-hd small{display:block;margin-top:1px;font-size:12.5px;line-height:1.3;color:#6A7477!important}\n.spx .ex-lv{display:flex;flex-wrap:wrap;gap:8px;padding:0 2px}\nhtml body .spx .ex-lv a.ex-t{display:flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:12px;background:var(--c);color:var(--f,#0E1A20)!important;font-family:'Fraunces',Georgia,serif;font-size:15px;font-weight:600;line-height:1;text-decoration:none!important;box-shadow:0 1px 4px rgba(14,26,32,.12);transition:transform .15s,box-shadow .15s}\nhtml body .spx .ex-lv a.ex-t:hover,html body .spx .ex-lv a.ex-t:focus-visible{transform:translateY(-2px);box-shadow:0 8px 18px rgba(14,26,32,.26);color:var(--f,#0E1A20)!important}\n.spx .ex-p.ex-one .ex-col{display:none!important}\n@media (max-width:900px){\n .spx .ex-p{width:auto;grid-template-columns:minmax(0,1fr)}\n}\n<\/style>\n<script id=\"spx-i18n\">\n\/* SPX: Sprach-Korrekturen. 1) Cookie-Banner in Seitensprache (EN\/ES) statt Deutsch.\n   2) Kontaktformular-Beschriftungen. 3) Spanische Texte f\u00fcr Men\u00fc, Footer und Hauptseiten,\n   solange sie in TranslatePress noch nicht \u00fcbersetzt sind (bereits \u00fcbersetzte Texte bleiben unber\u00fchrt). *\/\n(function () {\n  var p = location.pathname, ES = (p === '\/es' || p.indexOf('\/es\/') === 0);\n\n  var BANNER = ES ? {\n    '.cmplz-title': 'Gestionar el consentimiento',\n    '.cmplz-message': 'Para ofrecerte la mejor experiencia usamos tecnolog\u00edas como las cookies para almacenar y\/o acceder a informaci\u00f3n del dispositivo. Si aceptas, podremos procesar datos como el comportamiento de navegaci\u00f3n o identificadores \u00fanicos en este sitio. Si no aceptas o retiras tu consentimiento, algunas funciones pueden verse afectadas.',\n    '.cmplz-always-active': 'Siempre activas',\n    '.cmplz-description-functional': 'El almacenamiento o acceso t\u00e9cnico es estrictamente necesario para el fin leg\u00edtimo de permitir el uso de un servicio solicitado expresamente por el usuario, o con el \u00fanico fin de transmitir una comunicaci\u00f3n a trav\u00e9s de una red.',\n    '.cmplz-description-preferences': 'El almacenamiento o acceso t\u00e9cnico es necesario para guardar preferencias que no ha solicitado el usuario.',\n    '.cmplz-description-statistics': 'El almacenamiento o acceso t\u00e9cnico que se utiliza exclusivamente con fines estad\u00edsticos.',\n    '.cmplz-description-statistics-anonymous': 'El almacenamiento o acceso t\u00e9cnico que se utiliza exclusivamente con fines estad\u00edsticos an\u00f3nimos.',\n    '.cmplz-description-marketing': 'El almacenamiento o acceso t\u00e9cnico es necesario para crear perfiles de usuario, enviar publicidad o rastrear al usuario en uno o varios sitios web con fines de marketing similares.',\n    '.cmplz-manage-options': 'Gestionar opciones',\n    '.cmplz-manage-third-parties': 'Gestionar servicios',\n    '.cmplz-accept': 'Aceptar',\n    '.cmplz-deny': 'Rechazar',\n    '.cmplz-view-preferences': 'Ver preferencias',\n    '.cmplz-save-preferences': 'Guardar preferencias'\n  } : {\n    '.cmplz-title': 'Manage consent',\n    '.cmplz-message': 'To give you the best experience, we use technologies like cookies to store and\/or access device information. Consenting allows us to process data such as browsing behaviour or unique IDs on this site. Not consenting or withdrawing consent may affect certain features and functions.',\n    '.cmplz-always-active': 'Always active',\n    '.cmplz-description-functional': 'The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the user, or for the sole purpose of carrying out the transmission of a communication over an electronic network.',\n    '.cmplz-description-preferences': 'The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the user.',\n    '.cmplz-description-statistics': 'The technical storage or access that is used exclusively for statistical purposes.',\n    '.cmplz-description-statistics-anonymous': 'The technical storage or access that is used exclusively for anonymous statistical purposes.',\n    '.cmplz-description-marketing': 'The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.',\n    '.cmplz-manage-options': 'Manage options',\n    '.cmplz-manage-third-parties': 'Manage services',\n    '.cmplz-accept': 'Accept',\n    '.cmplz-deny': 'Deny',\n    '.cmplz-view-preferences': 'View preferences',\n    '.cmplz-save-preferences': 'Save preferences'\n  };\n  var CATS = ES\n    ? { 'Funktional': 'Funcionales', 'Pr\u00e4ferenzen': 'Preferencias', 'Statistiken': 'Estad\u00edsticas', 'Marketing': 'Marketing' }\n    : { 'Funktional': 'Functional', 'Pr\u00e4ferenzen': 'Preferences', 'Statistiken': 'Statistics', 'Marketing': 'Marketing' };\n\n  var FORM = ES\n    ? { 'your-name': 'Nombre', 'your-email': 'Correo electr\u00f3nico', 'your-subject': 'Asunto', 'your-message': 'Mensaje' }\n    : { 'your-name': 'Name', 'your-email': 'Email address', 'your-subject': 'Subject', 'your-message': 'Message' };\n\n  var D = {\n    'Beginner': 'Principiante', 'Elementary': 'Elemental', 'Intermediate': 'Intermedio', 'Upper intermediate': 'Intermedio alto',\n    'Everyday sentences': 'Frases cotidianas', 'Everyday Sentences': 'Frases cotidianas', 'Mixed Translations': 'Traducciones mixtas', 'Mixed translations': 'Traducciones mixtas', 'Grammar-Specific Translations': 'Traducciones gramaticales', 'Grammar-specific translations': 'Traducciones gramaticales',\n    'Grammar in context': 'Gram\u00e1tica en contexto', 'Grammar in Context': 'Gram\u00e1tica en contexto',\n    'Exercises': 'Ejercicios', 'Practise': 'Practicar', 'PRACTISE': 'PRACTICAR', 'Your level': 'Tu nivel', 'YOUR LEVEL': 'TU NIVEL', 'Level': 'Nivel',\n    'Tools': 'Herramientas', 'TOOLS': 'HERRAMIENTAS', 'Train your ear': 'Entrena tu o\u00eddo', 'Words in real sentences': 'Palabras en frases reales',\n    'Hear it from natives': 'Esc\u00fachalo de nativos', 'Synonym Finder': 'Buscador de sin\u00f3nimos', 'Natural alternatives': 'Alternativas naturales',\n    'Workbooks': 'Cuadernos', 'Workbook': 'Cuaderno', 'Practise by hand': 'Practica a mano', 'Saved Sentences': 'Frases guardadas', 'Your personal list': 'Tu lista personal',\n    'More': 'M\u00e1s', 'About': 'Sobre nosotros', 'All topics mixed': 'Todos los temas mezclados', 'Sentences from daily life': 'Frases del d\u00eda a d\u00eda', 'Target your weak spot': 'Trabaja tu punto d\u00e9bil', 'One grammar topic at a time': 'Un tema de gram\u00e1tica a la vez', 'Pricing': 'Precios', 'Memberships': 'Suscripciones', 'Free and Plus compared': 'Free y Plus comparados', 'Tips and real German': 'Consejos y alem\u00e1n real',\n    'Find my level': 'Descubrir mi nivel', 'A1 to B2 in a few minutes': 'De A1 a B2 en pocos minutos', 'Questions and answers': 'Preguntas y respuestas',\n    'Write to us': 'Escr\u00edbenos', 'Test what you know': 'Pon a prueba lo que sabes', 'Level test': 'Test de nivel', 'Check your level again': 'Vuelve a comprobar tu nivel',\n    'Log in': 'Iniciar sesi\u00f3n', 'My dashboard': 'Mi panel', 'Upgrade to Plus': 'Pasar a Plus', 'Log out': 'Cerrar sesi\u00f3n', 'Start free': 'Empieza gratis', 'Create free account': 'Crear cuenta gratis',\n    'Order food, ask questions': 'Pedir comida, hacer preguntas', 'Your day, past and plans': 'Tu d\u00eda, el pasado y tus planes',\n    'Reasons, stories, opinions': 'Razones, historias, opiniones', 'Complex topics, fluently': 'Temas complejos, con fluidez',\n    'Not sure? Take the level test \u2192': '\u00bfNo est\u00e1s seguro? Haz el test de nivel \u2192', 'Not sure? Find your level \u2192': '\u00bfNo est\u00e1s seguro? Descubre tu nivel \u2192',\n    'All exercises \u2192': 'Todos los ejercicios \u2192', '-day streak': ' d\u00edas seguidos', 'Account': 'Cuenta', 'Daily goal': 'Objetivo diario',\n    'Loading your progress \u2026': 'Cargando tu progreso \u2026', 'Continue practising': 'Seguir practicando', 'Grammar tracker': 'Progreso gramatical',\n    'Test results': 'Resultados de tests', 'Account \\\\u0026 membership': 'Cuenta y suscripci\u00f3n',\n    'You know the words. So why won\u2019t the sentence come?': 'Conoces las palabras. \u00bfPor qu\u00e9 no sale la frase?',\n    'Learn German': 'Aprende alem\u00e1n', 'through translation.': 'traduciendo.', 'through translation': 'traduciendo',\n    'Translate real everyday sentences, get instant feedback on every word and learn German the way native speakers actually speak \u2014 from A1 to B2. Try it right now.': 'Traduce frases reales del d\u00eda a d\u00eda, recibe feedback al instante sobre cada palabra y aprende el alem\u00e1n que hablan los nativos, de A1 a B2. Pru\u00e9balo ahora mismo.',\n    'Start practising free': 'Empieza a practicar gratis', 'Create free account': 'Crear cuenta gratis', 'Try it \u2014 it\u2019s live': 'Pru\u00e9balo, \u00a1es en vivo!',\n    'What makes sofapiano different?': '\u00bfQu\u00e9 hace diferente a sofapiano?', 'phrases from real conversations.': 'frases de conversaciones reales.',\n    'authentic German.': 'alem\u00e1n aut\u00e9ntico.', 'grammar topics,': 'temas de gram\u00e1tica,', 'taught naturally.': 'ense\u00f1ados de forma natural.',\n    'Every sentence written and checked by native speakers.': 'Cada frase est\u00e1 escrita y revisada por hablantes nativos.',\n    'No textbook German': 'Nada de alem\u00e1n de libro', 'Phrases people actually use in everyday life.': 'Frases que la gente usa de verdad en su d\u00eda a d\u00eda.',\n    'No dry drills': 'Nada de ejercicios aburridos', 'Grammar sinks in through context, not rule tables.': 'La gram\u00e1tica se aprende con el contexto, no con tablas de reglas.',\n    'The moment every German learner knows': 'El momento que conoce todo estudiante de alem\u00e1n',\n    'You learned German. Then Germans started talking.': 'Aprendiste alem\u00e1n. Luego los alemanes empezaron a hablar.',\n    'Vocabulary lists, grammar tables, perfect textbook sentences \u2014 and still you freeze when a real conversation starts.': 'Listas de vocabulario, tablas de gram\u00e1tica, frases perfectas de libro\u2026 y aun as\u00ed te bloqueas cuando empieza una conversaci\u00f3n real.',\n    'That\u2019s because people don\u2019t talk like textbooks. sofapiano teaches you the German they actually use.': 'Porque la gente no habla como los libros. sofapiano te ense\u00f1a el alem\u00e1n que se usa de verdad.',\n    'Go to the exercises': 'Ir a los ejercicios', 'Textbook:': 'Libro de texto:', 'Then something changes': 'Entonces algo cambia',\n    'One sentence.': 'Una frase.', 'Five lessons at once.': 'Cinco lecciones a la vez.',\n    'When you translate a real sentence, you don\u2019t practise one rule in isolation. Vocabulary, word order, tenses and fixed phrases all come together \u2014 exactly like when you speak.': 'Cuando traduces una frase real no practicas una regla aislada. Vocabulario, orden de las palabras, tiempos verbales y expresiones fijas se juntan, igual que cuando hablas.',\n    'That\u2019s why the translation method works so well.': 'Por eso el m\u00e9todo de traducci\u00f3n funciona tan bien.',\n    'TENSE': 'TIEMPO VERBAL', 'Perfect with \u201esein\u201c': 'Perfecto con \u201esein\u201c', 'PHRASE': 'EXPRESI\u00d3N', 'A fixed expression': 'Una expresi\u00f3n fija',\n    'VERB FORM': 'FORMA VERBAL', 'Irregular participle': 'Participio irregular', 'CONNECTOR': 'CONECTOR', 'Gives a reason': 'Da una raz\u00f3n',\n    'WORD ORDER': 'ORDEN DE PALABRAS', 'Verb goes to the end': 'El verbo va al final', 'Start an exercise': 'Empezar un ejercicio',\n    'Step by step': 'Paso a paso', 'Sentence by sentence, you climb from A1 to B2.': 'Frase a frase, subes de A1 a B2.',\n    'German exercises for every level \u2014 start where you are and go up one step at a time.': 'Ejercicios de alem\u00e1n para cada nivel: empieza donde est\u00e1s y sube paso a paso.',\n    'Introduce yourself, order food, ask simple questions.': 'Pres\u00e9ntate, pide comida, haz preguntas sencillas.',\n    'Talk about your day, the past and your plans.': 'Habla de tu d\u00eda, del pasado y de tus planes.',\n    'Give reasons, tell stories, share opinions.': 'Da razones, cuenta historias, comparte opiniones.',\n    'Discuss complex topics fluently and naturally.': 'Habla de temas complejos con fluidez y naturalidad.',\n    'You\u2019re not alone': 'No est\u00e1s solo', 'Along the way, the right tools have your back.': 'Por el camino, las herramientas adecuadas te acompa\u00f1an.',\n    'Learning tools for German \u2014 for the moments when a sentence isn\u2019t enough.': 'Herramientas para aprender alem\u00e1n, para cuando una frase no basta.',\n    'Explore all tools': 'Ver todas las herramientas', 'Get the workbook': 'Conseguir el cuaderno',\n    'When you can\u2019t understand spoken German': 'Cuando no entiendes el alem\u00e1n hablado', 'Train your ear with sentences read by natural voices.': 'Entrena tu o\u00eddo con frases le\u00eddas por voces naturales.',\n    'When a word means five things': 'Cuando una palabra significa cinco cosas', 'See how a German word is really used in full sentences.': 'Mira c\u00f3mo se usa de verdad una palabra alemana en frases completas.',\n    'When you want to hear it from a native': 'Cuando quieres o\u00edrlo de un nativo', 'Hear a word spoken in real video clips.': 'Escucha una palabra en v\u00eddeos reales.',\n    'When you keep using the same word': 'Cuando siempre usas la misma palabra', 'Expand your vocabulary with natural alternatives.': 'Ampl\u00eda tu vocabulario con alternativas naturales.',\n    'When you want it to really stick': 'Cuando quieres que se te quede', 'Handwriting Workbooks': 'Cuadernos para escribir a mano',\n    'PDF workbooks \u2014 writing by hand deepens memory.': 'Cuadernos en PDF: escribir a mano refuerza la memoria.',\n    'When you\u2019re not sure where you stand': 'Cuando no sabes qu\u00e9 nivel tienes', 'German Level Test': 'Test de nivel de alem\u00e1n',\n    'Find your level objectively in a few minutes.': 'Descubre tu nivel de forma objetiva en pocos minutos.',\n    'Your choice': 'T\u00fa eliges', 'How far you go is up to you.': 'Hasta d\u00f3nde llegas depende de ti.', 'No credit card to get started.': 'Sin tarjeta de cr\u00e9dito para empezar.',\n    'Exercises A1\u2013B2, no account needed': 'Ejercicios A1\u2013B2, sin necesidad de cuenta',\n    'More grammar topics and audio with a free account': 'M\u00e1s temas de gram\u00e1tica y audio con una cuenta gratuita',\n    'Progress tracking, reminder emails, level test and all tools': 'Seguimiento del progreso, recordatorios por email, test de nivel y todas las herramientas',\n    'Cancel anytime': 'Cancela cuando quieras', 'All 80+ grammar topics and the grammar quick guide': 'Los m\u00e1s de 80 temas de gram\u00e1tica y la gu\u00eda r\u00e1pida de gram\u00e1tica',\n    'Save sentences and add your own': 'Guarda frases y a\u00f1ade las tuyas', 'Statistics dashboard and grammar tracker': 'Panel de estad\u00edsticas y progreso gramatical',\n    'A new handwriting workbook every month': 'Un cuaderno nuevo para escribir a mano cada mes', 'Get Plus': 'Conseguir Plus', 'Compare all features': 'Comparar todas las funciones',\n    'Before you set off': 'Antes de empezar', 'A few questions about learning German with sofapiano': 'Algunas preguntas sobre aprender alem\u00e1n con sofapiano',\n    'What is sofapiano?': '\u00bfQu\u00e9 es sofapiano?',\n    'sofapiano is a German learning platform based on the translation method. You translate real everyday sentences and train grammar naturally in context instead of memorising isolated rules.': 'sofapiano es una plataforma para aprender alem\u00e1n basada en el m\u00e9todo de traducci\u00f3n. Traduces frases reales del d\u00eda a d\u00eda y entrenas la gram\u00e1tica de forma natural en contexto, en lugar de memorizar reglas aisladas.',\n    'How does the translation method work?': '\u00bfC\u00f3mo funciona el m\u00e9todo de traducci\u00f3n?',\n    'You see a sentence in English or Spanish and translate it into German. Instant feedback shows which words are right, close or missing, so you understand grammar, vocabulary and sentence structure in context.': 'Ves una frase en ingl\u00e9s o en espa\u00f1ol y la traduces al alem\u00e1n. El feedback inmediato muestra qu\u00e9 palabras est\u00e1n bien, casi bien o faltan, para que entiendas la gram\u00e1tica, el vocabulario y la estructura en contexto.',\n    'Is sofapiano suitable for beginners?': '\u00bfEs sofapiano adecuado para principiantes?',\n    'Yes. Exercises start at A1 and grammar is explained step by step. Advanced learners at B1 and B2 improve fluency, sentence structure and natural everyday expressions.': 'S\u00ed. Los ejercicios empiezan en A1 y la gram\u00e1tica se explica paso a paso. En B1 y B2 mejoras la fluidez, la estructura de las frases y las expresiones naturales del d\u00eda a d\u00eda.',\n    'How much does it cost?': '\u00bfCu\u00e1nto cuesta?',\n    'You can practise for free without an account and register for free to unlock more. Plus costs \u20ac4 per month and gives you full access to all grammar topics, saved sentences, statistics and workbooks.': 'Puedes practicar gratis sin cuenta y registrarte gratis para desbloquear m\u00e1s. Plus cuesta 4 \u20ac al mes y te da acceso completo a todos los temas de gram\u00e1tica, frases guardadas, estad\u00edsticas y cuadernos.',\n    'How can I cancel my membership?': '\u00bfC\u00f3mo puedo cancelar mi suscripci\u00f3n?',\n    'You can cancel at any time with the cancellation button in your profile settings or by contacting our support.': 'Puedes cancelarla en cualquier momento con el bot\u00f3n de cancelaci\u00f3n en tu perfil o contactando con nosotros.',\n    'What makes sofapiano different from other language apps?': '\u00bfQu\u00e9 diferencia a sofapiano de otras apps de idiomas?',\n    'sofapiano focuses on real language use instead of random vocabulary. All 30,000+ sentences are written and reviewed by native speakers \u2014 no AI-generated filler.': 'sofapiano se centra en el uso real del idioma en lugar de vocabulario suelto. Las m\u00e1s de 30.000 frases est\u00e1n escritas y revisadas por nativos, sin relleno generado por IA.',\n    'All FAQs': 'Todas las preguntas', 'Contact us': 'Cont\u00e1ctanos',\n    '\u2014 with real sentences native speakers use every day.': ', con frases reales que los nativos usan cada d\u00eda.',\n    'Learning tools': 'Herramientas', 'Our story': 'Nuestra historia', 'Terms \\\\u0026 Conditions': 'T\u00e9rminos y condiciones', 'Terms of Use': 'Condiciones de uso',\n    'Exercises \u00b7 A1\u2013B2': 'Ejercicios \u00b7 A1\u2013B2', 'Choose your': 'Elige tu', 'exercise': 'ejercicio', 'Pick your level, then a format:': 'Elige tu nivel y luego un formato:',\n    'train the phrases native speakers use every day,': 'entrenan las frases que los nativos usan cada d\u00eda,',\n    'lets you choose a grammar topic and apply it in real sentences.': 'te permite elegir un tema de gram\u00e1tica y aplicarlo en frases reales.',\n    'German A1 \u00b7 Beginner': 'Alem\u00e1n A1 \u00b7 Principiante', 'German A2 \u00b7 Elementary': 'Alem\u00e1n A2 \u00b7 Elemental', 'German B1 \u00b7 Intermediate': 'Alem\u00e1n B1 \u00b7 Intermedio', 'German B2 \u00b7 Upper intermediate': 'Alem\u00e1n B2 \u00b7 Intermedio alto',\n    'membership': 'suscripci\u00f3n', 'Start with Free \u2014 upgrade to Plus whenever you want the full learning experience. No credit card to get started.': 'Empieza con Free y pasa a Plus cuando quieras la experiencia completa. Sin tarjeta de cr\u00e9dito para empezar.',\n    'Your membership': 'Tu suscripci\u00f3n', 'Progress tracking and a personal profile': 'Seguimiento del progreso y perfil personal', 'Reminder emails': 'Recordatorios por email',\n    'Level test and all learning tools': 'Test de nivel y todas las herramientas', 'Everything in Free': 'Todo lo de Free', 'Saved test results to track your progress': 'Resultados de tests guardados para seguir tu progreso',\n    '\u20ac4 \/ month': '4 \u20ac \/ mes', '\/ month': '\/ mes', 'You are a member \ud83d\ude0a': 'Ya eres miembro \ud83d\ude0a',\n    'Get in touch': 'Escr\u00edbenos', 'us': 'nosotros', 'Questions, feedback, a request for the workbook or an idea for a new exercise? Write us a message.': '\u00bfPreguntas, comentarios, quieres el cuaderno o tienes una idea para un ejercicio nuevo? Escr\u00edbenos un mensaje.',\n    'Send a message': 'Env\u00eda un mensaje', 'We read every message personally.': 'Leemos cada mensaje personalmente.', 'Maybe you\u2019ll find the': 'Quiz\u00e1 encuentres la',\n    'answer': 'respuesta', 'here': 'aqu\u00ed', 'Many questions are already answered \u2014 have a quick look before you write.': 'Muchas preguntas ya tienen respuesta: \u00e9chales un vistazo antes de escribir.',\n    'Answers sorted by topic': 'Respuestas ordenadas por tema', 'Practise German by hand': 'Practica alem\u00e1n a mano', 'Free vs. Plus': 'Free vs. Plus', 'Membership': 'Suscripci\u00f3n',\n    'Send': 'Enviar', 'Account and membership': 'Cuenta y suscripci\u00f3n', 'Terms and Conditions': 'T\u00e9rminos y condiciones',\n    'Error 404': 'Error 404'\n  };\n\n  function setText(el, t) { if (el && el.textContent.trim() !== t) el.textContent = t; }\n\n  function banner() {\n    var b = document.querySelector('.cmplz-cookiebanner'); if (!b) return;\n    Object.keys(BANNER).forEach(function (s) { b.querySelectorAll(s).forEach(function (el) { if (!el.children.length || \/cmplz-message|cmplz-title\/.test(s)) setText(el, BANNER[s]); }); });\n    b.querySelectorAll('.cmplz-category-title, .screen-reader-text').forEach(function (el) { var t = el.textContent.trim(); if (CATS[t]) el.textContent = CATS[t]; });\n  }\n\n  function form() {\n    Object.keys(FORM).forEach(function (n) {\n      var f = document.querySelector('.wpcf7 [name=\"' + n + '\"]'); if (!f) return;\n      var lab = f.closest('label'); if (!lab) return;\n      for (var i = 0; i < lab.childNodes.length; i++) { var c = lab.childNodes[i]; if (c.nodeType === 3) { if (c.textContent.trim()) { c.textContent = FORM[n] + ' '; break; } } }\n    });\n    if (ES) { var s = document.querySelector('.wpcf7 input[type=submit]'); if (s) { if (s.value === 'Send') s.value = 'Enviar'; } }\n  }\n\n  function spanish(root) {\n    if (!ES) return;\n    var w = document.createTreeWalker(root || document.body, NodeFilter.SHOW_TEXT, {\n      acceptNode: function (n) { var p = n.parentNode; if (!p || \/^(SCRIPT|STYLE|TEXTAREA|NOSCRIPT)$\/.test(p.nodeName)) return 2; if (p.closest) { if (p.closest('#trainer-container, #trainer-home, .cmplz-cookiebanner')) return 2; } return 1; }\n    });\n    var n, list = [];\n    while ((n = w.nextNode())) list.push(n);\n    list.forEach(function (n) {\n      var raw = n.textContent, t = raw.replace(\/\\s+\/g, ' ').trim().split(String.fromCharCode(38)).join('and');\n      if (t) { if (D.hasOwnProperty(t)) n.textContent = raw.replace(raw.trim(), D[t]); }\n    });\n  }\n\n  function lang() {\n    if (ES) { var lt = document.getElementById('lt-es'); if (lt) { if (!window.__spxLt) { window.__spxLt = 1; lt.checked = true; } } }\n    var here = location.pathname.replace(\/^\\\/es(\\\/|$)\/, '\/');\n    document.querySelectorAll('a[href=\"https:\/\/sofapiano.com\/es\/\"], a[href=\"\/es\/\"], a.spx-lang-sw').forEach(function (a) {\n      if (a.closest('.trp-language-switcher, .cmplz-cookiebanner')) return;\n      if (!\/^(ES|EN|Espa\u00f1ol|English)$\/.test(a.textContent.trim())) return;\n      a.classList.add('spx-lang-sw');\n      if (ES) {\n        a.href = here + location.search;\n        a.setAttribute('aria-label', 'English');\n        if (a.textContent.trim().length <= 3) a.textContent = 'EN'; else a.textContent = 'English';\n      } else {\n        a.href = '\/es' + here + location.search;\n      }\n    });\n  }\n\n  function run() { try { banner(); form(); spanish(); lang(); } catch (e) {} }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', run); else run();\n  window.addEventListener('load', function () { run(); setTimeout(run, 800); });\n})();\n<\/script>\n<style id=\"spx-shell-css\">\n\/* Blogartikel, Archive, 404 (Men\u00fc wird dort per Loader aus dem alten Header-Template eingesetzt) *\/\nbody.spx-shell{background:#FBF8F2 radial-gradient(ellipse 80% 60% at 50% 0%,#FFFFFF 0%,#FBF8F2 55%,#F0EADE 100%) no-repeat!important;background-size:100% 1400px!important}\nbody.spx-shell #content,body.spx-shell main.site-main{box-sizing:border-box;width:100%!important;max-width:780px!important;margin:0 auto!important;padding:130px 20px 90px!important}\nbody.spx-shell .page-header{display:block!important;margin:0 0 22px!important;padding:0!important}\nbody.spx-shell .entry-title{display:block!important;margin:0!important;font-family:'Fraunces',Georgia,serif!important;font-size:clamp(30px,4.6vw,46px)!important;font-weight:600!important;line-height:1.12!important;letter-spacing:-.6px;color:#1D2427!important}\nbody.spx-shell .page-content,body.spx-shell .entry-content{font-family:'Inter','Segoe UI',Arial,sans-serif;font-size:17px;line-height:1.7;color:#1D2427}\nbody.spx-shell .page-content h2,body.spx-shell .entry-content h2{font-family:'Fraunces',Georgia,serif;font-weight:600;font-size:28px;line-height:1.2;letter-spacing:-.3px;margin:38px 0 12px;color:#1D2427}\nbody.spx-shell .page-content h3,body.spx-shell .entry-content h3{font-size:20px;font-weight:700;margin:28px 0 8px;color:#1D2427}\nbody.spx-shell .page-content a:not(.btn):not([class*=button]),body.spx-shell .entry-content a:not(.btn):not([class*=button]){color:#14708C;font-weight:600}\nbody.spx-shell .page-content img,body.spx-shell .entry-content img{max-width:100%;height:auto;border-radius:18px}\nbody.spx-shell .post-tags,body.spx-shell .comments-area{max-width:780px;margin-left:auto;margin-right:auto}\n.spx-404{text-align:center;padding:20px 0 40px}\n.spx-404 .k{margin:0 0 8px;font-family:'Fraunces',Georgia,serif;font-style:italic;font-size:18px;color:#14708C}\n.spx-404 h1{margin:0 0 14px;font-family:'Fraunces',Georgia,serif;font-size:clamp(34px,5vw,52px);font-weight:600;line-height:1.08;letter-spacing:-1px;color:#1D2427}\n.spx-404 h1 em{font-style:italic;font-weight:500;color:#14708C}\n.spx-404 .t{max-width:480px;margin:0 auto 24px;font-size:17px;line-height:1.6;color:#4B565A}\n.spx-404 .btns{display:flex;flex-wrap:wrap;justify-content:center;gap:10px}\n.spx-404 .btn{display:inline-flex;align-items:center;justify-content:center;min-height:50px;padding:0 24px;border-radius:999px;font:700 15px 'Inter',sans-serif;text-decoration:none}\n.spx-404 .b-teal{background:#14708C;color:#fff}.spx-404 .b-teal:hover{background:#0E5367;color:#fff}\n.spx-404 .b-ghost{background:#fff;color:#1D2427;border:1.5px solid #E5E0D6}.spx-404 .b-ghost:hover{border-color:#14708C;color:#14708C}\n@media (max-width:640px){body.spx-shell #content,body.spx-shell main.site-main{padding:110px 18px 70px!important}}\n<\/style>\n<style id=\"spx-page-bg\">\n\/* Einheitlicher Seitenhintergrund wie auf den Practice-Seiten (alle Seiten au\u00dfer Startseite) *\/\nbody:not(.home) .spx-page{background:radial-gradient(ellipse 80% 75% at 50% 0%,#FFFFFF 0%,#FBF8F2 50%,#F0EADE 100%)!important;min-height:60vh}\nbody:not(.home) .spx-page .spx,body:not(.home) .spx-page .spx .sec,body:not(.home) .spx-page .pg-head{background:transparent!important}\nbody:not(.home) .spx-page>.spx:last-child{padding-bottom:90px}\n<\/style>\n<template class=\"spx-dock-old\"><div class=\"spx spx-top\">\n<input type=\"checkbox\" id=\"spx-dock\" class=\"nav-toggle sr\" aria-label=\"Toggle menu\">\n<header class=\"nav\"><div class=\"nav-in\">\n <div class=\"dk-row1\">\n  <a class=\"logo\" href=\"https:\/\/sofapiano.com\/\"><span class=\"logo-mark\" aria-hidden=\"true\">s<\/span>sofapiano<\/a>\n  <div class=\"dk-lv dk-lv-d\" role=\"group\" aria-label=\"Your level\"><span class=\"dk-lv-l\">Your level<\/span><button type=\"button\" data-lv=\"A1\" aria-pressed=\"false\">A1<\/button><button type=\"button\" data-lv=\"A2\" aria-pressed=\"false\">A2<\/button><button type=\"button\" data-lv=\"B1\" aria-pressed=\"false\">B1<\/button><button type=\"button\" data-lv=\"B2\" aria-pressed=\"false\">B2<\/button><\/div>\n  <div class=\"nav-right\">\n   <a class=\"lang g-only\" href=\"https:\/\/sofapiano.com\/es\/\" aria-label=\"Espa\u00f1ol\">ES<\/a>\n   <a class=\"login g-only\" href=\"https:\/\/sofapiano.com\/membership-login\/\">Log in<\/a>\n   <a class=\"cta g-only\" href=\"https:\/\/sofapiano.com\/membership-join\/\">Start free<\/a>\n   <a class=\"gp mb-only spx-goal\" href=\"https:\/\/sofapiano.com\/membership-login\/#dt-1\" aria-label=\"Daily goal\">\n    <span class=\"gp-ring\"><span class=\"gp-in gp-n\">0<\/span><\/span>\n    <span class=\"gp-txt\"><span class=\"gp-main\">Daily goal<\/span><span class=\"gp-sub\">0 \/ 10<\/span><\/span>\n    <span class=\"gp-sep\" aria-hidden=\"true\"><\/span>\n    <span class=\"gp-streak\"><svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 22c4 0 7-3 7-7 0-4-3-6-4-10-2 2-3 4-3 6-1-1-2-2-2-4-2 2-5 5-5 8 0 4 3 7 7 7z\"\/><\/svg><span class=\"gp-s\">0<\/span><\/span>\n   <\/a>\n   <details class=\"acct mb-only\">\n    <summary aria-label=\"Account menu\"><span class=\"av ac-init\">S<\/span><span class=\"acct-name ac-nm\">Account<\/span><svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m6 9 6 6 6-6\"\/><\/svg><\/summary>\n    <div class=\"acct-p\">\n     <div class=\"ac-card\">\n      <div class=\"ac-top\"><span class=\"ac-nm\">Account<\/span><span class=\"ac-badge\">PLUS<\/span><\/div>\n      <div class=\"ac-row\"><span>Daily goal<\/span><b class=\"ac-val\">0 \/ 10<\/b><\/div>\n      <div class=\"ac-bar\"><i><\/i><\/div>\n      <div class=\"ac-note\">Loading your progress \u2026<\/div>\n      <a class=\"ac-go\" href=\"https:\/\/sofapiano.com\/membership-login\/#dt-2\">Continue practising<\/a>\n     <\/div>\n     <a class=\"ac-l\" href=\"https:\/\/sofapiano.com\/membership-login\/#dt-1\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M3 3h7v9H3zM14 3h7v5h-7zM14 12h7v9h-7zM3 16h7v5H3z\"\/><\/svg>My dashboard<\/a>\n     <a class=\"ac-l\" href=\"https:\/\/sofapiano.com\/membership-login\/#dt-3\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M6 3h12v18l-6-4-6 4z\"\/><\/svg>Saved Sentences<\/a>\n     <a class=\"ac-l\" href=\"https:\/\/sofapiano.com\/membership-login\/#dt-4\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M4 19V5a2 2 0 0 1 2-2h12v18H6a2 2 0 0 1-2-2zM8 7h6\"\/><\/svg>Grammar tracker<\/a>\n     <a class=\"ac-l\" href=\"https:\/\/sofapiano.com\/membership-login\/#dt-5\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M9 11l3 3 8-8M20 12v7a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h9\"\/><\/svg>Test results<\/a>\n     <a class=\"ac-l\" href=\"https:\/\/sofapiano.com\/membership-login\/#dt-8\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M4 20V10M10 20V4M16 20v-8M22 20H2\"\/><\/svg>Statistics<\/a>\n     <a class=\"ac-l\" href=\"https:\/\/sofapiano.com\/membership-login\/#dt-9\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 12a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM4 21a8 8 0 0 1 16 0\"\/><\/svg>Account &amp; membership<\/a>\n     <div class=\"ac-hr\"><\/div>\n     <a class=\"ac-l out\" href=\"https:\/\/sofapiano.com\/?swpm-logout=true\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4M10 17l-5-5 5-5M5 12h11\"\/><\/svg>Log out<\/a>\n    <\/div>\n   <\/details>\n   <label for=\"spx-dock\" class=\"burger\" aria-hidden=\"true\"><span><\/span><span><\/span><\/label>\n  <\/div>\n <\/div>\n <nav class=\"dk-row2\" aria-label=\"Main\">\n  <div class=\"dk-lv dk-lv-m\" role=\"group\" aria-label=\"Your level\"><span class=\"dk-lv-l\">Level<\/span><button type=\"button\" data-lv=\"A1\" aria-pressed=\"false\">A1<\/button><button type=\"button\" data-lv=\"A2\" aria-pressed=\"false\">A2<\/button><button type=\"button\" data-lv=\"B1\" aria-pressed=\"false\">B1<\/button><button type=\"button\" data-lv=\"B2\" aria-pressed=\"false\">B2<\/button><\/div>\n  <div class=\"dd g-only\">\n   <a class=\"nl\" href=\"https:\/\/sofapiano.com\/exercises\/\">Exercises <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m6 9 6 6 6-6\"\/><\/svg><\/a>\n   <div class=\"panel mega\">\n    <p class=\"pt\">CHOOSE YOUR LEVEL<\/p>\n    <div class=\"lvl-grid\">\n     <div class=\"lvl\" style=\"--c:#E3F5FC;--f:#0E1A20\"><b>A1<\/b><small>Beginner<\/small><a href=\"https:\/\/sofapiano.com\/a1-mixed-translations\/\">Sentences \u2192<\/a><a href=\"https:\/\/sofapiano.com\/a1-grammar-specific-translations\/\">Grammar \u2192<\/a><\/div>\n     <div class=\"lvl\" style=\"--c:#6EC1E4;--f:#0E1A20\"><b>A2<\/b><small>Elementary<\/small><a href=\"https:\/\/sofapiano.com\/a2-mixed-translations\/\">Sentences \u2192<\/a><a href=\"https:\/\/sofapiano.com\/a2-grammar-specific-translations\/\">Grammar \u2192<\/a><\/div>\n     <div class=\"lvl\" style=\"--c:#14708C;--f:#FFFFFF\"><b>B1<\/b><small>Intermediate<\/small><a href=\"https:\/\/sofapiano.com\/b1-mixed-translations\/\">Sentences \u2192<\/a><a href=\"https:\/\/sofapiano.com\/b1-grammar-specific-translations\/\">Grammar \u2192<\/a><\/div>\n     <div class=\"lvl\" style=\"--c:#0E1A20;--f:#FFFFFF\"><b>B2<\/b><small>Upper int.<\/small><a href=\"https:\/\/sofapiano.com\/b2-mixed-translations\/\">Sentences \u2192<\/a><a href=\"https:\/\/sofapiano.com\/b2-grammar-specific-translations\/\">Grammar \u2192<\/a><\/div>\n    <\/div>\n    <div class=\"panel-foot\"><a href=\"https:\/\/sofapiano.com\/exercises\/\">All exercises \u2192<\/a><a href=\"https:\/\/sofapiano.com\/quiz\/\">Quiz \u2192<\/a><a href=\"https:\/\/sofapiano.com\/level-test\/\">Not sure? Level test \u2192<\/a><\/div>\n   <\/div>\n  <\/div>\n  <a class=\"nl hl mb-only\" data-lvl-link=\"sentences\" href=\"https:\/\/sofapiano.com\/exercises\/\"><span class=\"dk-tag\"><\/span>Sentences<\/a>\n  <a class=\"nl mb-only\" data-lvl-link=\"grammar\" href=\"https:\/\/sofapiano.com\/exercises\/\"><span class=\"dk-tag\"><\/span>Grammar<\/a>\n  <a class=\"nl mb-only\" href=\"https:\/\/sofapiano.com\/quiz\/\">Quiz<\/a>\n  <div class=\"dd\">\n   <a class=\"nl\" href=\"https:\/\/sofapiano.com\/learning-tools\/\">Tools <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m6 9 6 6 6-6\"\/><\/svg><\/a>\n   <div class=\"panel tools-p\">\n    <a class=\"tl\" style=\"--c:#6EC1E4\" href=\"https:\/\/sofapiano.com\/listening-trainer\/\"><i><svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M3 14v-2a9 9 0 0 1 18 0v2M3 14h3v6H3zM18 14h3v6h-3z\"\/><\/svg><\/i><b>Listening Trainer<\/b><small>Train your ear<\/small><\/a>\n    <a class=\"tl\" style=\"--c:#FFCF33\" href=\"https:\/\/sofapiano.com\/word-context-search\/\"><i><svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M11 4a7 7 0 1 0 0 14 7 7 0 0 0 0-14zM21 21l-5-5\"\/><\/svg><\/i><b>Word Context Search<\/b><small>Words in real sentences<\/small><\/a>\n    <a class=\"tl\" style=\"--c:#F3A08C\" href=\"https:\/\/sofapiano.com\/word-video-search\/\"><i><svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M3 6h12v12H3zM15 10l6-3v10l-6-3\"\/><\/svg><\/i><b>Word Video Search<\/b><small>Hear it from natives<\/small><\/a>\n    <a class=\"tl\" style=\"--c:#9BE38A\" href=\"https:\/\/sofapiano.com\/synonym-finder\/\"><i><svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10M7 7l3-3M7 7l3 3M17 17H7M17 17l-3-3M17 17l-3 3\"\/><\/svg><\/i><b>Synonym Finder<\/b><small>Natural alternatives<\/small><\/a>\n    <a class=\"tl\" style=\"--c:#FFCF33\" href=\"https:\/\/sofapiano.com\/workbook\/\"><i><svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M4 20h4L19 9l-4-4L4 16zM13 7l4 4\"\/><\/svg><\/i><b>Workbooks<\/b><small>Practise by hand<\/small><\/a>\n    <a class=\"tl mb-only\" style=\"--c:#6EC1E4\" href=\"https:\/\/sofapiano.com\/my-sentences\/\"><i><svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M6 3h12v18l-6-4-6 4z\"\/><\/svg><\/i><b>Saved Sentences<\/b><small>Your personal list<\/small><\/a>\n   <\/div>\n  <\/div>\n  <a class=\"nl g-only\" href=\"https:\/\/sofapiano.com\/level-test\/\">Level test<\/a>\n  <a class=\"nl g-only\" href=\"https:\/\/sofapiano.com\/membership-join\/\">Pricing<\/a>\n  <a class=\"nl g-only\" href=\"https:\/\/sofapiano.com\/blog\/\">Blog<\/a>\n  <a class=\"nl mb-only\" href=\"https:\/\/sofapiano.com\/my-sentences\/\">Saved Sentences<\/a>\n  <div class=\"dk-r2r\">\n   <span class=\"dk-note g-only\">Free to start \u00b7 no credit card<\/span>\n   <a class=\"dk-upg mb-only free-only\" href=\"https:\/\/sofapiano.com\/membership-join\/\">Upgrade to Plus<\/a>\n   <a class=\"dk-dash mb-only\" href=\"https:\/\/sofapiano.com\/membership-login\/#dt-1\">My dashboard \u2192<\/a>\n  <\/div>\n  <div class=\"m-only\">\n   <a class=\"nl g-only\" href=\"https:\/\/sofapiano.com\/membership-login\/\">Log in<\/a>\n   <a class=\"nl mb-only\" href=\"https:\/\/sofapiano.com\/membership-login\/#dt-1\">My dashboard<\/a>\n   <a class=\"nl mb-only\" href=\"https:\/\/sofapiano.com\/?swpm-logout=true\">Log out<\/a>\n   <a class=\"nl\" href=\"https:\/\/sofapiano.com\/es\/\">Espa\u00f1ol<\/a>\n  <\/div>\n <\/nav>\n<\/div><\/header><\/div><\/template>\n<template class=\"spx-old-menu\"><div class=\"spx\">\n<input type=\"checkbox\" id=\"spx-menu\" class=\"nav-toggle sr\" aria-label=\"Toggle menu\">\n<header class=\"nav\">\n <div class=\"nav-in\">\n  <a class=\"logo\" href=\"https:\/\/sofapiano.com\/\"><span class=\"logo-dot\" aria-hidden=\"true\"><\/span>sofapiano<\/a>\n  <nav class=\"nav-links\" aria-label=\"Main\">\n   <div class=\"dd\">\n    <a class=\"nl\" href=\"https:\/\/sofapiano.com\/exercises\/\">Exercises <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m6 9 6 6 6-6\"\/><\/svg><\/a>\n    <div class=\"panel mega\">\n     <p class=\"pt\">CHOOSE YOUR LEVEL<\/p>\n     <div class=\"lvl-grid\">\n       <div class=\"lvl\" style=\"--c:#E3F5FC;--f:#0E1A20\"><b>A1<\/b><small>Beginner<\/small><a href=\"https:\/\/sofapiano.com\/a1-mixed-translations\/\">Sentences \u2192<\/a><a href=\"https:\/\/sofapiano.com\/a1-grammar-specific-translations\/\">Grammar \u2192<\/a><\/div>\n       <div class=\"lvl\" style=\"--c:#6EC1E4;--f:#0E1A20\"><b>A2<\/b><small>Elementary<\/small><a href=\"https:\/\/sofapiano.com\/a2-mixed-translations\/\">Sentences \u2192<\/a><a href=\"https:\/\/sofapiano.com\/a2-grammar-specific-translations\/\">Grammar \u2192<\/a><\/div>\n       <div class=\"lvl\" style=\"--c:#14708C;--f:#FFFFFF\"><b>B1<\/b><small>Intermediate<\/small><a href=\"https:\/\/sofapiano.com\/b1-mixed-translations\/\">Sentences \u2192<\/a><a href=\"https:\/\/sofapiano.com\/b1-grammar-specific-translations\/\">Grammar \u2192<\/a><\/div>\n       <div class=\"lvl\" style=\"--c:#0E1A20;--f:#FFFFFF\"><b>B2<\/b><small>Upper int.<\/small><a href=\"https:\/\/sofapiano.com\/b2-mixed-translations\/\">Sentences \u2192<\/a><a href=\"https:\/\/sofapiano.com\/b2-grammar-specific-translations\/\">Grammar \u2192<\/a><\/div>\n     <\/div>\n     <div class=\"panel-foot\"><a href=\"https:\/\/sofapiano.com\/exercises\/\">All exercises \u2192<\/a><a href=\"https:\/\/sofapiano.com\/quiz\/\">Quiz \u2192<\/a><a href=\"https:\/\/sofapiano.com\/level-test\/\">Not sure? Level test \u2192<\/a><\/div>\n    <\/div>\n   <\/div>\n   <div class=\"dd\">\n    <a class=\"nl\" href=\"https:\/\/sofapiano.com\/learning-tools\/\">Tools <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m6 9 6 6 6-6\"\/><\/svg><\/a>\n    <div class=\"panel tools-p\">\n      <a class=\"tl\" href=\"https:\/\/sofapiano.com\/listening-trainer\/\"><i style=\"background:#6EC1E4\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M3 14v-2a9 9 0 0 1 18 0v2M3 14h3v6H3zM18 14h3v6h-3z\"\/><\/svg><\/i><span><b>Listening Trainer<\/b><small>Train your ear<\/small><\/span><\/a>\n      <a class=\"tl\" href=\"https:\/\/sofapiano.com\/word-context-search\/\"><i style=\"background:#FFCF33\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M11 4a7 7 0 1 0 0 14 7 7 0 0 0 0-14zM21 21l-5-5\"\/><\/svg><\/i><span><b>Word Context Search<\/b><small>Words in real sentences<\/small><\/span><\/a>\n      <a class=\"tl\" href=\"https:\/\/sofapiano.com\/word-video-search\/\"><i style=\"background:#F3A08C\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M3 6h12v12H3zM15 10l6-3v10l-6-3\"\/><\/svg><\/i><span><b>Word Video Search<\/b><small>Hear it from natives<\/small><\/span><\/a>\n      <a class=\"tl\" href=\"https:\/\/sofapiano.com\/synonym-finder\/\"><i style=\"background:#9BE38A\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 7h10M7 7l3-3M7 7l3 3M17 17H7M17 17l-3-3M17 17l-3 3\"\/><\/svg><\/i><span><b>Synonym Finder<\/b><small>Natural alternatives<\/small><\/span><\/a>\n      <a class=\"tl\" href=\"https:\/\/sofapiano.com\/workbook\/\"><i style=\"background:#FFCF33\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M4 20h4L19 9l-4-4L4 16zM13 7l4 4\"\/><\/svg><\/i><span><b>Workbooks<\/b><small>Practise by hand<\/small><\/span><\/a>\n      <a class=\"tl\" href=\"https:\/\/sofapiano.com\/my-sentences\/\"><i style=\"background:#6EC1E4\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M6 3h12v18l-6-4-6 4z\"\/><\/svg><\/i><span><b>Saved Sentences<\/b><small>Your personal list<\/small><\/span><\/a>\n    <\/div>\n   <\/div>\n   <a class=\"nl g-only\" href=\"https:\/\/sofapiano.com\/level-test\/\">Level test<\/a>\n   <a class=\"nl g-only\" href=\"https:\/\/sofapiano.com\/membership-join\/\">Pricing<\/a>\n   <a class=\"nl g-only\" href=\"https:\/\/sofapiano.com\/blog\/\">Blog<\/a>\n   <a class=\"nl mb-only\" href=\"https:\/\/sofapiano.com\/quiz\/\">Quiz<\/a>\n   <a class=\"nl mb-only\" href=\"https:\/\/sofapiano.com\/membership-login\/#dt-1\">My dashboard<\/a>\n   <div class=\"m-only\">\n    <a class=\"nl g-only\" href=\"https:\/\/sofapiano.com\/membership-login\/\">Log in<\/a>\n    <a class=\"nl mb-only\" href=\"https:\/\/sofapiano.com\/?swpm-logout=true\">Log out<\/a>\n    <a class=\"nl\" href=\"https:\/\/sofapiano.com\/es\/\">Espa\u00f1ol<\/a>\n   <\/div>\n  <\/nav>\n  <div class=\"nav-right\">\n   <a class=\"lang g-only\" href=\"https:\/\/sofapiano.com\/es\/\" aria-label=\"Espa\u00f1ol\">ES<\/a>\n   <a class=\"login g-only\" href=\"https:\/\/sofapiano.com\/membership-login\/\">Log in<\/a>\n   <a class=\"cta g-only\" href=\"https:\/\/sofapiano.com\/membership-join\/\">Start free<\/a>\n   <a class=\"gp mb-only spx-goal\" href=\"https:\/\/sofapiano.com\/membership-login\/#dt-1\" aria-label=\"Daily goal\">\n    <span class=\"gp-ring\"><span class=\"gp-in gp-n\">0<\/span><\/span>\n    <span class=\"gp-txt\"><span class=\"gp-main\">Daily goal<\/span><span class=\"gp-sub\">0 \/ 10<\/span><\/span>\n    <span class=\"gp-sep\" aria-hidden=\"true\"><\/span>\n    <span class=\"gp-streak\"><svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 22c4 0 7-3 7-7 0-4-3-6-4-10-2 2-3 4-3 6-1-1-2-2-2-4-2 2-5 5-5 8 0 4 3 7 7 7z\"\/><\/svg><span class=\"gp-s\">0<\/span><\/span>\n   <\/a>\n   <details class=\"acct mb-only\">\n    <summary aria-label=\"Account menu\"><span class=\"av ac-init\">S<\/span><span class=\"acct-name ac-nm\">Account<\/span><svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m6 9 6 6 6-6\"\/><\/svg><\/summary>\n    <div class=\"acct-p\">\n     <div class=\"ac-card\">\n      <div class=\"ac-top\"><span class=\"ac-nm\">Account<\/span><span class=\"ac-badge\">PLUS<\/span><\/div>\n      <div class=\"ac-row\"><span>Daily goal<\/span><b class=\"ac-val\">0 \/ 10<\/b><\/div>\n      <div class=\"ac-bar\"><i><\/i><\/div>\n      <div class=\"ac-note\">Loading your progress \u2026<\/div>\n      <a class=\"ac-go\" href=\"https:\/\/sofapiano.com\/membership-login\/#dt-2\">Continue practising<\/a>\n     <\/div>\n     <a class=\"ac-l\" href=\"https:\/\/sofapiano.com\/membership-login\/#dt-1\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M3 3h7v9H3zM14 3h7v5h-7zM14 12h7v9h-7zM3 16h7v5H3z\"\/><\/svg>My dashboard<\/a>\n     <a class=\"ac-l\" href=\"https:\/\/sofapiano.com\/membership-login\/#dt-3\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M6 3h12v18l-6-4-6 4z\"\/><\/svg>Saved Sentences<\/a>\n     <a class=\"ac-l\" href=\"https:\/\/sofapiano.com\/membership-login\/#dt-4\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M4 19V5a2 2 0 0 1 2-2h12v18H6a2 2 0 0 1-2-2zM8 7h6\"\/><\/svg>Grammar tracker<\/a>\n     <a class=\"ac-l\" href=\"https:\/\/sofapiano.com\/membership-login\/#dt-5\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M9 11l3 3 8-8M20 12v7a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h9\"\/><\/svg>Test results<\/a>\n     <a class=\"ac-l\" href=\"https:\/\/sofapiano.com\/membership-login\/#dt-8\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M4 20V10M10 20V4M16 20v-8M22 20H2\"\/><\/svg>Statistics<\/a>\n     <a class=\"ac-l\" href=\"https:\/\/sofapiano.com\/membership-login\/#dt-9\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 12a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM4 21a8 8 0 0 1 16 0\"\/><\/svg>Account &amp; membership<\/a>\n     <div class=\"ac-hr\"><\/div>\n     <a class=\"ac-l out\" href=\"https:\/\/sofapiano.com\/?swpm-logout=true\"><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4M10 17l-5-5 5-5M5 12h11\"\/><\/svg>Log out<\/a>\n    <\/div>\n   <\/details>\n   <label for=\"spx-menu\" class=\"burger\" aria-hidden=\"true\"><span><\/span><span><\/span><\/label>\n  <\/div>\n <\/div>\n<\/header>\n<\/div><\/template>\n<script>\n(function(){\n var CSV = 'https:\/\/docs.google.com\/spreadsheets\/d\/1pGfdVy3yDtzS56FIxiP4KsHHYuKUqPWVG18ULv9wxi4\/export?format=csv&gid=588315623';\n var TTL = 120000;\n var st = { counts: {}, target: 10, ready: false };\n var started = false;\n\n function info() { return window.wpTrainerUserInfo || null; }\n function markMember() { if (info()) document.documentElement.classList.add('spx-member'); }\n markMember();\n\n function hashTab() {\n  var h = (location.hash || '').replace('#', '');\n  if (!\/^dt-[1-9]$\/.test(h)) return;\n  var r = document.getElementById(h);\n  if (!r) return;\n  r.checked = true;\n  try { r.dispatchEvent(new Event('change', { bubbles: true })); } catch (e) {}\n  var acct = document.querySelector('.spx-top .acct');\n  if (acct) acct.removeAttribute('open');\n }\n window.addEventListener('hashchange', hashTab);\n\n function dkey(d) { return d.toLocaleDateString('de-DE', { day: '2-digit', month: '2-digit', year: 'numeric' }); }\n function norm(s) {\n  if (!s) return '';\n  var p = String(s).trim().split(' ')[0];\n  if (p.indexOf('.') !== -1) return p;\n  if (p.indexOf('-') !== -1) { var a = p.split('-'); if (a[0].length === 4) return a[2] + '.' + a[1] + '.' + a[0]; }\n  return p;\n }\n function parseLine(t) {\n  var r = [], p = '', q = false;\n  for (var i = 0; t.length > i; i++) {\n   var c = t[i];\n   if (c === '\"') { q = !q; }\n   else if (c === ',') { if (q) { p += c; } else { r.push(p.trim()); p = ''; } }\n   else if (c === '\\r' || c === '\\n') { if (q) p += c; }\n   else { p += c; }\n  }\n  r.push(p.trim());\n  return r;\n }\n function calc(txt, u) {\n  var id = String(u.id || '').trim().toLowerCase();\n  var nm = String(u.name || '').trim().toLowerCase();\n  var lines = txt.split(\/\\r?\\n\/), counts = {}, exp = null, leg = null;\n  for (var i = 1; lines.length > i; i++) {\n   if (!lines[i].trim()) continue;\n   var c = parseLine(lines[i]);\n   if (3 > c.length) continue;\n   var uid = (c[1] || '').toLowerCase(), un = (c[2] || '').toLowerCase();\n   var match = false;\n   if (uid) { if (uid === id) match = true; }\n   if (!match) { if (un) { if (un === nm) match = true; } }\n   if (!match) continue;\n   var dk = norm(c[0]);\n   counts[dk] = (counts[dk] || 0) + 1;\n   var n = parseInt(c[10] || c[3], 10);\n   if (n > 0) { if ((c[8] || '').toLowerCase() === 'tagesziel_geandert') { exp = n; } else { leg = n; } }\n  }\n  return { counts: counts, target: exp || leg || 10 };\n }\n function streak() {\n  var s = 0, d = new Date();\n  for (var i = 0; 365 > i; i++) {\n   var v = st.counts[dkey(d)] || 0;\n   if (v >= st.target) { s++; } else if (i !== 0) { break; }\n   d.setDate(d.getDate() - 1);\n  }\n  return s;\n }\n function setText(sel, val) { document.querySelectorAll('.spx-top ' + sel).forEach(function (el) { el.textContent = val; }); }\n\n function render() {\n  var u = info();\n  if (!u) return;\n  var name = String(u.name || 'Account').trim() || 'Account';\n  setText('.ac-nm', name);\n  setText('.ac-init', name.charAt(0).toUpperCase());\n  var lvl = parseInt(u.level, 10) || 1;\n  document.querySelectorAll('.spx-top .ac-badge').forEach(function (b) {\n   b.textContent = lvl >= 3 ? 'PLUS' : 'FREE';\n   b.classList.toggle('free', !(lvl >= 3));\n  });\n  if (!st.ready) return;\n  var t = st.target, today = st.counts[dkey(new Date())] || 0;\n  var pct = Math.min(100, Math.round(today * 100 \/ t));\n  var done = today >= t, s = streak();\n  var main, sub;\n  if (done) { main = 'Goal reached!'; sub = today + ' \/ ' + t; }\n  else if (today === 0) { main = 'Start today\u2019s goal'; sub = '0 \/ ' + t; }\n  else { main = today + ' \/ ' + t + ' today'; sub = (t - today) + ' to go'; }\n  document.querySelectorAll('.spx-top .spx-goal').forEach(function (el) {\n   el.style.setProperty('--p', pct);\n   el.classList.toggle('done', done);\n   el.setAttribute('aria-label', 'Daily goal: ' + today + ' of ' + t + ' sentences today, ' + s + ' day streak');\n  });\n  setText('.gp-n', done ? '\u2713' : String(today));\n  setText('.gp-main', main);\n  setText('.gp-sub', sub);\n  setText('.gp-s', String(s));\n  setText('.ac-val', today + ' \/ ' + t);\n  document.querySelectorAll('.spx-top .ac-bar i').forEach(function (b) { b.style.width = pct + '%'; });\n  var left = t - today;\n  setText('.ac-note', (done ? 'Daily goal reached' : left + (left === 1 ? ' sentence' : ' sentences') + ' to go') + ' \u00b7 ' + s + ' day streak');\n }\n\n function cacheKey(u) { return 'spxGoal_' + String(u.id || u.name || ''); }\n function save(u) { try { sessionStorage.setItem(cacheKey(u), JSON.stringify({ at: Date.now(), counts: st.counts, target: st.target })); } catch (e) {} }\n\n function load() {\n  var u = info();\n  if (!u || started) return;\n  started = true;\n  markMember();\n  render();\n  try {\n   var c = JSON.parse(sessionStorage.getItem(cacheKey(u)) || 'null');\n   if (c) { if (TTL > Date.now() - c.at) { st.counts = c.counts || {}; st.target = c.target || 10; st.ready = true; render(); return; } }\n  } catch (e) {}\n  fetch(CSV + '&_cb=' + Date.now())\n   .then(function (r) { return r.text(); })\n   .then(function (txt) { var res = calc(txt, u); st.counts = res.counts; st.target = res.target; st.ready = true; save(u); render(); })\n   .catch(function () { st.ready = true; render(); });\n }\n\n window.addEventListener('tm-satz-bestaetigt', function () {\n  var u = info();\n  if (!u) return;\n  var k = dkey(new Date());\n  st.counts[k] = (st.counts[k] || 0) + 1;\n  st.ready = true;\n  save(u);\n  render();\n });\n\n document.addEventListener('click', function (e) {\n  document.querySelectorAll('.spx-top .acct[open]').forEach(function (a) { if (!a.contains(e.target)) a.removeAttribute('open'); });\n });\n\n function boot() { load(); hashTab(); if (!started) setTimeout(load, 800); }\n if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', boot); } else { boot(); }\n})();\n<\/script>\n<script>\n\/* ===== Level Dock: Level-Wahl + Gast\/Mitglied ===== *\/\n(function(){\n var LV = ['A1','A2','B1','B2'];\n function info(){ return window.wpTrainerUserInfo || null; }\n function mark(){\n  var u = info(), h = document.documentElement;\n  if (!u) return;\n  h.classList.add('spx-member');\n  h.classList.toggle('spx-plus', (parseInt(u.level, 10) || 1) >= 3);\n }\n function urlFor(l, kind){\n  if (!l) return 'https:\/\/sofapiano.com\/exercises\/';\n  var s = l.toLowerCase();\n  return kind === 'grammar' ? 'https:\/\/sofapiano.com\/' + s + '-grammar-specific-translations\/' : 'https:\/\/sofapiano.com\/' + s + '-mixed-translations\/';\n }\n function current(){\n  var m = location.pathname.match(\/\\\/(a1|a2|b1|b2)-\/i);\n  if (m) { var p = m[1].toUpperCase(); try { localStorage.setItem('spxLevel', p); } catch (e) {} return p; }\n  try { var s = localStorage.getItem('spxLevel'); if (LV.indexOf(s) > -1) return s; } catch (e) {}\n  return '';\n }\n function paint(l){\n  document.querySelectorAll('.spx-top [data-lv]').forEach(function (b) { b.setAttribute('aria-pressed', b.getAttribute('data-lv') === l ? 'true' : 'false'); });\n  document.querySelectorAll('.spx-top [data-lvl-link]').forEach(function (a) { a.href = urlFor(l, a.getAttribute('data-lvl-link')); });\n  document.querySelectorAll('.spx-top .dk-tag, .spx-top .ex-lvt').forEach(function (t) { t.textContent = l; });\n  \/* Eingeloggt + Level gew\u00e4hlt: im \u00dcbungs-Men\u00fc nur die \u00dcbungen dieses Levels zeigen *\/\n  var only = !!(info() && l);\n  document.querySelectorAll('.spx-top .ex-p').forEach(function (p) {\n   p.classList.toggle('ex-one', only);\n   p.querySelectorAll('.tl.ex').forEach(function (r) {\n    var t = r.querySelector('i.lv');\n    r.style.display = (only && t && t.textContent.trim() !== l) ? 'none' : '';\n   });\n  });\n }\n function boot(){\n  mark();\n  paint(current());\n  document.querySelectorAll('.spx-top [data-lv]').forEach(function (b) {\n   b.addEventListener('click', function () {\n    var l = b.getAttribute('data-lv');\n    try { localStorage.setItem('spxLevel', l); } catch (e) {}\n    paint(l);\n    if (!info()) location.href = urlFor(l, 'sentences');\n   });\n  });\n  setTimeout(mark, 900);\n }\n if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', boot); } else { boot(); }\n})();\n<\/script>\n<span hidden data-spx-mark=\"head-end\"><\/span>\n\n\n\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=Fraunces:ital,opsz,wght@0,9..144,400;0,9..144,600;1,9..144,400;1,9..144,500&amp;family=Inter:wght@400;500;600;700;800&amp;display=swap\">\n<style>\n.page-id-18812 .page-header,.page-id-18812 .entry-title{display:none!important}\n.page-id-18812 .site-main,.page-id-18812 .page-content{padding-top:0!important;margin-top:0!important}\n#spx{--ink:#1D2427;--dark:#0E1A20;--teal:#14708C;--sky:#6EC1E4;--sun:#FFCF33;--paper:#FBF8F2;--muted:#4B565A;--line:#EFEAE0;\n width:100vw;margin-left:calc(50% - 50vw);overflow-x:hidden;background:var(--paper);color:var(--ink);font-family:'Inter','Segoe UI',Roboto,Arial,sans-serif;font-size:16px;line-height:1.6;-webkit-font-smoothing:antialiased}\n#spx *{box-sizing:border-box}\n#spx h1,#spx h2,#spx h3,#spx p,#spx ul,#spx ol{margin:0;padding:0}\n#spx ul,#spx ol{list-style:none}\n#spx a{color:var(--teal);text-decoration:none}\n#spx a:hover{color:#0E5367}\n#spx .serif{font-family:'Fraunces',Georgia,serif}\n#spx em{font-style:italic}\n#spx .wrap{max-width:1200px;margin:0 auto;padding:0 24px}\n#spx .btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;min-height:54px;padding:0 26px;border-radius:999px;font-weight:700;font-size:16px;border:none;cursor:pointer;font-family:inherit}\n#spx .hero{background:var(--dark);color:#fff}\n#spx .hero .wrap{display:flex;flex-wrap:wrap;align-items:center;gap:56px;padding-top:150px;padding-bottom:110px}\n#spx .hero-text{flex:1 1 480px;min-width:0}\n#spx .hook{font-family:'Fraunces',Georgia,serif;font-style:italic;font-size:clamp(1.2rem,2vw,1.5rem);color:var(--sky);margin-bottom:22px}\n#spx h1{font-family:'Fraunces',Georgia,serif;font-weight:600;font-size:clamp(3rem,6.6vw,5.8rem);line-height:.98;letter-spacing:-2.2px;color:#fff;margin-bottom:26px}\n#spx h1 em{font-weight:500;color:var(--sky)}\n#spx .lead{font-size:1.2rem;color:#C9D6DB;max-width:540px;margin-bottom:34px}\n#spx .facts{display:flex;flex-wrap:wrap;gap:10px 26px;font-size:14px;font-weight:600;color:#E4ECEF}\n#spx .facts li{display:flex;align-items:center;gap:8px}\n#spx .facts i{width:8px;height:8px;border-radius:50%;display:inline-block}\n#spx .trainer-wrap{flex:1 1 460px;min-width:0;position:relative}\n#spx .sticker{position:absolute;z-index:2;background:var(--sun);color:var(--dark);font-size:13px;font-weight:800;padding:8px 14px;border-radius:999px;transform:rotate(4deg)}\n#spx .trainer{background:#fff;color:var(--ink);border-radius:26px;padding:30px;box-shadow:0 30px 70px rgba(0,0,0,.4)}\n#spx .t-top{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:10px;font-size:12px}\n#spx .t-topic{font-weight:700;letter-spacing:1px;color:var(--teal)}\n#spx .t-count{font-weight:600;color:#6A7477}\n#spx .t-en{font-family:'Fraunces',Georgia,serif;font-size:25px;font-weight:600;line-height:1.3;margin-bottom:18px}\n#spx label{display:block;font-size:13px;font-weight:600;color:var(--muted);margin-bottom:8px}\n#spx .t-row{display:flex;gap:10px;flex-wrap:wrap}\n#spx .t-input{flex:1 1 240px;min-width:0;font-family:inherit;font-size:17px;color:var(--ink);background:var(--paper);border:2px solid #E5E0D6;border-radius:14px;padding:13px 16px;min-height:52px;outline:none}\n#spx .t-input:focus{border-color:var(--teal);box-shadow:0 0 0 4px #D6EEF6}\n#spx .t-check{background:var(--teal);color:#fff;border-radius:14px;min-height:52px}\n#spx .t-result{margin-top:20px;padding-top:18px;border-top:1px dashed #E5E0D6}\n#spx .t-result[hidden]{display:none}\n#spx .t-msg{font-size:14px;font-weight:700;margin-bottom:12px}\n#spx .chips{display:flex;flex-wrap:wrap;gap:7px;font-family:'Fraunces',Georgia,serif;font-size:19px;font-weight:600}\n#spx .chip{padding:3px 10px;border-radius:8px}\n#spx .ok{background:#DCEBD9;color:#2E4B29}\n#spx .near{background:#FFF0B3;color:#5A3E00}\n#spx .miss{background:#F7DDD5;color:#8A3A25}\n#spx .legend{display:flex;flex-wrap:wrap;gap:14px;margin-top:14px;font-size:12px;font-weight:600;color:var(--muted)}\n#spx .legend span{display:inline-flex;align-items:center;gap:5px}\n#spx .legend i{width:10px;height:10px;border-radius:3px;display:inline-block}\n#spx .t-bottom{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;margin-top:20px}\n#spx .t-bottom .btn{min-height:44px;padding:0 16px;font-size:14px;font-weight:600;background:#F4F1EA;color:var(--ink)}\n#spx .marquee{background:var(--sun);color:var(--dark);overflow:hidden;border-top:2px solid var(--dark);border-bottom:2px solid var(--dark);transform:rotate(-1.2deg);margin:-16px -20px 0;position:relative;z-index:2}\n#spx .track{display:flex;width:max-content;padding:15px 0;font-family:'Fraunces',Georgia,serif;font-style:italic;font-size:25px;font-weight:500;white-space:nowrap;animation:spx-mq 40s linear infinite}\n#spx .track span{display:inline-flex;align-items:center;gap:26px;padding-right:26px}\n@keyframes spx-mq{from{transform:translateX(0)}to{transform:translateX(-50%)}}\n#spx .story{position:relative;padding-top:120px}\n#spx .thread{position:absolute;top:0;bottom:0;left:50%;border-left:2px dashed #C9DCE3}\n#spx .ch{position:relative;max-width:1120px;margin:0 auto;padding:0 24px 140px}\n#spx .dot{position:absolute;top:-40px;left:50%;transform:translateX(-50%);width:18px;height:18px;border-radius:50%;background:var(--paper);border:3px solid var(--teal)}\n#spx .ch-head{position:relative;background:var(--paper);text-align:center;max-width:720px;margin:0 auto 48px;padding:16px 0}\n#spx .kicker{font-family:'Fraunces',Georgia,serif;font-style:italic;font-size:20px;color:var(--teal);margin-bottom:10px}\n#spx h2{font-family:'Fraunces',Georgia,serif;font-weight:600;font-size:clamp(2rem,3.6vw,3rem);line-height:1.08;letter-spacing:-1px;color:var(--ink);margin-bottom:16px}\n#spx .ch p.txt{font-size:17px;color:var(--muted)}\n#spx .split{display:flex;flex-wrap:wrap;gap:48px;align-items:center}\n#spx .split>div{flex:1 1 380px;min-width:0}\n#spx .split>div:first-child{padding-right:30px}\n#spx .split>div:last-child{padding-left:30px}\n#spx .split p.txt+p.txt{margin-top:14px}\n#spx .contrast{background:#fff;border-radius:24px;box-shadow:0 18px 40px rgba(29,36,39,.08);overflow:hidden}\n#spx .crow{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));border-top:1px solid var(--line)}\n#spx .crow:first-child{border-top:0}\n#spx .crow p{padding:18px 22px}\n#spx .chead p{font-size:12px;font-weight:700;letter-spacing:1px;padding:16px 22px}\n#spx .chead p:first-child{background:#F4F1EA;color:#6A7477}\n#spx .chead p:last-child{background:var(--teal);color:#fff}\n#spx .crow .book{font-size:15px;color:#8E979A}\n#spx .crow .real{font-family:'Fraunces',Georgia,serif;font-size:18px;font-weight:600}\n#spx .steps{position:relative;display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:18px}\n#spx .steps li{border-radius:26px;padding:32px}\n#spx .num{font-family:'Fraunces',Georgia,serif;font-size:72px;font-weight:600;line-height:.9;display:block}\n#spx .steps h3{margin:18px 0 8px;font-size:20px;font-weight:700}\n#spx .steps p{font-size:15px}\n#spx .s1{background:var(--dark);color:#fff}#spx .s1 h3{color:#fff}#spx .s1 .num{color:transparent;-webkit-text-stroke:1.5px var(--sky)}#spx .s1 p{color:#C9D6DB}\n#spx .s2{background:var(--sky);color:var(--dark)}#spx .s2 .num{color:transparent;-webkit-text-stroke:1.5px var(--dark)}#spx .s2 p{color:#0E2A36}\n#spx .s3{background:var(--sun);color:var(--dark)}#spx .s3 p{color:#3D3200}\n#spx .levels{display:flex;flex-direction:column;gap:22px}\n#spx .levels li{display:flex}\n#spx .levels li:nth-child(even){justify-content:flex-end}\n#spx .lv{width:100%;max-width:480px;background:#fff;border-radius:22px;padding:26px;box-shadow:0 10px 28px rgba(29,36,39,.07)}\n#spx .lv-top{display:flex;align-items:center;gap:14px;margin-bottom:10px}\n#spx .badge{width:58px;height:58px;border-radius:16px;font-family:'Fraunces',Georgia,serif;font-size:26px;font-weight:600;display:flex;align-items:center;justify-content:center;flex-shrink:0}\n#spx .lv h3{font-size:18px;font-weight:700}\n#spx .lv h3 small{display:block;font-size:13px;font-weight:500;color:#6A7477}\n#spx .quote{font-family:'Fraunces',Georgia,serif;font-style:italic;font-size:18px;margin-bottom:6px}\n#spx .lv p.txt{font-size:15px;margin-bottom:16px}\n#spx .pills{display:flex;flex-wrap:wrap;gap:8px}\n#spx .pills a{font-size:14px;font-weight:600;background:#EAF5F9;padding:10px 14px;border-radius:999px}\n#spx .tools{position:relative;display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:16px}\n#spx .tool{display:flex;gap:16px;align-items:flex-start;color:var(--ink);background:#fff;border-radius:20px;padding:22px}\n#spx .tool:hover{color:var(--ink);box-shadow:0 10px 26px rgba(29,36,39,.08)}\n#spx .ticon{flex-shrink:0;width:46px;height:46px;border-radius:14px;display:flex;align-items:center;justify-content:center;color:var(--dark)}\n#spx .tool .when{display:block;font-family:'Fraunces',Georgia,serif;font-style:italic;font-size:14.5px;color:var(--teal)}\n#spx .tool strong{display:block;font-size:17px;font-weight:700;margin:2px 0}\n#spx .tool .d{display:block;font-size:14.5px;color:var(--muted)}\n#spx .prices{position:relative;display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:18px;max-width:912px;margin:0 auto}\n#spx .price{position:relative;border-radius:26px;padding:34px;display:flex;flex-direction:column}\n#spx .price h3{font-size:20px;font-weight:700;margin-bottom:4px}\n#spx .amount{font-family:'Fraunces',Georgia,serif;font-size:56px;font-weight:600;line-height:1;letter-spacing:-1.5px}\n#spx .price ul{display:flex;flex-direction:column;gap:12px;font-size:15px;flex-grow:1;margin:22px 0 28px}\n#spx .price li{display:flex;gap:10px}\n#spx .price li svg{flex-shrink:0;margin-top:3px}\n#spx .p-free{background:#fff}\n#spx .p-free .btn{border:1.5px solid var(--dark);color:var(--dark);background:transparent}\n#spx .p-plus{background:var(--dark);color:#fff}\n#spx .p-plus h3{color:#fff}\n#spx .p-plus .amount{color:var(--sky)}\n#spx .p-plus .btn{background:var(--sky);color:var(--dark)}\n#spx .note{position:relative;margin-top:18px;text-align:center;font-size:13px;color:#6A7477}\n#spx .faq{position:relative;max-width:732px;margin:0 auto;background:#fff;border-radius:24px;padding:6px 26px}\n#spx details{border-bottom:1px solid var(--line)}\n#spx details:last-child{border-bottom:0}\n#spx summary{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:20px 0;cursor:pointer;list-style:none}\n#spx summary::-webkit-details-marker{display:none}\n#spx summary h3{font-size:17px;font-weight:600}\n#spx .plus{flex-shrink:0;font-size:24px;color:var(--teal);transition:transform .2s}\n#spx details[open] .plus{transform:rotate(45deg)}\n#spx details p{padding:0 0 20px;font-size:15.5px;color:var(--muted)}\n#spx .faq-more{position:relative;margin-top:22px;text-align:center;font-size:15px;color:var(--muted)}\n#spx .cta{background:var(--sun);padding:100px 0}\n#spx .cta .big{font-family:'Fraunces',Georgia,serif;font-style:italic;font-size:clamp(4rem,12vw,10rem);font-weight:500;line-height:.9;letter-spacing:-3px;color:var(--dark)}\n#spx .cta-row{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:24px;margin-top:28px}\n#spx .cta h2{font-family:'Inter',sans-serif;font-size:clamp(1.4rem,2.4vw,1.9rem);font-weight:800;color:var(--dark);margin-bottom:8px;letter-spacing:0}\n#spx .cta p{font-size:17px;color:#3D3200}\n#spx .cta .btn{background:var(--dark);color:#fff;font-size:17px;min-height:58px;padding:0 30px}\n#spx .btns{display:flex;flex-wrap:wrap;gap:12px;margin-top:28px}\n#spx .ch-head .btns,#spx .btns.center{justify-content:center}\n#spx .b-teal{background:var(--teal);color:#fff}#spx .b-teal:hover{color:#fff;background:#0E5367}\n#spx .b-ghost{background:#fff;color:var(--ink);box-shadow:inset 0 0 0 1.5px #D9D2C4}#spx .b-ghost:hover{color:var(--ink);box-shadow:inset 0 0 0 1.5px var(--ink)}\n#spx .b-sky{background:var(--sky);color:var(--dark)}#spx .b-sky:hover{color:var(--dark);background:#8DD0EC}\n#spx .b-line{background:transparent;color:#fff;box-shadow:inset 0 0 0 1.5px #3A5A67}#spx .b-line:hover{color:#fff;box-shadow:inset 0 0 0 1.5px #fff}\n#spx .b-dark{background:transparent;color:var(--dark);box-shadow:inset 0 0 0 2px var(--dark)}#spx .b-dark:hover{color:var(--dark);background:rgba(14,26,32,.08)}\n#spx .stats{background:var(--dark);color:#fff;margin-top:-16px;padding:140px 0 120px}\n#spx .stats .eyebrow{font-family:'Fraunces',Georgia,serif;font-style:italic;font-size:clamp(1.2rem,2vw,1.5rem);color:var(--sky)}\n#spx .stats .big-s{font-family:'Fraunces',Georgia,serif;font-weight:600;font-size:clamp(2.3rem,5.2vw,4.6rem);line-height:1.08;letter-spacing:-1.8px;color:#fff;margin:30px 0 0;max-width:1120px}\n#spx .big-s>span{display:block}\n#spx .big-s>span+span{margin-top:.3em}\n#spx .big-s b{font-weight:inherit}\n#spx .big-s .y{color:var(--sun)}\n#spx .big-s .b{color:var(--sky)}\n#spx .big-s .g{color:#9BE38A}\n#spx .big-s .dim{color:#8FA6AE;font-weight:400}\n#spx .big-s em{font-weight:500;background:linear-gradient(transparent 72%,var(--teal) 72%);padding:0 6px}\n#spx .voice{background:var(--dark);border-radius:30px;padding:26px;display:flex;flex-direction:column;gap:16px;box-shadow:0 24px 60px rgba(14,26,32,.25)}\n#spx .vmsg{background:#16272F;border-radius:20px;padding:16px 18px}\n#spx .vtop{display:flex;align-items:center;gap:14px;margin-bottom:10px}\n#spx .vplay{flex-shrink:0;width:38px;height:38px;min-height:0;border-radius:50%;border:none;cursor:pointer;background:var(--c)!important;color:var(--dark)!important;display:flex;align-items:center;justify-content:center;padding:0!important;box-shadow:none}\n#spx .vplay svg{display:block}\n#spx .vplay:focus-visible{outline:2px solid #fff;outline-offset:3px}\n#spx .wave{flex:1;display:flex;align-items:center;gap:3px;height:26px}\n#spx .wave i{flex:1;display:block;border-radius:2px;background:var(--c);opacity:.85}\n#spx .vmsg.playing .wave i{animation:spx-w .6s ease-in-out infinite alternate}\n@keyframes spx-w{from{transform:scaleY(.35)}to{transform:scaleY(1)}}\n#spx .vtime{font-size:12px;font-weight:600;color:#8FA6AE}\n#spx .vreal{font-family:'Fraunces',Georgia,serif;font-size:19px;font-weight:600;color:#fff;margin-bottom:4px}\n#spx .vbook{font-size:12.5px;color:#8FA6AE}\n@media (prefers-reduced-motion:reduce){#spx .vmsg.playing .wave i{animation:none}}\n#spx h2 em{font-style:italic;font-weight:500;color:var(--teal)}\n#spx .anat{position:relative;background:var(--paper);padding:30px 0}\n#spx .anat-en{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:8px 16px;font-family:'Fraunces',Georgia,serif;font-size:22px;color:var(--muted);margin-bottom:20px}\n#spx .anat-en span{font-family:'Inter',sans-serif;font-size:12px;font-weight:800;letter-spacing:1.4px;color:#8E979A}\n#spx .anat-parts{display:flex;flex-wrap:wrap;gap:24px 16px}\n#spx .anat-parts>div{display:flex;flex-direction:column;gap:10px}\n#spx .anat-parts .w{font-family:'Fraunces',Georgia,serif;font-size:clamp(1.8rem,3vw,2.5rem);font-weight:600;letter-spacing:-.8px;line-height:1.1;white-space:nowrap;color:var(--ink)}\n#spx .anat-parts i{display:block;height:5px;border-radius:3px;background:var(--c)}\n#spx .anat-parts .n{font-size:12px;font-weight:800;letter-spacing:1px;color:var(--t)}\n#spx .anat-parts .d{font-size:14px;color:var(--muted);max-width:160px}\n#spx .why{position:relative;margin:60px auto 0;max-width:760px;text-align:center;background:var(--paper);padding:10px 0}\n#spx .why-h{font-family:'Fraunces',Georgia,serif;font-size:clamp(1.5rem,2.6vw,2rem);font-weight:600;line-height:1.25;color:var(--ink);margin-bottom:12px}\n#spx .why-h span{background:linear-gradient(transparent 65%,#FFE27A 65%);padding:0 4px}\n#spx .why-t{font-size:17px;color:var(--muted)}\n#spx .why .btns{justify-content:center}\n@media (max-width:760px){#spx .anat{padding:28px 22px}}\n#spx .cps{display:flex;justify-content:center;gap:16px;margin-top:4px}\n#spx .cp{display:flex;flex-direction:column;align-items:center;text-align:center}\n#spx .cp.up{flex-direction:column-reverse;padding-bottom:96px}\n#spx .cp.down{padding-top:96px}\n#spx .cp .w{font-family:'Fraunces',Georgia,serif;font-size:clamp(1.6rem,2.6vw,2.4rem);font-weight:600;letter-spacing:-.8px;line-height:1.15;white-space:nowrap;padding:6px 4px;border-top:4px solid var(--c);border-bottom:4px solid var(--c);color:var(--ink)}\n#spx .cp .lab{height:96px;display:flex;flex-direction:column;align-items:center;gap:4px}\n#spx .cp.up .lab{justify-content:flex-end}\n#spx .cp .n{font-size:11.5px;font-weight:800;letter-spacing:1px;color:var(--t)}\n#spx .cp .d{font-size:13.5px;color:var(--muted);max-width:200px}\n#spx .cp .ln{display:block;width:2px;height:18px;background:var(--c)}\n#spx .cp.up .ln{order:3;margin-top:6px}\n#spx .cp.down .ln{order:-1;margin-bottom:6px}\n@media (max-width:900px){#spx .cps{flex-direction:column;align-items:flex-start;gap:20px}#spx .cp,#spx .cp.up,#spx .cp.down{flex-direction:column;align-items:flex-start;text-align:left;padding:0}#spx .cp .lab{height:auto;align-items:flex-start;margin-top:8px}#spx .cp .ln{display:none}}\n#spx .ch2 .ch-head{margin-bottom:0;padding-bottom:12px}\n#spx .ch2 .anat{padding:12px 0 24px}\n#spx .ch2 .why{margin:0 auto;max-width:1072px;display:flex;align-items:center;justify-content:space-between;gap:32px;text-align:left;padding:24px 0 8px;border-top:1px solid #E5E0D6}\n#spx .ch2 .why-h{margin-bottom:6px;font-size:clamp(1.3rem,2vw,1.6rem)}\n#spx .ch2{padding-bottom:110px}\n#spx .ch2 .why .btns{margin-top:0;flex-shrink:0;justify-content:flex-end}\n@media (max-width:760px){#spx .ch2 .why{flex-direction:column;align-items:flex-start}#spx .ch2 .why .btns{justify-content:flex-start}}\n#spx .ch3 .st-head{position:relative;background:var(--paper);display:flex;justify-content:space-between;align-items:flex-end;gap:40px;padding-bottom:28px}\n#spx .ch3 .st-head>div{max-width:660px}\n#spx .ch3 .st-head .btn{flex-shrink:0}\n#spx .stair{position:relative;background:var(--paper);display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;align-items:end}\n#spx .stair li{min-height:var(--h);background:var(--bg);color:var(--fg);border-radius:24px 24px 8px 8px;padding:24px;display:flex;flex-direction:column;gap:10px}\n#spx .stair .top{display:flex;justify-content:space-between;align-items:flex-start;gap:8px}\n#spx .stair .code{font-family:'Fraunces',Georgia,serif;font-size:52px;font-weight:600;line-height:1;letter-spacing:-1.5px}\n#spx .stair h3{font-size:12px;font-weight:700;line-height:1.35;opacity:.85;color:inherit;text-align:right;padding-top:4px}\n#spx .stair .q{font-family:'Fraunces',Georgia,serif;font-style:italic;font-size:17px;line-height:1.35}\n#spx .stair .t{font-size:13.5px;opacity:.85;flex-grow:1}\n#spx .stair a{display:flex;justify-content:space-between;font-size:14px;font-weight:700;padding:10px 14px;border-radius:999px;color:var(--fg)}\n#spx .stair a.e{background:var(--lb);color:var(--lk)}\n#spx .stair a.g{box-shadow:inset 0 0 0 1.5px var(--ln)}\n#spx .stair a:hover{opacity:.88}\n@media (max-width:900px){#spx .stair{grid-template-columns:repeat(2,minmax(0,1fr))}#spx .stair li{min-height:0}}\n@media (max-width:560px){#spx .stair{grid-template-columns:minmax(0,1fr)}#spx .ch3 .st-head{flex-direction:column;align-items:flex-start}}\n.page-id-18812 .elementor-location-header,.page-id-18812 #site-header,.page-id-18812 header.site-header{display:none!important}\n#spx .sr{position:absolute;width:1px;height:1px;opacity:0;margin:0;pointer-events:none}\n#spx .nav{position:fixed;top:14px;left:0;right:0;z-index:999;padding:0 16px}\n.admin-bar #spx .nav{top:46px}\n#spx .nav-in{position:relative;max-width:1200px;margin:0 auto;display:flex;align-items:center;gap:18px;padding:8px 8px 8px 22px;border-radius:999px;background:rgba(14,26,32,.8);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:0 12px 34px rgba(0,0,0,.25),inset 0 0 0 1px rgba(255,255,255,.09)}\n#spx .logo{display:flex;align-items:center;gap:16px;font-family:'Fraunces',Georgia,serif;font-size:22px;font-weight:600;color:#fff;letter-spacing:-.3px}\n#spx .logo:hover{color:#fff}\n#spx .logo-dot{width:11px;height:11px;border-radius:50%;background:var(--sun);box-shadow:7px 0 0 var(--sky)}\n#spx .nav-links{display:flex;align-items:center;gap:2px;margin:0 auto}\n#spx .nl{display:inline-flex;align-items:center;gap:6px;padding:10px 14px;border-radius:999px;font-size:15px;font-weight:600;color:#D6E2E6;white-space:nowrap}\n#spx .nl:hover,#spx .dd:hover>.nl,#spx .dd:focus-within>.nl{background:rgba(255,255,255,.09);color:#fff}\n#spx .nl svg{transition:transform .2s}\n#spx .dd{position:relative}\n#spx .dd:hover>.nl svg,#spx .dd:focus-within>.nl svg{transform:rotate(180deg)}\n#spx .panel{position:absolute;top:calc(100% + 14px);left:50%;transform:translate(-50%,8px);opacity:0;visibility:hidden;transition:opacity .18s,transform .18s,visibility .18s;background:#fff;color:var(--ink);border-radius:24px;padding:20px;box-shadow:0 24px 60px rgba(14,26,32,.28)}\n#spx .panel::before{content:\"\";position:absolute;left:0;right:0;top:-16px;height:16px}\n#spx .dd:hover>.panel,#spx .dd:focus-within>.panel{opacity:1;visibility:visible;transform:translate(-50%,0)}\n#spx .mega{width:580px}\n#spx .pt{font-size:12px;font-weight:800;letter-spacing:1.3px;color:#8E979A;margin-bottom:12px}\n#spx .lvl-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}\n#spx .lvl{background:var(--c);color:var(--f);border-radius:16px;padding:14px;display:flex;flex-direction:column;gap:2px}\n#spx .lvl b{font-family:'Fraunces',Georgia,serif;font-size:30px;font-weight:600;line-height:1}\n#spx .lvl small{font-size:12px;opacity:.8;margin-bottom:10px}\n#spx .lvl a{font-size:13px;font-weight:700;color:inherit;padding:3px 0}\n#spx .lvl a:hover{color:inherit;text-decoration:underline}\n#spx .panel-foot{display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px 16px;margin-top:14px;padding-top:12px;border-top:1px solid var(--line);font-size:14px;font-weight:700}\n#spx .tools-p{width:540px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px}\n#spx .tl{display:flex;gap:12px;align-items:center;padding:10px;border-radius:14px;color:var(--ink)}\n#spx .tl:hover{background:#F4F1EA;color:var(--ink)}\n#spx .tl i{flex-shrink:0;width:38px;height:38px;border-radius:12px;display:flex;align-items:center;justify-content:center;color:var(--dark)}\n#spx .tl b{display:block;font-size:14.5px}\n#spx .tl small{display:block;font-size:12.5px;color:#6A7477}\n#spx .nav-right{display:flex;align-items:center;gap:6px;flex-shrink:0;margin-left:auto}\n#spx .lang{font-size:13px;font-weight:700;color:#D6E2E6;padding:8px 10px;border-radius:999px;box-shadow:inset 0 0 0 1px rgba(255,255,255,.2)}\n#spx .login{font-size:15px;font-weight:600;color:#fff;padding:10px 12px}\n#spx .lang:hover,#spx .login:hover{color:#fff}\n#spx .ncta{font-size:15px;font-weight:700;color:var(--dark);background:var(--sun);padding:12px 20px;border-radius:999px}\n#spx .ncta:hover{color:var(--dark);background:#FFD94F}\n#spx .burger{display:none;width:44px;height:44px;border-radius:50%;background:rgba(255,255,255,.1);cursor:pointer;flex-direction:column;align-items:center;justify-content:center;gap:5px}\n#spx .burger span{display:block;width:18px;height:2px;background:#fff;border-radius:2px;transition:transform .2s}\n#spx .nav-toggle:focus-visible ~ .nav .burger{outline:2px solid #fff;outline-offset:2px}\n#spx .m-only{display:none}\n@media (max-width:1020px){\n #spx .burger{display:flex}\n #spx .login,#spx .lang{display:none}\n #spx .nav-links{display:none;position:absolute;top:calc(100% + 10px);left:0;right:0;max-height:calc(100vh - 110px);overflow:auto;flex-direction:column;align-items:stretch;gap:4px;background:#0E1A20;border-radius:24px;padding:14px;box-shadow:0 24px 60px rgba(0,0,0,.35)}\n #spx .nav-toggle:checked ~ .nav .nav-links{display:flex}\n #spx .nav-toggle:checked ~ .nav .burger span:first-child{transform:translateY(3.5px) rotate(45deg)}\n #spx .nav-toggle:checked ~ .nav .burger span:last-child{transform:translateY(-3.5px) rotate(-45deg)}\n #spx .nl{display:flex;justify-content:space-between;padding:12px 14px;font-size:17px}\n #spx .nl svg{display:none}\n #spx .panel{position:static;transform:none;opacity:1;visibility:visible;width:auto;box-shadow:none;margin:2px 0 10px;padding:14px;border-radius:18px}\n #spx .panel::before{display:none}\n #spx .dd:hover>.panel,#spx .dd:focus-within>.panel{transform:none}\n #spx .mega,#spx .tools-p{width:auto}\n #spx .lvl-grid{grid-template-columns:repeat(2,minmax(0,1fr))}\n #spx .tools-p{grid-template-columns:minmax(0,1fr)}\n #spx .m-only{display:block;border-top:1px solid #24404C;margin-top:6px;padding-top:6px}\n #spx .nav-in{padding-left:18px}\n}\n#spx .feat{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:16px;margin-top:56px}\n#spx .feat>div{background:#16272F;border-radius:20px;padding:22px;display:flex;gap:16px;align-items:flex-start}\n#spx .feat .fi{flex-shrink:0;width:44px;height:44px;border-radius:13px;color:var(--dark);display:flex;align-items:center;justify-content:center}\n#spx .feat .ft{font-size:18px;font-weight:800;color:#fff;margin-bottom:4px}\n#spx .feat .fd{font-size:14.5px;color:#8FA6AE}\n#spx .proof{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:24px 36px;border-top:1px solid #24404C;padding-top:26px}\n#spx .proof div{display:flex;gap:14px}\n#spx .proof i{flex-shrink:0;width:10px;height:10px;margin-top:8px;border-radius:50%;display:inline-block}\n#spx .proof p{font-size:15.5px;color:#C9D6DB}\n#spx .proof strong{color:#fff}\n@media (max-width:760px){\n #spx .thread,#spx .dot{left:22px}\n #spx .ch{padding-left:52px}\n #spx .split>div:first-child,#spx .split>div:last-child{padding:0}\n #spx .levels li:nth-child(even){justify-content:flex-start}\n #spx .crow p{padding:14px 14px}\n}\n@media (prefers-reduced-motion:reduce){#spx .track{animation:none}}\n\/* --- Kapitel 1: Sprachnachrichten ohne dunklen Kasten --- *\/\n#spx .voice{background:transparent;padding:0;box-shadow:none;border-radius:0;gap:14px}\n#spx .vmsg{background:var(--dark);border-radius:22px;padding:18px 20px;box-shadow:0 14px 34px rgba(14,26,32,.22)}\n#spx .vmsg:nth-child(2){margin-left:36px}\n@media (max-width:760px){#spx .vmsg:nth-child(2){margin-left:0}}\n\/* --- Kapitel 2: Satz vor dem Beispiel, Button mittig darunter --- *\/\n#spx .ch2 .why.why-top{display:block;text-align:center;max-width:760px;margin:0 auto;padding:8px 0 4px;border-top:0}\n#spx .ch2 .why.why-top .why-h{margin-bottom:10px}\n#spx .ch2 .why-btn{position:relative;margin:0;padding:6px 0 30px;background:var(--paper)}\n\/* Kapitel 2: Linie l\u00e4uft nicht durch den Bereich *\/\n#spx .ch2 .ch-head,#spx .ch2 .why.why-top,#spx .ch2 .anat{margin-top:0;margin-bottom:0;background:var(--paper)}\n#spx .ch2 .why.why-top{padding-bottom:14px}\n\/* Kapitel 3: Button weiter oben, keine Buttons in den Level-Balken *\/\n#spx .ch3 .st-head{flex-direction:column;align-items:center;text-align:center;gap:22px}\n\/* Your choice: Linie nicht durch den Bereich, mehr Abstand zwischen den Karten *\/\n#spx #pricing .ch-head{margin-bottom:0;padding-bottom:40px}\n#spx #pricing .prices{background:var(--paper);grid-template-columns:repeat(2,minmax(0,1fr));gap:40px;max-width:960px}\n#spx #pricing .note{margin:0;padding:24px 0 6px;background:var(--paper)}\n#spx #pricing .btns{margin:0;padding:36px 0 8px;background:var(--paper)}\n@media (max-width:760px){#spx #pricing .prices{grid-template-columns:minmax(0,1fr);gap:28px}}\n#spx .ch3 .st-head>div{margin:0 auto}\n#spx .ch3 .st-head .btn{margin-top:0;align-self:center}\n#spx .stair .t{flex-grow:0}\n\/* --- Kapitel 3: Level-Test-Hinweis unter der Treppe --- *\/\n#spx .lvl-cta{position:relative;margin:30px auto 0;max-width:820px;background:#fff;border-radius:999px;padding:12px 12px 12px 30px;display:flex;align-items:center;justify-content:space-between;gap:20px;box-shadow:0 12px 30px rgba(29,36,39,.07)}\n#spx .lvl-cta p{font-size:16px;color:var(--muted)}\n#spx .lvl-cta strong{color:var(--ink)}\n#spx .lvl-cta .btn{flex-shrink:0}\n@media (max-width:760px){#spx .lvl-cta{flex-direction:column;align-items:flex-start;border-radius:22px;padding:20px}}\n\/* --- FAQ: nummerierte Karten --- *\/\n#spx .faq{position:relative;max-width:820px;margin:0 auto;background:var(--paper);border-radius:0;padding:4px 0;display:flex;flex-direction:column;gap:12px;counter-reset:fq}\n#spx .faq details{background:#fff;border:1.5px solid var(--line);border-radius:20px;transition:border-color .2s,box-shadow .2s}\n#spx .faq details:last-child{border-bottom:1.5px solid var(--line)}\n#spx .faq details:hover{border-color:#C9DCE3}\n#spx .faq details[open]{border-color:var(--teal);box-shadow:0 16px 36px rgba(20,112,140,.12)}\n#spx .faq summary{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:18px;padding:20px 22px;min-height:44px}\n#spx .faq summary::before{counter-increment:fq;content:counter(fq,decimal-leading-zero);font-family:'Fraunces',Georgia,serif;font-size:22px;font-weight:600;color:#8E979A;min-width:30px;transition:color .2s}\n#spx .faq details[open] summary::before{color:var(--teal)}\n#spx .faq summary:focus-visible{outline:2px solid var(--teal);outline-offset:3px;border-radius:20px}\n#spx .faq summary h3{font-size:17.5px;font-weight:700;line-height:1.35;color:var(--ink)}\n#spx .fq-ic{width:38px;height:38px;border-radius:50%;background:#F4F1EA;color:var(--ink);display:flex;align-items:center;justify-content:center;transition:transform .25s,background .2s,color .2s}\n#spx .faq details[open] .fq-ic{transform:rotate(45deg);background:var(--teal);color:#fff}\n#spx .faq details p{padding:0 22px 22px 70px;font-size:16px;line-height:1.65;color:var(--muted)}\n@media (max-width:560px){#spx .faq summary{gap:12px;padding:18px 16px}#spx .faq details p{padding:0 16px 18px 16px}#spx .faq summary::before{font-size:18px;min-width:24px}}\n\/* ===== Neu: hellerer Kopfbereich (Petrol statt Schwarz) + Zahlen-Abschnitt aus Variante 3 ===== *\/\n#spx .hero{background:var(--teal)}\n#spx .hook{color:#CFEFFB}\n#spx h1 em{color:var(--sun)}\n#spx .lead{color:#E6F3F7}\n#spx .b-line{box-shadow:inset 0 0 0 1.5px rgba(255,255,255,.55)}\n#spx .b-line:hover{box-shadow:inset 0 0 0 1.5px #fff}\n#spx .stats{background:var(--teal);color:#fff;padding:130px 0 110px;text-align:center}\n#spx .sx-eyebrow{margin:0;font-size:12px;font-weight:800;letter-spacing:1.3px;text-transform:uppercase;color:#CFEFFB}\n#spx .sx-line{display:flex;flex-wrap:wrap;justify-content:center;gap:6px 22px;max-width:1100px;margin:18px auto 0;font-family:'Fraunces',Georgia,serif;font-weight:600;font-size:clamp(2rem,4.6vw,3.8rem);line-height:1.15;letter-spacing:-1px;color:#fff}\n#spx .sx-line b{font-weight:inherit;color:var(--sun)}\n#spx .stats .sx-line em{font-weight:500;font-style:italic;color:#fff;background:none;padding:0}\n#spx .sx-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:16px;margin-top:48px;text-align:left}\n#spx .sx-card{display:flex;gap:16px;align-items:flex-start;background:#fff;border-radius:24px;padding:24px;box-shadow:0 1px 2px rgba(14,26,32,.06),0 14px 30px rgba(14,26,32,.12)}\n#spx .sx-ic{flex-shrink:0;width:44px;height:44px;border-radius:13px;display:flex;align-items:center;justify-content:center;color:var(--dark)}\n#spx .sx-t{margin:0 0 4px;font-size:18px;font-weight:800;color:var(--ink)}\n#spx .sx-d{margin:0;font-size:15px;line-height:1.55;color:var(--muted)}\n@media (max-width:760px){#spx .stats{padding:110px 0 80px}#spx .sx-line{gap:4px 14px}}\n\/* ===== Neu: keine schwarzen K\u00e4sten mehr ===== *\/\n#spx .vmsg{background:#fff;box-shadow:0 1px 2px rgba(29,36,39,.04),0 12px 30px rgba(29,36,39,.08)}\n#spx .vreal{color:var(--ink)}\n#spx .vbook,#spx .vtime{color:var(--muted)}\n#spx .vplay:focus-visible{outline-color:var(--teal)}\n#spx .p-plus{background:var(--teal);color:#fff}\n#spx .p-plus .amount{color:var(--sun)}\n#spx .p-plus li svg{stroke:var(--sun)}\n#spx .p-plus p span[style]{color:#E6F3F7!important}\n#spx .p-plus .btn{background:var(--sun);color:var(--dark)}\n#spx .p-plus .btn:hover{background:#FFD94F;color:var(--dark)}\n#spx .cta .btn{background:var(--teal);color:#fff}\n#spx .cta .btn:hover{background:#0E5367;color:#fff}\n#spx .cta .btn.b-dark{background:transparent;color:var(--dark)}\n\/* ===== Neu: K\u00e4sten nicht mehr reinwei\u00df, sondern weich get\u00f6nt ===== *\/\n#spx{--card:#F3EEE4;--card-line:#E6DFD1;--card-teal:#E2F0F4}\n#spx .vmsg,#spx .tool,#spx .p-free,#spx .lv,#spx .contrast,#spx .lvl-cta{background:var(--card);border:1px solid var(--card-line);box-shadow:none}\n#spx .tool:hover{box-shadow:none;border-color:#CFC6B4}\n#spx .faq details{background:var(--card);border-color:var(--card-line)}\n#spx .faq details:hover{border-color:#CFC6B4}\n#spx .faq details[open]{border-color:var(--teal);box-shadow:none}\n#spx .fq-ic{background:#E8E1D3}\n#spx .sx-card{background:var(--card-teal);box-shadow:0 10px 24px rgba(14,26,32,.12)}\n#spx .trainer{background:#F2F8FA;box-shadow:0 20px 50px rgba(14,26,32,.25)}\n#spx .t-input{background:#fff}\n#spx .t-count{color:#5E686B}\n#spx .b-ghost{background:transparent}\n\/* ===== Update 28.10.: Kapitel-Schrift, Step by step als Split, kompaktere FAQ ===== *\/\n#spx .stats .sx-eyebrow{font-family:'Fraunces',Georgia,serif;font-style:italic;font-weight:400;font-size:20px;letter-spacing:0;text-transform:none;color:#CFEFFB}\n#spx .ch3 .st-split{position:relative;background:var(--paper)}\n#spx .ch3 .st-split .btns{justify-content:flex-start}\n#spx .st-split .stair{grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;background:transparent}\n#spx .st-split .stair li{min-height:calc(var(--h) * .5);padding:16px 14px;border-radius:18px 18px 6px 6px;gap:6px}\n#spx .st-split .stair .top{flex-direction:column;align-items:flex-start;gap:4px}\n#spx .st-split .stair .code{font-size:34px}\n#spx .st-split .stair h3{font-size:11px;text-align:left;padding-top:0}\n#spx .st-split .stair .q{font-size:13.5px}\n#spx .st-split .stair .t{display:none}\n\/* Step by step: Level als Halbkreis nach rechts (A1 unten, B2 oben) *\/\n#spx .st-split .stair{display:block!important;position:relative;width:480px;max-width:100%;height:480px;margin:0 0 0 auto;padding:0;list-style:none}\n#spx .st-split .stair::before{content:\"\";position:absolute;left:-160px;top:40px;width:400px;height:400px;box-sizing:border-box;border-radius:50%;border:3px dashed #BFDCE5;clip-path:inset(0 0 0 50%);pointer-events:none}\n#spx .st-split .stair::after{content:\"\";position:absolute;left:30px;top:30px;width:20px;height:20px;border-radius:50%;background:#FFCF33;box-shadow:0 0 0 6px rgba(255,207,51,.25)}\n#spx .st-split .stair li{position:absolute;z-index:1;display:grid!important;grid-template-columns:64px minmax(0,1fr);column-gap:14px;row-gap:2px;align-items:center;width:280px;min-height:0!important;padding:10px 18px 10px 10px!important;box-sizing:border-box;border-radius:999px!important;background:#fff!important;color:#1D2427!important;box-shadow:0 1px 2px rgba(29,36,39,.05),0 12px 28px rgba(29,36,39,.09);transition:transform .2s}\n#spx .st-split .stair li:hover{transform:translateX(6px)}\n#spx .st-split .stair li:nth-child(1){left:74px;top:383px}\n#spx .st-split .stair li:nth-child(2){left:183px;top:274px}\n#spx .st-split .stair li:nth-child(3){left:183px;top:121px}\n#spx .st-split .stair li:nth-child(4){left:74px;top:13px}\n#spx .st-split .stair .top{display:contents}\n#spx .st-split .stair .code{grid-row:1 \/ 3;grid-column:1;display:flex;align-items:center;justify-content:center;width:64px;height:64px;border-radius:50%;background:var(--bg);color:var(--fg);font-size:24px!important;letter-spacing:-.5px}\n#spx .st-split .stair h3{grid-column:2;grid-row:1;margin:0;font-size:11.5px!important;font-weight:800;letter-spacing:.3px;text-transform:uppercase;color:#4B565A;opacity:1;align-self:end}\n#spx .st-split .stair h3 br{display:none}\n#spx .st-split .stair h3 .sep{display:inline}\n#spx .st-split .stair::after{display:none}\n#spx .st-split .stair .q{grid-column:2;grid-row:2;margin:0;font-size:14.5px!important;line-height:1.3;color:#1D2427;align-self:start}\n@media (max-width:1100px){\n #spx .st-split .stair{width:auto;height:auto;margin:0;display:flex!important;flex-direction:column-reverse;gap:10px}\n #spx .st-split .stair::before,#spx .st-split .stair::after{display:none}\n #spx .st-split .stair li{position:relative;left:auto!important;top:auto!important;width:100%;border-radius:22px!important}\n #spx .st-split .stair li:nth-child(1){margin-left:0}\n #spx .st-split .stair li:nth-child(2){margin-left:4%}\n #spx .st-split .stair li:nth-child(3){margin-left:8%}\n #spx .st-split .stair li:nth-child(4){margin-left:12%}\n #spx .st-split .stair li{width:auto}\n}\n@media (max-width:900px){#spx .st-split .stair{grid-template-columns:repeat(2,minmax(0,1fr))}#spx .st-split .stair li{min-height:0}}\n#spx .faq{gap:8px;max-width:780px}\n#spx .faq details{border-width:1px;border-radius:14px}\n#spx .faq summary{padding:13px 16px;gap:14px;min-height:0}\n#spx .faq summary::before{font-size:15px;min-width:22px}\n#spx .faq summary h3{font-size:15.5px;font-weight:600}\n#spx .fq-ic{width:28px;height:28px}\n#spx .fq-ic svg{width:13px;height:13px}\n#spx .faq details p{padding:0 16px 16px 52px;font-size:15px}\n@media (max-width:560px){#spx .faq details p{padding:0 16px 14px}}\n<\/style>\n\n<div id=\"spx\">\n\n\n<section class=\"hero\" aria-labelledby=\"spx-h1\">\n <div class=\"wrap\">\n  <div class=\"hero-text\">\n   \n   <p class=\"hook\">You know the words. So why won\u2019t the sentence come?<\/p>\n   <h1 id=\"spx-h1\">Learn German <em>through translation.<\/em><\/h1>\n   <p class=\"lead\">Learn German the way native speakers actually speak. From textbook German to real conversations- one sentence at a time \u2013 from A1 to B2.<\/p>\n   \n   <div class=\"btns\" style=\"margin-top:0\">\n    <a class=\"btn b-sky\" href=\"https:\/\/sofapiano.com\/exercises\/\">Start practicing now<\/a>\n    <a class=\"btn b-line\" href=\"https:\/\/sofapiano.com\/membership-join\/\">Create free account<\/a>\n   <\/div>\n  <\/div>\n\n  <div class=\"trainer-wrap\" id=\"try\">\n   <span class=\"sticker\" aria-hidden=\"true\" style=\"top:-18px;right:24px\">Try it \u2014 it\u2019s live<\/span>\n<div id=\"trainer-home\" class=\"th-app\">\n<style>\n\/* Startseiten-Trainer im Design der neuen Startseite (Petrol, Himmelblau, Creme, Fraunces + Inter) *\/\n#trainer-home.th-app {\n  --teal: #14708C; --teal-dark: #0E5367; --teal-soft: #E2F0F4; --teal-ring: #D6EEF6;\n  --sky: #6EC1E4; --sun: #FFCF33; --dark: #0E1A20;\n  --ink: #1D2427; --muted: #4B565A; --muted2: #5E686B;\n  --paper: #FBF8F2; --soft: #F4F1EA; --soft-hover: #ECE6DA; --field: #E5E0D6;\n  --serif: 'Fraunces', Georgia, 'Times New Roman', serif;\n  --correct: #DCEBD9; --correct-ink: #2E4B29;\n  --tip: #FFF0B3; --tip-ink: #5A3E00;\n  --missing: #F7DDD5; --missing-ink: #8A3A25;\n  display: block; width: 100%; max-width: 100%; min-width: 0;\n  font-family: 'Inter', 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; color: var(--ink);\n  text-align: left;\n}\n#trainer-home.th-app *, #trainer-home.th-app *::before, #trainer-home.th-app *::after { box-sizing: border-box; }\n#trainer-home svg { display: block; }\n\n\/* ---- Karte wie die Live-Demo der Startseite ---- *\/\n#trainer-home .th-card {\n  position: relative; width: 100%; border-radius: 26px; padding: 26px 30px 28px;\n  background: #F2F8FA; color: var(--ink);\n  box-shadow: 0 20px 50px rgba(14,26,32,0.25);\n}\n\n\/* ---- Levelauswahl ---- *\/\n#trainer-home .th-levels {\n  --count: 4; --idx: 0;\n  position: relative; display: grid; grid-template-columns: repeat(var(--count), 1fr);\n  padding: 4px; margin: 0 0 22px; max-width: 300px; border-radius: 999px;\n  background: var(--teal-soft);\n}\n#trainer-home .th-thumb {\n  position: absolute; top: 4px; bottom: 4px; left: 4px; border-radius: 999px;\n  width: calc((100% - 8px) \/ var(--count));\n  transform: translateX(calc(var(--idx) * 100%));\n  background: var(--teal);\n  box-shadow: 0 4px 10px rgba(20,112,140,0.3);\n  transition: transform 0.35s cubic-bezier(.3,1.25,.5,1);\n}\n#trainer-home .th-level {\n  all: unset; position: relative; z-index: 1; box-sizing: border-box; cursor: pointer; text-align: center;\n  min-height: 38px; display: flex; align-items: center; justify-content: center;\n  font-size: 13px; font-weight: 800; letter-spacing: 0.4px; color: var(--teal);\n  border-radius: 999px; transition: color 0.25s ease;\n}\n#trainer-home .th-level:hover { color: var(--teal-dark); }\n#trainer-home .th-level.active, #trainer-home .th-level.active:hover { color: #FFFFFF; }\n#trainer-home .th-level:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }\n\n\/* ---- Satz ---- *\/\n#trainer-home .th-stage { width: 100%; min-width: 0; animation: thIn 0.4s ease both; }\n@keyframes thIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } }\n#trainer-home .th-eyebrow {\n  display: block; font-size: 12px; font-weight: 700; letter-spacing: 1px;\n  text-transform: uppercase; color: var(--teal); margin-bottom: 10px;\n}\n#trainer-home .th-source {\n  display: block; font-family: var(--serif); font-weight: 600; font-optical-sizing: auto;\n  font-size: 25px; line-height: 1.3; color: var(--ink); margin: 0 0 18px;\n  overflow-wrap: anywhere;\n}\n\n\/* ---- Eingabe (Desktop) ---- *\/\n#trainer-home .th-label { display: block; font-size: 13px; font-weight: 600; color: var(--muted); margin-bottom: 8px; }\n#trainer-home .th-input-wrap { position: relative; }\n#trainer-home textarea {\n  display: block; width: 100%; min-height: 52px; height: 52px; resize: none; overflow-y: hidden;\n  padding: 13px 52px 13px 16px; border-radius: 14px; text-align: left; line-height: 1.4;\n  font-family: inherit; font-size: 17px; font-weight: 500; color: var(--ink);\n  background: #FFFFFF; border: 2px solid var(--field);\n  transition: box-shadow 0.2s ease, border-color 0.2s ease;\n}\n#trainer-home textarea::placeholder { color: #8E979A; font-weight: 500; }\n#trainer-home textarea:focus { outline: none; border-color: var(--teal); box-shadow: 0 0 0 4px var(--teal-ring); }\n#trainer-home textarea:disabled { opacity: 0.55; cursor: not-allowed; }\n#trainer-home .th-mic {\n  all: unset; position: absolute; right: 6px; top: 4px; width: 44px; height: 44px; border-radius: 10px;\n  display: flex; align-items: center; justify-content: center; cursor: pointer; color: var(--muted2);\n  transition: color 0.15s ease, background 0.15s ease;\n}\n#trainer-home .th-mic:hover { color: var(--teal); background: var(--teal-soft); }\n#trainer-home .th-mic.recording { color: var(--missing-ink); background: var(--missing); animation: thPulse 0.8s infinite ease-in-out; }\n@keyframes thPulse { 0%,100% { transform: scale(1); } 50% { transform: scale(1.12); } }\n#trainer-home .th-hint { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 600; color: var(--muted2); }\n#trainer-home .th-hint kbd {\n  font-family: inherit; font-size: 11px; font-weight: 700; padding: 3px 7px; border-radius: 6px;\n  background: #FFFFFF; border: 1px solid var(--field); color: var(--teal);\n}\n\n\/* ---- Puzzle-Modus (Handy) ---- *\/\n#trainer-home .th-reveal { display: none; flex-wrap: wrap; gap: 7px; }\n#trainer-home .th-reveal-hint { display: none; }\n#trainer-home .th-reveal-alt:empty { display: none; }\n#trainer-home .reveal-word {\n  display: inline-block; padding: 8px 13px; border-radius: 10px;\n  background: #FFFFFF; font-family: var(--serif);\n  color: transparent; text-shadow: 0 0 8px rgba(29,36,39,0.75);\n  user-select: none; -webkit-user-select: none; -webkit-touch-callout: none; touch-action: pan-y;\n  cursor: pointer; font-size: 18px; font-weight: 600;\n  border: 1.5px solid var(--field);\n  transition: background 0.25s, color 0.15s, text-shadow 0.15s, transform 0.1s, border-color 0.25s;\n}\n#trainer-home .reveal-word.dragging { transform: scale(1.07); }\n#trainer-home .reveal-word.revealed { color: var(--ink); text-shadow: none; cursor: default; }\n#trainer-home .reveal-word.revealed.correct-word { background: var(--correct); color: var(--correct-ink); border-color: transparent; }\n#trainer-home .reveal-word.revealed.wrong-word { background: var(--missing); color: var(--missing-ink); border-color: transparent; }\n\n\/* ---- Unterzeile: Hinweis + Check\/Next ---- *\/\n#trainer-home .th-actionrow { display: flex; justify-content: space-between; align-items: center; gap: 12px; flex-wrap: wrap; margin-top: 18px; }\n#trainer-home .th-action {\n  all: unset; box-sizing: border-box; cursor: pointer; display: inline-flex; align-items: center; justify-content: center; gap: 8px;\n  min-height: 48px; padding: 0 24px; border-radius: 14px; font-size: 15px; font-weight: 700; color: #FFFFFF;\n  background: var(--teal); margin-left: auto;\n  transition: background 0.15s ease, transform 0.12s ease, opacity 0.2s ease;\n}\n#trainer-home .th-action:hover { background: var(--teal-dark); }\n#trainer-home .th-action:active { transform: scale(0.97); }\n#trainer-home .th-action:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }\n#trainer-home .th-action.is-next { background: var(--soft); color: var(--ink); }\n#trainer-home .th-action.is-next:hover { background: var(--soft-hover); }\n#trainer-home .th-action.is-locked { opacity: 0.35; cursor: not-allowed; pointer-events: none; }\n\n\/* Handy = Puzzle, Desktop = Tippen *\/\n@media (max-width: 800px) {\n  #trainer-home .th-input-wrap, #trainer-home .th-label, #trainer-home .th-hint { display: none; }\n  #trainer-home .th-reveal { display: flex; }\n  #trainer-home .th-reveal-hint { display: block; margin-top: 12px; font-size: 12px; font-weight: 600; color: var(--muted2); }\n}\n\n\/* ---- Feedback ---- *\/\n#trainer-home .th-feedback { display: none; margin-top: 18px; padding-top: 16px; border-top: 1px dashed var(--field); }\n#trainer-home .th-feedback.show { display: block; animation: thIn 0.3s ease both; }\n#trainer-home .th-msg { font-size: 14px; font-weight: 700; margin: 0 0 10px; }\n#trainer-home .th-words { display: flex; flex-wrap: wrap; gap: 7px; font-family: var(--serif); font-size: 19px; font-weight: 600; user-select: text; overflow-wrap: anywhere; }\n#trainer-home .th-words .correct, #trainer-home .th-words .tip, #trainer-home .th-words .missing { padding: 3px 10px; border-radius: 8px; }\n#trainer-home .th-words .correct { color: var(--correct-ink); background: var(--correct); }\n#trainer-home .th-words .tip { color: var(--tip-ink); background: var(--tip); }\n#trainer-home .th-words .missing { color: var(--missing-ink); background: var(--missing); }\n#trainer-home .th-legend { display: flex; flex-wrap: wrap; gap: 14px; margin-top: 12px; font-size: 12px; font-weight: 600; color: var(--muted); }\n#trainer-home .th-legend span { display: inline-flex; align-items: center; gap: 5px; }\n#trainer-home .th-legend i { width: 10px; height: 10px; border-radius: 3px; display: inline-block; }\n#trainer-home .th-alt {\n  flex-basis: 100%; margin-top: 10px; font-family: var(--serif); font-style: italic;\n  font-size: 15px; font-weight: 500; color: var(--muted); line-height: 1.45;\n}\n#trainer-home .th-reveal-alt .th-alt { margin-top: 14px; }\n\/* Startseite: ohne Feldbeschriftung, ohne Enter-Hinweis, beim Check nur die L\u00f6sung *\/\n#trainer-home .th-label, #trainer-home .th-hint, #trainer-home .th-msg, #trainer-home .th-legend { display: none !important; }\n\n\/* ---- Tageslimit: Weiter zu den \u00dcbungen ---- *\/\n#trainer-home .th-cta { display: flex; margin-top: 20px; animation: thIn 0.35s ease both; }\n#trainer-home .th-cta-btn {\n  display: inline-flex; align-items: center; justify-content: center; gap: 8px;\n  min-height: 52px; padding: 0 26px; border-radius: 999px; font-size: 16px; font-weight: 700;\n  text-decoration: none !important; color: var(--dark) !important; background: var(--sun);\n  transition: background 0.15s ease, transform 0.12s ease;\n}\n#trainer-home .th-cta-btn:hover { background: #FFD94F; }\n#trainer-home .th-cta-btn:active { transform: scale(0.97); }\n#trainer-home .th-cta-btn:focus-visible { outline: 2px solid var(--teal); outline-offset: 3px; }\n\n#trainer-home .th-empty { padding: 30px 6px; color: var(--muted); font-size: 14px; line-height: 1.6; }\n#trainer-home .th-loading { animation: thLoad 1.3s ease-in-out infinite; }\n@keyframes thLoad { 0%,100% { opacity: 0.5; } 50% { opacity: 1; } }\n\n@media (max-width: 800px) {\n  #trainer-home .th-card { padding: 20px 18px 22px; border-radius: 22px; }\n  #trainer-home .th-levels { max-width: none; }\n  #trainer-home .th-source { font-size: 22px; }\n  #trainer-home textarea { font-size: 16px; }\n  #trainer-home .th-words { font-size: 17px; }\n}\n@media (prefers-reduced-motion: reduce) {\n  #trainer-home * { animation-duration: 0.001ms !important; transition-duration: 0.001ms !important; }\n}\n<\/style>\n\n<div class=\"th-card\">\n  <div class=\"th-levels\" id=\"thLevels\"><span class=\"th-thumb\"><\/span><\/div>\n  <div id=\"thStage\" class=\"th-stage\"><div class=\"th-empty th-loading\">Loading...<\/div><\/div>\n<\/div>\n\n<script>\n(function(container){\n    \/\/ ============ EINSTELLUNGEN ============\n    const LEVELS = [\"A1\", \"A2\", \"B1\", \"B2\"];   \/\/ angezeigte Level\n    const START_LEVEL = \"A1\";                   \/\/ Startlevel\n    const MANUAL_TOPIC_AREA = \"Startseite\";     \/\/ Topic Area (Spalte D im Blatt \"Themen\"); \"\" = alle Bereiche\n    const MANUAL_TOPIC_ID = \"\";                 \/\/ optional: nur ein Thema (ID aus dem Blatt \"Themen\"); \"\" = alle\n    const EXERCISES_URL = \"https:\/\/sofapiano.com\/exercises\/\";   \/\/ Ziel des Buttons bei erreichtem Tageslimit\n\n    const DAILY_LIMIT_GUEST  = 3;    \/\/ G\u00e4ste (S\u00e4tze pro Tag)\n    const DAILY_LIMIT_MEMBER = 3;    \/\/ angemeldet, nicht zahlend\n    const DAILY_LIMIT_PAYER  = 0;    \/\/ zahlend (Level 2\/3) \u2013 0 = unbegrenzt\n\n    const UI = {\n        en: { loading: \"Loading...\", placeholder: \"Type in German\u2026\", eyebrow: \"Translate into German\",\n              label: \"Your German translation\",\n              hintCheck: \"to check\", hintNext: \"for next sentence\", mic: \"Speech to Text\",\n              btnCheck: \"Check\", btnNext: \"Next sentence\",\n              revealHint: \"Tap = knew it \u00b7 swipe left = didn't know\",\n              noData: \"No sentences for this selection yet.\",\n              msgPerfect: \"Perfekt! Every word is correct.\", msgEmpty: \"Give it a try \u2014 type your translation above.\",\n              msgPart: (ok, all) => `${ok} of ${all} words correct.`,\n              legOk: \"correct\", legNear: \"almost\", legMiss: \"missing\",\n              limitCta: \"Start practising now \u2192\" },\n        es: { loading: \"Cargando...\", placeholder: \"Escribe en alem\u00e1n\u2026\", eyebrow: \"Traduce al alem\u00e1n\",\n              label: \"Tu traducci\u00f3n al alem\u00e1n\",\n              hintCheck: \"para validar\", hintNext: \"para la siguiente frase\", mic: \"Reconocimiento de voz\",\n              btnCheck: \"Valida\", btnNext: \"Siguiente frase\",\n              revealHint: \"Toca = lo sab\u00eda \u00b7 desliza a la izquierda = no lo sab\u00eda\",\n              noData: \"A\u00fan no hay frases para esta selecci\u00f3n.\",\n              msgPerfect: \"\u00a1Perfekt! Todas las palabras son correctas.\", msgEmpty: \"Int\u00e9ntalo: escribe tu traducci\u00f3n arriba.\",\n              msgPart: (ok, all) => `${ok} de ${all} palabras correctas.`,\n              legOk: \"correcto\", legNear: \"casi\", legMiss: \"falta\",\n              limitCta: \"Empieza a practicar ahora \u2192\" }\n    };\n    const ALT_LABEL = \"Alternative: \";\n    const MIC_ICON = '<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" aria-hidden=\"true\"><rect x=\"9\" y=\"3\" width=\"6\" height=\"11\" rx=\"3\"\/><path d=\"M5 11a7 7 0 0 0 14 0M12 18v3\"\/><\/svg>';\n\n    const SHEET_ID = '1pGfdVy3yDtzS56FIxiP4KsHHYuKUqPWVG18ULv9wxi4';\n    const URL_S = `https:\/\/docs.google.com\/spreadsheets\/d\/${SHEET_ID}\/export?format=csv&gid=0`;\n    const URL_T = `https:\/\/docs.google.com\/spreadsheets\/d\/${SHEET_ID}\/export?format=csv&gid=368365373`;\n    const URL_GOAL = `https:\/\/docs.google.com\/spreadsheets\/d\/${SHEET_ID}\/export?format=csv&gid=588315623`;\n    const LOG_URL = 'https:\/\/script.google.com\/macros\/s\/AKfycbz7ViqxDaSi1l2M0o4rsPHqS09qmgosQy34eIJmBhfd1hs2SBbRAuc3nrJC4D4KfBoPPQ\/exec';\n\n    \/\/ ============ STATE ============\n    let allData = [], topics = [];\n    let currentLevel = LEVELS.includes(START_LEVEL) ? START_LEVEL : LEVELS[0];\n    let currentLang = detectSiteLanguage();\n    let pool = [], lastId = null, current = null, checked = false;\n    let baseCounts = {}, liveModifier = 0;\n\n    const levelsEl = container.querySelector('#thLevels');\n    const stageEl = container.querySelector('#thStage');\n\n    \/\/ Seitensprache: 1) <html lang>, 2) URL-Pfad (z.B. \/es\/), 3) Browsersprache; Fallback Englisch\n    function detectSiteLanguage() {\n        const supported = Object.keys(UI);\n        const pathLang = (location.pathname.split('\/')[1] || '').toLowerCase().split('-')[0];\n        const cands = [document.documentElement.lang, pathLang, navigator.language, navigator.languages && navigator.languages[0]]\n            .filter(Boolean).map(v => String(v).toLowerCase().split('-')[0]);\n        for (const c of cands) if (supported.includes(c)) return c;\n        return \"en\";\n    }\n\n    \/\/ ============ NUTZER \/ GAST ============\n    function generateGuestId() {\n        if (window.crypto && typeof window.crypto.randomUUID === 'function') return 'guest-' + window.crypto.randomUUID();\n        return 'guest-' + Date.now().toString(36) + '-' + Math.random().toString(36).slice(2, 10);\n    }\n    function getGuestId() {\n        try {\n            let id = window.localStorage.getItem('trainerGuestId');\n            if (!id) { id = generateGuestId(); window.localStorage.setItem('trainerGuestId', id); }\n            return id;\n        } catch (e) { return generateGuestId(); }\n    }\n    function getActiveUserInfo() {\n        if (window.wpTrainerUserInfo) return window.wpTrainerUserInfo;\n        return { id: getGuestId(), name: 'Gast', level: 1 };\n    }\n    function getUserAccessLevel() {\n        const info = window.wpTrainerUserInfo;\n        const lvl = info && info.level != null ? parseInt(info.level, 10) : 1;\n        return (lvl === 2 || lvl === 3) ? lvl : 1;\n    }\n    function topicAccess(topicId) {\n        const t = topics.find(x => x.id === topicId);\n        return t ? (t.accessLevel || 1) : 1;\n    }\n\n    \/\/ ============ LOGGING ============\n    async function logToGoogle(data) {\n        const u = getActiveUserInfo();\n        data.user_id = u.id; data.user_name = u.name;\n        try {\n            await fetch(LOG_URL, { method: 'POST', mode: 'no-cors', cache: 'no-cache',\n                headers: { 'Content-Type': 'application\/json' }, body: JSON.stringify(data) });\n        } catch (e) { console.error(\"Logging Fehler:\", e); }\n    }\n\n    \/\/ ============ TAGESLIMIT ============\n    function normDate(s) {\n        if (!s) return \"\";\n        const d = s.trim().split(\" \")[0];\n        if (d.includes('.')) return d;\n        if (d.includes('-')) { const p = d.split('-'); if (p[0].length === 4) return `${p[2]}.${p[1]}.${p[0]}`; }\n        return d;\n    }\n    const todayKey = () => new Date().toLocaleDateString('de-DE', { day: '2-digit', month: '2-digit', year: 'numeric' });\n    const todayCount = () => (baseCounts[todayKey()] || 0) + liveModifier;\n    function currentLimit() {\n        if (!window.wpTrainerUserInfo) return DAILY_LIMIT_GUEST;\n        return getUserAccessLevel() >= 2 ? DAILY_LIMIT_PAYER : DAILY_LIMIT_MEMBER;\n    }\n    function limitReached() {\n        const l = currentLimit();\n        return l > 0 && todayCount() >= l;\n    }\n    async function loadDailyCounts() {\n        const u = getActiveUserInfo();\n        const userName = String(u.name || \"\").trim().toLowerCase();\n        const userId = String(u.id || \"\").trim().toLowerCase();\n        try {\n            const res = await fetch(`${URL_GOAL}&_cb=${Date.now()}`);\n            const lines = (await res.text()).split(\/\\r?\\n\/);\n            baseCounts = {};\n            for (let i = 1; i < lines.length; i++) {\n                if (!lines[i]) continue;\n                const cols = lines[i].split(\/,(?=(?:(?:[^\"]*\"){2})*[^\"]*$)\/).map(v => v ? v.trim().replace(\/^\"|\"$\/g, '').replace(\/\"\"\/g, '\"') : \"\");\n                if (!(cols.length >= 3)) continue;\n                const rId = (cols[1] || \"\").toLowerCase(), rName = (cols[2] || \"\").toLowerCase();\n                const match = userId.startsWith('guest-') ? (rId && rId === userId) : ((rId && rId === userId) || (rName && rName === userName));\n                if (match) { const d = normDate(cols[0]); baseCounts[d] = (baseCounts[d] || 0) + 1; }\n            }\n        } catch (e) { console.error(\"Tageslimit-Fehler:\", e); }\n        applyLimitState();\n    }\n    function applyLimitState() {\n        const ta = stageEl.querySelector('textarea');\n        if (!ta) return;\n        const mic = stageEl.querySelector('.th-mic');\n        const action = stageEl.querySelector('.th-action');\n        let cta = stageEl.querySelector('.th-cta');\n        const reached = limitReached();\n        const lock = reached && !checked;\n        ta.disabled = lock;\n        if (mic) mic.style.pointerEvents = reached ? 'none' : '';\n        stageEl.querySelectorAll('.reveal-word').forEach(w => {\n            if (!w.classList.contains('revealed')) w.style.pointerEvents = lock ? 'none' : '';\n        });\n        if (action) {\n            action.classList.toggle('is-locked', lock);\n            action.style.display = reached ? 'none' : '';\n        }\n        if (reached) {\n            if (!cta) {\n                cta = document.createElement('div');\n                cta.className = 'th-cta';\n                const btn = document.createElement('a');\n                btn.className = 'th-cta-btn';\n                btn.href = EXERCISES_URL;\n                btn.textContent = UI[currentLang].limitCta;\n                cta.appendChild(btn);\n                stageEl.appendChild(cta);\n            }\n        } else if (cta) cta.remove();\n    }\n    window.addEventListener('tm-user-switched', () => { liveModifier = 0; loadDailyCounts(); if (topics.length) buildPool(); });\n\n    \/\/ ============ TEXTVERGLEICH ============\n    function lev(a, b) {\n        const m = [];\n        for (let i = 0; i <= b.length; i++) m[i] = [i];\n        for (let j = 0; j <= a.length; j++) m[0][j] = j;\n        for (let i = 1; i <= b.length; i++) for (let j = 1; j <= a.length; j++) {\n            m[i][j] = b.charAt(i-1) === a.charAt(j-1) ? m[i-1][j-1] : Math.min(m[i-1][j-1] + 1, m[i][j-1] + 1, m[i-1][j] + 1);\n        }\n        return m[b.length][a.length];\n    }\n    const normalize = t => t ? t.toLowerCase().trim().replace(\/[.,!?]\/g, '').replace(\/\u00e4\/g,'ae').replace(\/\u00f6\/g,'oe').replace(\/\u00fc\/g,'ue').replace(\/\u00df\/g,'ss').replace(\/\\s+\/g, ' ') : \"\";\n    function fuzzyEq(a, b) {\n        if (!a || !b) return false;\n        if (a === b) return true;\n        const max = Math.max(a.length, b.length);\n        return lev(a, b) <= (max <= 4 ? 1 : (max <= 8 ? 2 : 3));\n    }\n    function alignWords(target, user) {\n        const n = target.length, m = user.length;\n        const dp = Array.from({length: n + 1}, () => new Array(m + 1).fill(0));\n        const hit = Array.from({length: n + 1}, () => new Array(m + 1).fill(false));\n        for (let i = 1; i <= n; i++) for (let j = 1; j <= m; j++) {\n            if (fuzzyEq(target[i-1], user[j-1])) { dp[i][j] = dp[i-1][j-1] + 1; hit[i][j] = true; }\n            else dp[i][j] = Math.max(dp[i-1][j], dp[i][j-1]);\n        }\n        let i = n, j = m;\n        const al = new Array(n).fill(null);\n        while (i > 0 && j > 0) {\n            if (hit[i][j] && dp[i][j] === dp[i-1][j-1] + 1) { al[i-1] = j-1; i--; j--; }\n            else if (dp[i-1][j] >= dp[i][j-1]) i--; else j--;\n        }\n        return al;\n    }\n\n    \/\/ ============ DATEN ============\n    const clean = v => v ? v.trim().replace(\/^\ufeff\/, '').replace(\/^\"|\"$\/g, '').replace(\/\"\"\/g, '\"') : \"\";\n    const splitRow = row => row.split(\/,(?=(?:(?:[^\"]*\"){2})*[^\"]*$)\/);\n    const lc = v => (v || \"\").trim().toLowerCase();\n\n    async function fetchText(url) {\n        const res = await fetch(url);\n        if (!res.ok) throw new Error(\"HTTP \" + res.status);\n        return res.text();\n    }\n\n    async function loadData() {\n        try {\n            const [csvS, csvT] = await Promise.all([fetchText(URL_S), fetchText(URL_T)]);\n            allData = csvS.split(\/\\r?\\n\/).slice(1).filter(r => r.trim()).map(row => {\n                const c = splitRow(row);\n                return { id: clean(c[0]), level: clean(c[1]), topicId: clean(c[2]), de: clean(c[4]), en: clean(c[5]), es: clean(c[6]), alt: clean(c[7]) };\n            }).filter(r => r.de);\n            topics = csvT.split(\/\\r?\\n\/).slice(1).filter(r => r.trim()).map(row => {\n                const c = splitRow(row);\n                const raw = parseInt(clean(c[10]), 10);\n                return { level: clean(c[0]), id: clean(c[1]), area: clean(c[3]), accessLevel: (raw === 2 || raw === 3) ? raw : 1 };\n            });\n            buildPool();\n        } catch (e) {\n            console.error(\"Fehler beim Laden:\", e);\n            renderEmpty();\n        }\n    }\n\n    function buildPool() {\n        const userLevel = getUserAccessLevel();\n        pool = allData.filter(d => {\n            if (d.level !== currentLevel) return false;\n            const t = topics.find(x => x.id === d.topicId);\n            if (MANUAL_TOPIC_AREA && !(t && lc(t.area) === lc(MANUAL_TOPIC_AREA))) return false;\n            if (MANUAL_TOPIC_ID && d.topicId !== MANUAL_TOPIC_ID) return false;\n            return topicAccess(d.topicId) <= userLevel;\n        });\n        lastId = null;\n        if (!pool.length) { renderEmpty(); return; }\n        nextSentence();\n    }\n    function pickRandom() {\n        if (!pool.length) return null;\n        if (pool.length === 1) return pool[0];\n        let s;\n        do { s = pool[Math.floor(Math.random() * pool.length)]; } while (s.id === lastId);\n        return s;\n    }\n\n    \/\/ ============ RENDER ============\n    function renderEmpty() {\n        stageEl.innerHTML = `<div class=\"th-empty\">${UI[currentLang].noData}<\/div>`;\n    }\n    function nextSentence() {\n        checked = false;\n        current = pickRandom();\n        if (!current) { renderEmpty(); return; }\n        lastId = current.id;\n        stageEl.style.animation = 'none'; void stageEl.offsetWidth; stageEl.style.animation = '';\n        const t = UI[currentLang];\n        stageEl.innerHTML = `\n            <span class=\"th-eyebrow\">${currentLevel} \u00b7 ${t.eyebrow}<\/span>\n            <div class=\"th-source\"><\/div>\n            <label class=\"th-label\" for=\"thInput\">${t.label}<\/label>\n            <div class=\"th-input-wrap\">\n                <textarea id=\"thInput\" rows=\"1\" placeholder=\"${t.placeholder}\" autocomplete=\"off\" autocapitalize=\"sentences\" spellcheck=\"false\"><\/textarea>\n                <button class=\"th-mic\" type=\"button\" title=\"${t.mic}\" aria-label=\"${t.mic}\">${MIC_ICON}<\/button>\n            <\/div>\n            <div class=\"th-reveal\"><\/div>\n            <div class=\"th-reveal-hint\">${t.revealHint}<\/div>\n            <div class=\"th-reveal-alt\"><\/div>\n            <div class=\"th-feedback\"><p class=\"th-msg\"><\/p><div class=\"th-words\" aria-live=\"polite\"><\/div>\n                <div class=\"th-legend\"><span><i style=\"background:#DCEBD9\"><\/i>${t.legOk}<\/span><span><i style=\"background:#FFF0B3\"><\/i>${t.legNear}<\/span><span><i style=\"background:#F7DDD5\"><\/i>${t.legMiss}<\/span><\/div><\/div>\n            <div class=\"th-actionrow\">\n                <span class=\"th-hint\"><kbd>Enter \u21b5<\/kbd> <span class=\"th-hint-text\">${t.hintCheck}<\/span><\/span>\n                <button class=\"th-action\" type=\"button\"><\/button>\n            <\/div>`;\n        stageEl.querySelector('.th-source').textContent = current[currentLang] || current.en || current.de;\n        wireInput();\n        applyLimitState();\n    }\n\n    function wireInput() {\n        const ta = stageEl.querySelector('textarea');\n        const mic = stageEl.querySelector('.th-mic');\n        const fbBox = stageEl.querySelector('.th-feedback');\n        const msg = stageEl.querySelector('.th-msg');\n        const words = stageEl.querySelector('.th-words');\n        const hintText = stageEl.querySelector('.th-hint-text');\n        const revealWrapper = stageEl.querySelector('.th-reveal');\n        const revealAltHolder = stageEl.querySelector('.th-reveal-alt');\n        const actionBtn = stageEl.querySelector('.th-action');\n        const sentence = current;\n        const isMobile = () => window.matchMedia('(max-width: 800px)').matches;\n\n        function setActionLabel() {\n            actionBtn.textContent = checked ? UI[currentLang].btnNext + ' \u2192' : UI[currentLang].btnCheck;\n            actionBtn.classList.toggle('is-next', checked);\n        }\n        setActionLabel();\n\n        \/\/ ---------- Tipp-Modus (Desktop) ----------\n        const resize = () => { ta.style.height = '0px'; ta.style.height = Math.max(52, ta.scrollHeight) + 'px'; };\n        ta.addEventListener('input', resize);\n\n        function check() {\n            if (limitReached()) { applyLimitState(); return; }\n            const s = sentence;\n            words.innerHTML = \"\";\n            const tOrig = s.de.split(\/\\s+\/).filter(Boolean);\n            const tNorm = tOrig.map(normalize);\n            const uNorm = ta.value.trim().split(\/\\s+\/).filter(Boolean).map(normalize);\n            const al = alignWords(tNorm, uNorm);\n            const used = new Set(al.filter(x => x !== null));\n            let okCount = 0;\n            tOrig.forEach((w, i) => {\n                const span = document.createElement('span');\n                span.textContent = w;\n                const u = al[i];\n                if (u !== null) { span.className = (uNorm[u] === tNorm[i]) ? 'correct' : 'tip'; if (span.className === 'correct') okCount++; }\n                else span.className = uNorm.some((uw, k) => !used.has(k) && fuzzyEq(uw, tNorm[i])) ? 'tip' : 'missing';\n                words.appendChild(span);\n            });\n            if (s.alt) {\n                const alt = document.createElement('div');\n                alt.className = 'th-alt';\n                alt.textContent = ALT_LABEL + s.alt;\n                words.appendChild(alt);\n            }\n            const t = UI[currentLang];\n            msg.textContent = !ta.value.trim() ? t.msgEmpty : (okCount === tOrig.length ? t.msgPerfect : t.msgPart(okCount, tOrig.length));\n            fbBox.classList.add('show');\n            checked = true;\n            hintText.textContent = t.hintNext;\n            setActionLabel();\n            const ok = normalize(ta.value) === normalize(s.de);\n            liveModifier++;\n            window.dispatchEvent(new CustomEvent('tm-satz-bestaetigt'));\n            logToGoogle({ sentence_id: s.id, level: currentLevel, topic: s.topicId || \"Mix\", german: s.de,\n                translation: s[currentLang], action: \"Check\", status: ok ? \"Richtig\" : \"Falsch\", user_input: ta.value });\n            applyLimitState();\n        }\n\n        ta.addEventListener('keydown', (e) => {\n            if (e.key !== 'Enter' || e.shiftKey) return;\n            e.preventDefault();\n            if (checked) { if (!limitReached()) nextSentence(); } else check();\n        });\n\n        \/\/ Spracheingabe\n        if ('webkitSpeechRecognition' in window) {\n            const rec = new webkitSpeechRecognition();\n            rec.continuous = true; rec.interimResults = true; rec.lang = 'de-DE'; rec.maxAlternatives = 1;\n            let listening = false, timer = null;\n            const reset = () => { clearTimeout(timer); timer = setTimeout(() => { if (listening) rec.stop(); }, 5000); };\n            rec.onstart = () => { listening = true; mic.classList.add('recording'); reset(); };\n            rec.onerror = () => rec.stop();\n            rec.onend = () => {\n                listening = false; mic.classList.remove('recording'); clearTimeout(timer);\n                const v = ta.value.trim();\n                if (v) ta.value = v.charAt(0).toUpperCase() + v.slice(1);\n            };\n            rec.onresult = (e) => {\n                let txt = '';\n                for (let i = 0; i < e.results.length; ++i) {\n                    const w = e.results[i][0].transcript;\n                    txt += (i > 0 && !w.startsWith(' ')) ? ' ' + w : w;\n                }\n                ta.value = txt.replace(\/\\s\\s+\/g, ' ');\n                resize(); reset();\n            };\n            mic.onclick = (e) => {\n                e.preventDefault();\n                if (limitReached() || checked) return;\n                if (listening) rec.stop();\n                else { ta.value = ''; if (window.speechSynthesis && speechSynthesis.speaking) speechSynthesis.cancel(); rec.start(); }\n            };\n        } else {\n            mic.style.display = 'none';\n        }\n\n        \/\/ ---------- Puzzle-Modus (Handy) ----------\n        let revealedCount = 0, revealCorrectCount = 0;\n\n        function finalizeRevealIfComplete() {\n            if (revealWrapper.children.length === 0 || revealedCount !== revealWrapper.children.length) return;\n            revealAltHolder.innerHTML = \"\";\n            if (sentence.alt) {\n                const alt = document.createElement('div');\n                alt.className = 'th-alt';\n                alt.textContent = ALT_LABEL + sentence.alt;\n                revealAltHolder.appendChild(alt);\n            }\n            checked = true;\n            setActionLabel();\n            const ok = (revealCorrectCount === revealedCount);\n            liveModifier++;\n            window.dispatchEvent(new CustomEvent('tm-satz-bestaetigt'));\n            logToGoogle({ sentence_id: sentence.id, level: currentLevel, topic: sentence.topicId || \"Mix\", german: sentence.de,\n                translation: sentence[currentLang], action: \"Mobile Aufdecken\", status: ok ? \"Richtig\" : \"Teilweise\",\n                user_input: `${revealCorrectCount}\/${revealedCount} gewusst` });\n            applyLimitState();\n        }\n\n        function buildRevealWord(word) {\n            const span = document.createElement('span');\n            span.className = 'reveal-word';\n            span.textContent = word;\n            let startX = null, dragged = false;\n            const threshold = 22;\n            const reveal = (known) => {\n                if (span.classList.contains('revealed') || limitReached()) return;\n                span.classList.add('revealed', known ? 'correct-word' : 'wrong-word');\n                revealedCount++; if (known) revealCorrectCount++;\n                finalizeRevealIfComplete();\n            };\n            span.addEventListener('pointerdown', (e) => {\n                if (span.classList.contains('revealed') || limitReached()) return;\n                startX = e.clientX; dragged = false; span.classList.add('dragging');\n            });\n            span.addEventListener('pointermove', (e) => {\n                if (startX === null) return;\n                if (Math.abs(e.clientX - startX) > 6) dragged = true;\n            });\n            span.addEventListener('pointerup', (e) => {\n                if (startX === null) return;\n                const dx = (e.clientX || 0) - startX;\n                startX = null; span.classList.remove('dragging');\n                if (!dragged) { reveal(true); return; }\n                if (dx <= -threshold) reveal(false); else if (dx >= threshold) reveal(true);\n            });\n            span.addEventListener('pointercancel', () => { startX = null; span.classList.remove('dragging'); });\n            return span;\n        }\n\n        function revealAllRemaining() {\n            if (limitReached()) return;\n            let changed = false;\n            Array.from(revealWrapper.children).forEach(span => {\n                if (!span.classList.contains('revealed')) {\n                    span.classList.add('revealed', 'wrong-word');\n                    revealedCount++; changed = true;\n                }\n            });\n            if (changed) finalizeRevealIfComplete();\n        }\n\n        sentence.de.split(\/\\s+\/).filter(Boolean).forEach(w => revealWrapper.appendChild(buildRevealWord(w)));\n\n        \/\/ Check\/Next-Button: Desktop pr\u00fcft die Eingabe, Handy deckt alle W\u00f6rter auf\n        actionBtn.onclick = () => {\n            if (checked) { if (!limitReached()) nextSentence(); }\n            else if (isMobile()) revealAllRemaining();\n            else check();\n        };\n    }\n\n    \/\/ ============ LEVELAUSWAHL ============\n    function buildLevelButtons() {\n        levelsEl.style.setProperty('--count', LEVELS.length);\n        LEVELS.forEach(lv => {\n            const b = document.createElement('button');\n            b.type = 'button'; b.className = 'th-level'; b.dataset.level = lv; b.textContent = lv;\n            b.onclick = () => {\n                if (lv === currentLevel) return;\n                currentLevel = lv;\n                updateLevelUI();\n                if (allData.length) buildPool();\n            };\n            levelsEl.appendChild(b);\n        });\n        updateLevelUI();\n    }\n    function updateLevelUI() {\n        levelsEl.style.setProperty('--idx', Math.max(0, LEVELS.indexOf(currentLevel)));\n        levelsEl.querySelectorAll('.th-level').forEach(b => {\n            const on = b.dataset.level === currentLevel;\n            b.classList.toggle('active', on);\n            b.setAttribute('aria-pressed', on ? 'true' : 'false');\n        });\n    }\n\n    buildLevelButtons();\n    const loadingEl = stageEl.querySelector('.th-empty');\n    if (loadingEl) loadingEl.textContent = UI[currentLang].loading;\n    loadData();\n    loadDailyCounts();\n})(document.currentScript.parentElement);\n<\/script>\n<\/div>\n<!-- alter Demo-Trainer (deaktiviert, ersetzt durch den Startseiten-Trainer oben)\n   <div class=\"trainer\">\n    <div class=\"t-top\"><span class=\"t-topic\" id=\"spx-topic\">B1 \u00b7 SUBORDINATE CLAUSES WITH \u201eWEIL\u201c<\/span><span class=\"t-count\" id=\"spx-count\">Sentence 1 of 3<\/span><\/div>\n    <p class=\"t-en\" id=\"spx-en\">I stayed at home because it was raining.<\/p>\n    <label for=\"spx-input\">Your German translation<\/label>\n    <div class=\"t-row\">\n     <input id=\"spx-input\" class=\"t-input\" type=\"text\" autocomplete=\"off\" spellcheck=\"false\" placeholder=\"Type in German\u2026\">\n     <button type=\"button\" class=\"btn t-check\" id=\"spx-check\">Check<\/button>\n    <\/div>\n    <div class=\"t-result\" id=\"spx-result\" hidden>\n     <p class=\"t-msg\" id=\"spx-msg\"><\/p>\n     <p class=\"chips\" id=\"spx-chips\" aria-live=\"polite\"><\/p>\n     <p class=\"legend\"><span><i class=\"ok\"><\/i>correct<\/span><span><i class=\"near\"><\/i>almost<\/span><span><i class=\"miss\"><\/i>missing<\/span><\/p>\n    <\/div>\n    <div class=\"t-bottom\">\n     <div style=\"display:flex;gap:8px;flex-wrap:wrap\">\n      <button type=\"button\" class=\"btn\" id=\"spx-solution\">Show solution<\/button>\n      <button type=\"button\" class=\"btn\" id=\"spx-next\">Next sentence \u2192<\/button>\n     <\/div>\n     <a href=\"https:\/\/sofapiano.com\/exercises\/\" style=\"font-size:14px;font-weight:700\">30,000 more \u2192<\/a>\n    <\/div>\n   <\/div>\n-->\n  <\/div>\n <\/div>\n<\/section>\n\n<div class=\"marquee\" aria-hidden=\"true\">\n <div class=\"track\">\n  <span>Ich h\u00e4tte gern einen Kaffee. \u2726<\/span><span>Wir sehen uns morgen. \u2726<\/span><span>Ich dr\u00fcck dir die Daumen. \u2726<\/span><span>Ich blick\u2019s einfach nicht. \u2726<\/span><span>Wann kommst du endlich? \u2726<\/span><span>Ich konnte leider nicht kommen. \u2726<\/span>\n  <span>Ich h\u00e4tte gern einen Kaffee. \u2726<\/span><span>Wir sehen uns morgen. \u2726<\/span><span>Ich dr\u00fcck dir die Daumen. \u2726<\/span><span>Ich blick\u2019s einfach nicht. \u2726<\/span><span>Wann kommst du endlich? \u2726<\/span><span>Ich konnte leider nicht kommen. \u2726<\/span>\n <\/div>\n<\/div>\n\n<section class=\"stats\" aria-labelledby=\"spx-why\">\n <div class=\"wrap\">\n  <p class=\"sx-eyebrow\">What makes sofapiano different?<\/p>\n  <h2 class=\"sx-line\" id=\"spx-why\"><span><b>30,000<\/b> sentences from real conversations.<\/span> <span><b>100 %<\/b> authentic German.<\/span> <span><b>80+<\/b> grammar topics, <em>taught naturally.<\/em><\/span><\/h2>\n  <div class=\"sx-cards\">\n   <div class=\"sx-card\"><span class=\"sx-ic\" style=\"background:#6EC1E4\" aria-hidden=\"true\"><svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"8\" r=\"4\"><\/circle><path d=\"M4 21a8 8 0 0 1 16 0\"><\/path><\/svg><\/span><div><p class=\"sx-t\">No AI nonsense<\/p><p class=\"sx-d\">Every sentence written and checked by native speakers.<\/p><\/div><\/div>\n   <div class=\"sx-card\"><span class=\"sx-ic\" style=\"background:#FFCF33\" aria-hidden=\"true\"><svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 12a8 8 0 0 1-11.6 7.1L4 20l1-4.6A8 8 0 1 1 21 12z\"><\/path><\/svg><\/span><div><p class=\"sx-t\">No textbook German<\/p><p class=\"sx-d\">Phrases people actually use in everyday life.<\/p><\/div><\/div>\n   <div class=\"sx-card\"><span class=\"sx-ic\" style=\"background:#F3A08C\" aria-hidden=\"true\"><svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 3v18\"><\/path><path d=\"M5 10c0-4 3-7 7-7 0 4-3 7-7 7z\"><\/path><path d=\"M19 14c0-4-3-7-7-7 0 4 3 7 7 7z\"><\/path><\/svg><\/span><div><p class=\"sx-t\">No dry drills<\/p><p class=\"sx-d\">Grammar sinks in through context, not rule tables.<\/p><\/div><\/div>\n  <\/div>\n <\/div>\n<\/section>\n\n<div class=\"story\">\n <div class=\"thread\" aria-hidden=\"true\"><\/div>\n\n <section class=\"ch\" aria-labelledby=\"spx-c1\">\n  <span class=\"dot\" aria-hidden=\"true\"><\/span>\n  <div class=\"split\">\n   <div>\n    <p class=\"kicker\">The moment every German learner knows<\/p>\n    <h2 id=\"spx-c1\">You learned German. Then Germans started talking.<\/h2>\n    <p class=\"txt\">Vocabulary lists, grammar tables, perfect textbook sentences \u2014 and still you freeze when a real conversation starts.<\/p>\n    <p class=\"txt\">That\u2019s because people don\u2019t talk like textbooks. sofapiano teaches you the German they actually use.<\/p>\n    <div class=\"btns\">\n     <a class=\"btn b-teal\" href=\"https:\/\/sofapiano.com\/exercises\/\">Go to the exercises<\/a>\n    <\/div>\n   <\/div>\n   <div>\n    <div class=\"voice\">\n     <div class=\"vmsg\" data-say=\"Sorry, aber ich check\u2019s einfach nicht.\" data-audio=\"https:\/\/sofapiano.com\/wp-content\/uploads\/2026\/11\/Sorry_aber_ich_checks_einfach_nicht.mp3\" style=\"--c:#FFCF33\">\n      <div class=\"vtop\"><button type=\"button\" class=\"vplay\" aria-label=\"Play: Sorry, aber ich check\u2019s einfach nicht.\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M7 4v16l13-8z\"><\/path><\/svg><\/button><span class=\"wave\" aria-hidden=\"true\"><i style=\"height:21px;animation-delay:0.00s\"><\/i><i style=\"height:23px;animation-delay:0.08s\"><\/i><i style=\"height:12px;animation-delay:0.16s\"><\/i><i style=\"height:16px;animation-delay:0.24s\"><\/i><i style=\"height:24px;animation-delay:0.32s\"><\/i><i style=\"height:19px;animation-delay:0.40s\"><\/i><i style=\"height:8px;animation-delay:0.48s\"><\/i><i style=\"height:21px;animation-delay:0.00s\"><\/i><i style=\"height:23px;animation-delay:0.08s\"><\/i><i style=\"height:12px;animation-delay:0.16s\"><\/i><i style=\"height:16px;animation-delay:0.24s\"><\/i><i style=\"height:24px;animation-delay:0.32s\"><\/i><i style=\"height:18px;animation-delay:0.40s\"><\/i><i style=\"height:8px;animation-delay:0.48s\"><\/i><i style=\"height:21px;animation-delay:0.00s\"><\/i><i style=\"height:23px;animation-delay:0.08s\"><\/i><i style=\"height:11px;animation-delay:0.16s\"><\/i><i style=\"height:16px;animation-delay:0.24s\"><\/i><i style=\"height:24px;animation-delay:0.32s\"><\/i><i style=\"height:18px;animation-delay:0.40s\"><\/i><i style=\"height:9px;animation-delay:0.48s\"><\/i><i style=\"height:22px;animation-delay:0.00s\"><\/i><i style=\"height:23px;animation-delay:0.08s\"><\/i><i style=\"height:11px;animation-delay:0.16s\"><\/i><i style=\"height:16px;animation-delay:0.24s\"><\/i><i style=\"height:24px;animation-delay:0.32s\"><\/i><i style=\"height:18px;animation-delay:0.40s\"><\/i><i style=\"height:9px;animation-delay:0.48s\"><\/i><\/span><span class=\"vtime\">0:04<\/span><\/div>\n      <p class=\"vreal\">\u201eSorry, aber ich check\u2019s einfach nicht.\u201c<\/p>\n      <p class=\"vbook\">Textbook: <s>Entschuldigung, ich verstehe das nicht.<\/s><\/p>\n     <\/div>\n     <div class=\"vmsg\" data-say=\"Ich bin fix und fertig.\" data-audio=\"https:\/\/sofapiano.com\/wp-content\/uploads\/2026\/11\/Ich_bin_fix_und_fertig.mp3\" style=\"--c:#6EC1E4\">\n      <div class=\"vtop\"><button type=\"button\" class=\"vplay\" aria-label=\"Play: Ich bin fix und fertig.\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M7 4v16l13-8z\"><\/path><\/svg><\/button><span class=\"wave\" aria-hidden=\"true\"><i style=\"height:18px;animation-delay:0.00s\"><\/i><i style=\"height:9px;animation-delay:0.08s\"><\/i><i style=\"height:22px;animation-delay:0.16s\"><\/i><i style=\"height:23px;animation-delay:0.24s\"><\/i><i style=\"height:11px;animation-delay:0.32s\"><\/i><i style=\"height:16px;animation-delay:0.40s\"><\/i><i style=\"height:24px;animation-delay:0.48s\"><\/i><i style=\"height:18px;animation-delay:0.00s\"><\/i><i style=\"height:9px;animation-delay:0.08s\"><\/i><i style=\"height:22px;animation-delay:0.16s\"><\/i><i style=\"height:23px;animation-delay:0.24s\"><\/i><i style=\"height:11px;animation-delay:0.32s\"><\/i><i style=\"height:17px;animation-delay:0.40s\"><\/i><i style=\"height:24px;animation-delay:0.48s\"><\/i><i style=\"height:18px;animation-delay:0.00s\"><\/i><i style=\"height:9px;animation-delay:0.08s\"><\/i><i style=\"height:22px;animation-delay:0.16s\"><\/i><i style=\"height:22px;animation-delay:0.24s\"><\/i><i style=\"height:10px;animation-delay:0.32s\"><\/i><i style=\"height:17px;animation-delay:0.40s\"><\/i><i style=\"height:24px;animation-delay:0.48s\"><\/i><i style=\"height:17px;animation-delay:0.00s\"><\/i><i style=\"height:10px;animation-delay:0.08s\"><\/i><i style=\"height:22px;animation-delay:0.16s\"><\/i><i style=\"height:22px;animation-delay:0.24s\"><\/i><i style=\"height:10px;animation-delay:0.32s\"><\/i><i style=\"height:17px;animation-delay:0.40s\"><\/i><i style=\"height:24px;animation-delay:0.48s\"><\/i><\/span><span class=\"vtime\">0:03<\/span><\/div>\n      <p class=\"vreal\">\u201eIch bin fix und fertig.\u201c<\/p>\n      <p class=\"vbook\">Textbook: <s>Ich bin sehr m\u00fcde.<\/s><\/p>\n     <\/div>\n     <div class=\"vmsg\" data-say=\"Das gibt\u2019s doch nicht!\" data-audio=\"https:\/\/sofapiano.com\/wp-content\/uploads\/2026\/11\/Das_gibts_doch_nicht.mp3\" style=\"--c:#9BE38A\">\n      <div class=\"vtop\"><button type=\"button\" class=\"vplay\" aria-label=\"Play: Das gibt\u2019s doch nicht!\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M7 4v16l13-8z\"><\/path><\/svg><\/button><span class=\"wave\" aria-hidden=\"true\"><i style=\"height:21px;animation-delay:0.00s\"><\/i><i style=\"height:23px;animation-delay:0.08s\"><\/i><i style=\"height:13px;animation-delay:0.16s\"><\/i><i style=\"height:15px;animation-delay:0.24s\"><\/i><i style=\"height:24px;animation-delay:0.32s\"><\/i><i style=\"height:19px;animation-delay:0.40s\"><\/i><i style=\"height:7px;animation-delay:0.48s\"><\/i><i style=\"height:21px;animation-delay:0.00s\"><\/i><i style=\"height:23px;animation-delay:0.08s\"><\/i><i style=\"height:12px;animation-delay:0.16s\"><\/i><i style=\"height:15px;animation-delay:0.24s\"><\/i><i style=\"height:24px;animation-delay:0.32s\"><\/i><i style=\"height:19px;animation-delay:0.40s\"><\/i><i style=\"height:8px;animation-delay:0.48s\"><\/i><i style=\"height:21px;animation-delay:0.00s\"><\/i><i style=\"height:23px;animation-delay:0.08s\"><\/i><i style=\"height:12px;animation-delay:0.16s\"><\/i><i style=\"height:15px;animation-delay:0.24s\"><\/i><i style=\"height:24px;animation-delay:0.32s\"><\/i><i style=\"height:19px;animation-delay:0.40s\"><\/i><i style=\"height:8px;animation-delay:0.48s\"><\/i><i style=\"height:21px;animation-delay:0.00s\"><\/i><i style=\"height:23px;animation-delay:0.08s\"><\/i><i style=\"height:12px;animation-delay:0.16s\"><\/i><i style=\"height:16px;animation-delay:0.24s\"><\/i><i style=\"height:24px;animation-delay:0.32s\"><\/i><i style=\"height:19px;animation-delay:0.40s\"><\/i><i style=\"height:8px;animation-delay:0.48s\"><\/i><\/span><span class=\"vtime\">0:02<\/span><\/div>\n      <p class=\"vreal\">\u201eDas gibt\u2019s doch nicht!\u201c<\/p>\n      <p class=\"vbook\">Textbook: <s>Das glaube ich nicht.<\/s><\/p>\n     <\/div>\n    <\/div>\n   <\/div>\n  <\/div>\n <\/section>\n\n <section class=\"ch ch2\" aria-labelledby=\"spx-c2\">\n  <span class=\"dot\" aria-hidden=\"true\"><\/span>\n  <div class=\"ch-head\">\n   <p class=\"kicker\">Then something changes<\/p>\n   <h2 id=\"spx-c2\">One sentence. <em>Five lessons at once.<\/em><\/h2>\n   <p class=\"txt\">When you translate a real sentence, you don\u2019t practise one rule in isolation. Vocabulary, word order, tenses and fixed phrases all come together \u2014 exactly like when you speak.<\/p>\n  <\/div>\n  <div class=\"why why-top\">\n   <p class=\"why-h\"><span>That\u2019s why the translation method works so well.<\/span><\/p>\n  <\/div>\n  <div class=\"anat\">\n   <div class=\"cps\">\n    <div class=\"cp up\" style=\"--c:#6EC1E4;--t:#14708C\"><span class=\"w\">Ich bin<\/span><div class=\"lab\"><span class=\"n\">TENSE<\/span><span class=\"d\">Perfect with \u201esein\u201c<\/span><i class=\"ln\"><\/i><\/div><\/div>\n    <div class=\"cp down\" style=\"--c:#FFCF33;--t:#8A6400\"><span class=\"w\">zu Hause<\/span><div class=\"lab\"><span class=\"n\">PHRASE<\/span><span class=\"d\">A fixed expression<\/span><i class=\"ln\"><\/i><\/div><\/div>\n    <div class=\"cp up\" style=\"--c:#6EC1E4;--t:#14708C\"><span class=\"w\">geblieben,<\/span><div class=\"lab\"><span class=\"n\">VERB FORM<\/span><span class=\"d\">Irregular participle<\/span><i class=\"ln\"><\/i><\/div><\/div>\n    <div class=\"cp down\" style=\"--c:#9BE38A;--t:#2E7D32\"><span class=\"w\">weil<\/span><div class=\"lab\"><span class=\"n\">CONNECTOR<\/span><span class=\"d\">Gives a reason<\/span><i class=\"ln\"><\/i><\/div><\/div>\n    <div class=\"cp up\" style=\"--c:#F3A08C;--t:#8A3A25\"><span class=\"w\">es geregnet hat.<\/span><div class=\"lab\"><span class=\"n\">WORD ORDER<\/span><span class=\"d\">Verb goes to the end<\/span><i class=\"ln\"><\/i><\/div><\/div>\n   <\/div>\n  <\/div>\n <\/section>\n\n <section class=\"ch ch3\" id=\"levels\" aria-labelledby=\"spx-c3\">\n  <span class=\"dot\" aria-hidden=\"true\"><\/span>\n  <div class=\"split st-split\">\n   <div>\n    <p class=\"kicker\">Step by step<\/p>\n    <h2 id=\"spx-c3\">Sentence by sentence, you climb from A1 to B2.<\/h2>\n    <p class=\"txt\">German exercises for every level \u2014 start where you are and go up one step at a time.<\/p>\n    <div class=\"btns\"><a class=\"btn b-teal\" href=\"https:\/\/sofapiano.com\/level-test\/\">Find my level<\/a><\/div>\n   <\/div>\n   <div>\n  <style>\n#spx .lvfan{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.2fr);gap:24px;align-items:center;max-width:580px;margin-left:auto}\n#spx .lvfan-svg{display:block;width:100%;height:auto;overflow:visible}\n#spx .lvfan-seg{cursor:pointer;outline:none;transition:transform .28s cubic-bezier(.2,.8,.2,1)}\n#spx .lvfan-seg path{stroke:var(--paper);stroke-width:3;transition:stroke .2s}\n#spx .lvfan-seg text{font-family:'Inter','Segoe UI',Arial,sans-serif;font-weight:800;font-size:24px;letter-spacing:-.5px;pointer-events:none}\n#spx .lvfan-seg.is-active{transform:translate(var(--dx),var(--dy))}\n#spx .lvfan-seg:focus-visible path{stroke:var(--ink)}\n#spx .lvfan-hub{fill:var(--ink)}\n#spx .ch3 .st-split{background:transparent!important}\n#spx .lvfan-cards{display:grid}\n#spx .lvfan-card{grid-area:1\/1;background:var(--card,#F3EEE4);border:1px solid var(--card-line,#E6DFD1);border-radius:22px;padding:24px 22px;opacity:0;visibility:hidden;transform:translateY(8px);transition:opacity .25s,transform .25s,visibility .25s}\n#spx .lvfan-card.is-active{opacity:1;visibility:visible;transform:none}\n#spx .lvfan-code{display:flex;align-items:center;gap:10px;font-family:'Fraunces',Georgia,serif;font-size:44px;font-weight:600;line-height:1;color:var(--teal)}\n#spx .lvfan-code i{width:14px;height:14px;border-radius:50%;background:var(--c);box-shadow:0 0 0 1px rgba(14,26,32,.12)}\n#spx .lvfan-name{margin:10px 0 12px;font-size:11.5px;font-weight:800;letter-spacing:.4px;text-transform:uppercase;color:var(--muted)}\n#spx .lvfan-q{margin:0;font-family:'Fraunces',Georgia,serif;font-size:19px;line-height:1.35;color:var(--ink)}\n#spx .lvfan-t{margin:10px 0 16px;font-size:14.5px;line-height:1.5;color:var(--muted)}\n#spx .lvfan-go{display:inline-flex;align-items:center;gap:6px;font-weight:700;font-size:14.5px;color:var(--teal);text-decoration:none}\n#spx .lvfan-go:hover{color:#0E5367;text-decoration:underline}\n@media (max-width:1100px){#spx .lvfan{margin:24px 0 0;max-width:none}}\n@media (max-width:560px){\n #spx .lvfan{grid-template-columns:132px minmax(0,1fr);gap:14px}\n #spx .lvfan-card{padding:16px 14px;border-radius:18px}\n #spx .lvfan-code{font-size:34px}\n #spx .lvfan-q{font-size:16px}\n #spx .lvfan-t{font-size:13.5px;margin:8px 0 12px}\n}\n@media (prefers-reduced-motion:reduce){#spx .lvfan-seg,#spx .lvfan-card{transition:none}}\n<\/style>\n<div class=\"lvfan\">\n <svg class=\"lvfan-svg\" viewBox=\"0 0 190 360\" role=\"group\" aria-label=\"German levels A1 to B2\">\n  <g class=\"lvfan-seg is-active\" data-i=\"0\" tabindex=\"0\" role=\"button\" aria-label=\"German A1 \u00b7 Beginner\" aria-pressed=\"true\" style=\"--dx:3px;--dy:7px\">\n   <path d=\"M10 180 L10 350 A170 170 0 0 0 130.2 300.2 Z\" fill=\"#E3F5FC\"><\/path><text x=\"58\" y=\"290\" text-anchor=\"middle\" fill=\"#0E1A20\">A1<\/text>\n  <\/g>\n  <g class=\"lvfan-seg\" data-i=\"1\" tabindex=\"0\" role=\"button\" aria-label=\"German A2 \u00b7 Elementary\" aria-pressed=\"false\" style=\"--dx:7px;--dy:3px\">\n   <path d=\"M10 180 L130.2 300.2 A170 170 0 0 0 180 180 Z\" fill=\"#6EC1E4\"><\/path><text x=\"113\" y=\"231\" text-anchor=\"middle\" fill=\"#0E1A20\">A2<\/text>\n  <\/g>\n  <g class=\"lvfan-seg\" data-i=\"2\" tabindex=\"0\" role=\"button\" aria-label=\"German B1 \u00b7 Intermediate\" aria-pressed=\"false\" style=\"--dx:7px;--dy:-3px\">\n   <path d=\"M10 180 L180 180 A170 170 0 0 0 130.2 59.8 Z\" fill=\"#14708C\"><\/path><text x=\"113\" y=\"146\" text-anchor=\"middle\" fill=\"#FFFFFF\">B1<\/text>\n  <\/g>\n  <g class=\"lvfan-seg\" data-i=\"3\" tabindex=\"0\" role=\"button\" aria-label=\"German B2 \u00b7 Upper intermediate\" aria-pressed=\"false\" style=\"--dx:3px;--dy:-7px\">\n   <path d=\"M10 180 L130.2 59.8 A170 170 0 0 0 10 10 Z\" fill=\"#FFCF33\"><\/path><text x=\"58\" y=\"86\" text-anchor=\"middle\" fill=\"#0E1A20\">B2<\/text>\n  <\/g>\n  <circle class=\"lvfan-hub\" cx=\"10\" cy=\"180\" r=\"6\"><\/circle>\n <\/svg>\n <div class=\"lvfan-cards\">\n  <div class=\"lvfan-card is-active\" data-i=\"0\" style=\"--c:#E3F5FC\">\n   <div class=\"lvfan-code\"><i><\/i>A1<\/div>\n   <h3 class=\"lvfan-name\">German A1 \u00b7 Beginner<\/h3>\n   <p class=\"lvfan-q\">\u201eIch h\u00e4tte gern einen Kaffee.\u201c<\/p>\n   <p class=\"lvfan-t\">Introduce yourself, order food, ask simple questions.<\/p>\n   <a class=\"lvfan-go\" href=\"https:\/\/sofapiano.com\/a1-mixed-translations\/\">Start A1 exercises \u2192<\/a>\n  <\/div>\n  <div class=\"lvfan-card\" data-i=\"1\" style=\"--c:#6EC1E4\">\n   <div class=\"lvfan-code\"><i><\/i>A2<\/div>\n   <h3 class=\"lvfan-name\">German A2 \u00b7 Elementary<\/h3>\n   <p class=\"lvfan-q\">\u201eGestern bin ich ins Kino gegangen.\u201c<\/p>\n   <p class=\"lvfan-t\">Talk about your day, the past and your plans.<\/p>\n   <a class=\"lvfan-go\" href=\"https:\/\/sofapiano.com\/a2-mixed-translations\/\">Start A2 exercises \u2192<\/a>\n  <\/div>\n  <div class=\"lvfan-card\" data-i=\"2\" style=\"--c:#14708C\">\n   <div class=\"lvfan-code\"><i><\/i>B1<\/div>\n   <h3 class=\"lvfan-name\">German B1 \u00b7 Intermediate<\/h3>\n   <p class=\"lvfan-q\">\u201eIch bin geblieben, weil es geregnet hat.\u201c<\/p>\n   <p class=\"lvfan-t\">Give reasons, tell stories, share opinions.<\/p>\n   <a class=\"lvfan-go\" href=\"https:\/\/sofapiano.com\/b1-mixed-translations\/\">Start B1 exercises \u2192<\/a>\n  <\/div>\n  <div class=\"lvfan-card\" data-i=\"3\" style=\"--c:#FFCF33\">\n   <div class=\"lvfan-code\"><i><\/i>B2<\/div>\n   <h3 class=\"lvfan-name\">German B2 \u00b7 Upper intermediate<\/h3>\n   <p class=\"lvfan-q\">\u201eH\u00e4tte ich das gewusst, w\u00e4re ich gekommen.\u201c<\/p>\n   <p class=\"lvfan-t\">Discuss complex topics fluently and naturally.<\/p>\n   <a class=\"lvfan-go\" href=\"https:\/\/sofapiano.com\/b2-mixed-translations\/\">Start B2 exercises \u2192<\/a>\n  <\/div>\n <\/div>\n<\/div>\n<script>\n(function(){\n var root=document.querySelector('#spx .lvfan');\n if(!root){return;}\n var segs=root.querySelectorAll('.lvfan-seg'),cards=root.querySelectorAll('.lvfan-card');\n function setLevel(i){\n  for(var k=0;k<segs.length;k++){var on=segs[k].getAttribute('data-i')===i;segs[k].classList.toggle('is-active',on);segs[k].setAttribute('aria-pressed',on?'true':'false');}\n  for(var j=0;j<cards.length;j++){cards[j].classList.toggle('is-active',cards[j].getAttribute('data-i')===i);}\n }\n for(var n=0;n<segs.length;n++){(function(s){\n  var i=s.getAttribute('data-i');\n  s.addEventListener('mouseenter',function(){setLevel(i);});\n  s.addEventListener('focus',function(){setLevel(i);});\n  s.addEventListener('click',function(){setLevel(i);});\n  s.addEventListener('keydown',function(e){if(e.key==='Enter'||e.key===' '){e.preventDefault();var a=cards[+i].querySelector('a');if(a){window.location.href=a.href;}}});\n })(segs[n]);}\n})();\n<\/script>\n   <\/div>\n  <\/div>\n <\/section>\n\n <section class=\"ch\" aria-labelledby=\"spx-c4\">\n  <span class=\"dot\" aria-hidden=\"true\"><\/span>\n  <div class=\"ch-head\">\n   <p class=\"kicker\">You\u2019re not alone<\/p>\n   <h2 id=\"spx-c4\">Along the way, the right tools have your back.<\/h2>\n   <p class=\"txt\">Learning tools for German \u2014 for the moments when a sentence isn\u2019t enough.<\/p>\n   <div class=\"btns\">\n    <a class=\"btn b-teal\" href=\"https:\/\/sofapiano.com\/learning-tools\/\">Explore all tools<\/a>\n    <a class=\"btn b-ghost\" href=\"https:\/\/sofapiano.com\/workbook\/\">Get the workbook<\/a>\n   <\/div>\n  <\/div>\n  <div class=\"tools\">\n   <a class=\"tool\" href=\"https:\/\/sofapiano.com\/listening-trainer\/\"><span class=\"ticon\" style=\"background:#6EC1E4;transform:rotate(-6deg)\" aria-hidden=\"true\"><svg width=\"21\" height=\"21\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M3 14v-2a9 9 0 0 1 18 0v2M3 14h3v6H3zM18 14h3v6h-3z\"><\/path><\/svg><\/span><span><span class=\"when\">When you can\u2019t understand spoken German<\/span><strong>Listening Trainer<\/strong><span class=\"d\">Train your ear with sentences read by natural voices.<\/span><\/span><\/a>\n   <a class=\"tool\" href=\"https:\/\/sofapiano.com\/word-context-search\/\"><span class=\"ticon\" style=\"background:#FFCF33;transform:rotate(5deg)\" aria-hidden=\"true\"><svg width=\"21\" height=\"21\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M11 4a7 7 0 1 0 0 14 7 7 0 0 0 0-14zM21 21l-5-5\"><\/path><\/svg><\/span><span><span class=\"when\">When a word means five things<\/span><strong>Word Context Search<\/strong><span class=\"d\">See how a German word is really used in full sentences.<\/span><\/span><\/a>\n   <a class=\"tool\" href=\"https:\/\/sofapiano.com\/word-video-search\/\"><span class=\"ticon\" style=\"background:#F3D9D2;transform:rotate(-3deg)\" aria-hidden=\"true\"><svg width=\"21\" height=\"21\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M3 6h12v12H3zM15 10l6-3v10l-6-3\"><\/path><\/svg><\/span><span><span class=\"when\">When you want to hear it from a native<\/span><strong>Word Video Search<\/strong><span class=\"d\">Hear a word spoken in real video clips.<\/span><\/span><\/a>\n   <a class=\"tool\" href=\"https:\/\/sofapiano.com\/synonym-finder\/\"><span class=\"ticon\" style=\"background:#DCEBD9;transform:rotate(6deg)\" aria-hidden=\"true\"><svg width=\"21\" height=\"21\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M7 7h10M7 7l3-3M7 7l3 3M17 17H7M17 17l-3-3M17 17l-3 3\"><\/path><\/svg><\/span><span><span class=\"when\">When you keep using the same word<\/span><strong>Synonym Finder<\/strong><span class=\"d\">Expand your vocabulary with natural alternatives.<\/span><\/span><\/a>\n   <a class=\"tool\" href=\"https:\/\/sofapiano.com\/workbook\/\"><span class=\"ticon\" style=\"background:#FFCF33;transform:rotate(-5deg)\" aria-hidden=\"true\"><svg width=\"21\" height=\"21\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M4 20h4L19 9l-4-4L4 16zM13 7l4 4\"><\/path><\/svg><\/span><span><span class=\"when\">When you want it to really stick<\/span><strong>Handwriting Workbooks<\/strong><span class=\"d\">PDF workbooks \u2014 writing by hand deepens memory.<\/span><\/span><\/a>\n   <a class=\"tool\" href=\"https:\/\/sofapiano.com\/level-test\/\"><span class=\"ticon\" style=\"background:#6EC1E4;transform:rotate(4deg)\" aria-hidden=\"true\"><svg width=\"21\" height=\"21\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M4 20V10M10 20V4M16 20v-7M22 20H2\"><\/path><\/svg><\/span><span><span class=\"when\">When you\u2019re not sure where you stand<\/span><strong>German Level Test<\/strong><span class=\"d\">Find your level objectively in a few minutes.<\/span><\/span><\/a>\n  <\/div>\n <\/section>\n\n <section class=\"ch\" id=\"pricing\" aria-labelledby=\"spx-c5\">\n  <span class=\"dot\" aria-hidden=\"true\"><\/span>\n  <div class=\"ch-head\">\n   <p class=\"kicker\">Your choice<\/p>\n   <h2 id=\"spx-c5\">How far you go is up to you.<\/h2>\n   <p class=\"txt\">No credit card to get started.<\/p>\n  <\/div>\n  <div class=\"prices\">\n   <div class=\"price p-free\">\n    <h3>Free<\/h3>\n    <p class=\"amount\">\u20ac0<\/p>\n    <ul>\n     <li><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#14708C\" stroke-width=\"2.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m5 12 5 5 9-10\"><\/path><\/svg>Exercises A1\u2013B2, no account needed<\/li>\n     <li><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#14708C\" stroke-width=\"2.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m5 12 5 5 9-10\"><\/path><\/svg>More grammar topics and audio with a free account<\/li>\n     <li><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#14708C\" stroke-width=\"2.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m5 12 5 5 9-10\"><\/path><\/svg>Progress tracking, reminder emails, level test and all tools<\/li>\n    <\/ul>\n    <a class=\"btn\" href=\"https:\/\/sofapiano.com\/membership-join\/\">Create free account<\/a>\n   <\/div>\n   <div class=\"price p-plus\">\n    <span class=\"sticker\" style=\"top:-16px;right:24px\">Cancel anytime<\/span>\n    <h3>Plus<\/h3>\n    <p><span class=\"amount\">\u20ac4<\/span> <span style=\"font-size:15px;color:#C9D6DB\">\/ month<\/span><\/p>\n    <ul>\n     <li><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#6EC1E4\" stroke-width=\"2.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m5 12 5 5 9-10\"><\/path><\/svg>All 80+ grammar topics and the grammar quick guide<\/li>\n     <li><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#6EC1E4\" stroke-width=\"2.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m5 12 5 5 9-10\"><\/path><\/svg>Save sentences and add your own<\/li>\n     <li><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#6EC1E4\" stroke-width=\"2.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m5 12 5 5 9-10\"><\/path><\/svg>Statistics dashboard and grammar tracker<\/li>\n     <li><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#6EC1E4\" stroke-width=\"2.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m5 12 5 5 9-10\"><\/path><\/svg>A new handwriting workbook every month<\/li>\n    <\/ul>\n    <a class=\"btn\" href=\"https:\/\/sofapiano.com\/membership-join\/\">Get Plus<\/a>\n   <\/div>\n  <\/div>\n  <div class=\"btns center\" style=\"position:relative\">\n   <a class=\"btn b-teal\" href=\"https:\/\/sofapiano.com\/membership-join\/\">Compare all features<\/a>\n  <\/div>\n <\/section>\n\n <section class=\"ch\" aria-labelledby=\"spx-faq\" style=\"padding-bottom:120px\">\n  <span class=\"dot\" aria-hidden=\"true\"><\/span>\n  <div class=\"ch-head\" style=\"margin-bottom:32px\">\n   <p class=\"kicker\">Before you set off<\/p>\n   <h2 id=\"spx-faq\">A few questions about learning German with sofapiano<\/h2>\n  <\/div>\n  <div class=\"faq\">\n   <details><summary><h3>What is sofapiano?<\/h3><span class=\"fq-ic\" aria-hidden=\"true\"><svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\"><path d=\"M12 5v14M5 12h14\"><\/path><\/svg><\/span><\/summary><p>sofapiano is a German learning platform based on the translation method. You translate real everyday sentences and train grammar naturally in context instead of memorising isolated rules.<\/p><\/details>\n   <details><summary><h3>How does the translation method work?<\/h3><span class=\"fq-ic\" aria-hidden=\"true\"><svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\"><path d=\"M12 5v14M5 12h14\"><\/path><\/svg><\/span><\/summary><p>You see a sentence in English or Spanish and translate it into German. Instant feedback shows which words are right, close or missing, so you understand grammar, vocabulary and sentence structure in context.<\/p><\/details>\n   <details><summary><h3>Is sofapiano suitable for beginners?<\/h3><span class=\"fq-ic\" aria-hidden=\"true\"><svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\"><path d=\"M12 5v14M5 12h14\"><\/path><\/svg><\/span><\/summary><p>Yes. Exercises start at A1 and grammar is explained step by step. Advanced learners at B1 and B2 improve fluency, sentence structure and natural everyday expressions.<\/p><\/details>\n   <details><summary><h3>How much does it cost?<\/h3><span class=\"fq-ic\" aria-hidden=\"true\"><svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\"><path d=\"M12 5v14M5 12h14\"><\/path><\/svg><\/span><\/summary><p>You can practise for free without an account and register for free to unlock more. Plus costs \u20ac4 per month and gives you full access to all grammar topics, saved sentences, statistics and workbooks.<\/p><\/details>\n   <details><summary><h3>How can I cancel my membership?<\/h3><span class=\"fq-ic\" aria-hidden=\"true\"><svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\"><path d=\"M12 5v14M5 12h14\"><\/path><\/svg><\/span><\/summary><p>You can cancel at any time with the cancellation button in your profile settings or by contacting our support.<\/p><\/details>\n   <details><summary><h3>What makes sofapiano different from other language apps?<\/h3><span class=\"fq-ic\" aria-hidden=\"true\"><svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\"><path d=\"M12 5v14M5 12h14\"><\/path><\/svg><\/span><\/summary><p>sofapiano focuses on real language use instead of random vocabulary. All 30,000+ sentences are written and reviewed by native speakers \u2014 no AI-generated filler.<\/p><\/details>\n  <\/div>\n  <style>\n  #spx .btns.faq-btns{position:relative;z-index:1;justify-content:center;max-width:780px;margin:0 auto;padding:28px 0 8px;background:var(--paper)}\n  #spx .faq-btns .btn{min-width:170px}\n  #spx .faq-btns .b-ghost{background:var(--paper)}\n  <\/style>\n  <div class=\"btns center faq-btns\">\n   <a class=\"btn b-teal\" href=\"https:\/\/sofapiano.com\/faq\/\">All FAQs<\/a>\n   <a class=\"btn b-ghost\" href=\"https:\/\/sofapiano.com\/contact\/\">Contact us<\/a>\n  <\/div>\n <\/section>\n<\/div>\n\n\n\n<\/div>\n\n<script>\n(function(){\n var S=[\n  {en:'I stayed at home because it was raining.',de:'Ich bin zu Hause geblieben, weil es geregnet hat.',topic:'B1 \u00b7 SUBORDINATE CLAUSES WITH \u201eWEIL\u201c'},\n  {en:'Could you help me for a moment?',de:'K\u00f6nntest du mir kurz helfen?',topic:'A2 \u00b7 POLITE REQUESTS'},\n  {en:'We are meeting at the station tomorrow.',de:'Wir treffen uns morgen am Bahnhof.',topic:'A1 \u00b7 WORD ORDER WITH TIME'}\n ];\n var idx=0,$=function(id){return document.getElementById(id)};\n var inp=$('spx-input'),res=$('spx-result'),msg=$('spx-msg'),chips=$('spx-chips');\n if(!inp)return;\n function norm(w){return String(w||'').toLowerCase().replace(\/[.,!?;:\u201e\u201c\"]\/g,'').replace(\/\u00e4\/g,'ae').replace(\/\u00f6\/g,'oe').replace(\/\u00fc\/g,'ue').replace(\/\u00df\/g,'ss').trim()}\n function lev(a,b){var m=[],i,j;for(i=0;b.length>=i;i++)m[i]=[i];for(j=0;a.length>=j;j++)m[0][j]=j;for(i=1;b.length>=i;i++)for(j=1;a.length>=j;j++)m[i][j]=b[i-1]===a[j-1]?m[i-1][j-1]:Math.min(m[i-1][j-1]+1,m[i][j-1]+1,m[i-1][j]+1);return m[b.length][a.length]}\n function show(reveal){\n  var s=S[idx],target=s.de.split(\/\\s+\/),user=(reveal?s.de:inp.value).split(\/\\s+\/).filter(Boolean).map(norm),used=user.map(function(){return false}),ok=0;\n  chips.innerHTML='';\n  target.forEach(function(w){\n   var t=norm(w),kind='miss',k=-1;\n   for(var j=0;user.length>j;j++){if(!used[j]&&user[j]===t){k=j;break}}\n   if(k>-1){kind='ok';used[k]=true;ok++}else{for(j=0;user.length>j;j++){if(!used[j]&&user[j]&&(t.length>5?2:1)>=lev(user[j],t)){k=j;break}}if(k>-1){kind='near';used[k]=true}}\n   var c=document.createElement('span');c.className='chip '+kind;c.textContent=w;chips.appendChild(c);\n  });\n  if(reveal)msg.textContent='Here is the solution:';\n  else if(ok===target.length)msg.textContent='Perfekt! Every word is correct.';\n  else if(!inp.value.trim())msg.textContent='Give it a try \u2014 type your translation above.';\n  else msg.textContent=ok+' of '+target.length+' words correct \u2014 try again or show the solution.';\n  res.hidden=false;\n }\n function load(){var s=S[idx];$('spx-topic').textContent=s.topic;$('spx-en').textContent=s.en;$('spx-count').textContent='Sentence '+(idx+1)+' of '+S.length;inp.value='';res.hidden=true}\n $('spx-check').addEventListener('click',function(){show(false)});\n $('spx-solution').addEventListener('click',function(){show(true)});\n $('spx-next').addEventListener('click',function(){idx=(idx+1)%S.length;load();inp.focus()});\n inp.addEventListener('keydown',function(e){if(e.key==='Enter'){e.preventDefault();show(false)}});\n inp.addEventListener('input',function(){res.hidden=true});\n})();\n<\/script>\n<script>\n(function(){\n var PLAY='<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M7 4v16l13-8z\"\/><\/svg>';\n var STOP='<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><rect x=\"5\" y=\"5\" width=\"14\" height=\"14\" rx=\"2\"\/><\/svg>';\n var msgs=document.querySelectorAll('#spx .vmsg');\n if(!msgs.length)return;\n var current=null,audio=null,synth=window.speechSynthesis;\n msgs.forEach(function(m,n){\n  var w=m.querySelector('.wave');\n  if(!w.children.length)for(var i=0;28>i;i++){var b=document.createElement('i');b.style.height=(6+Math.round(Math.abs(Math.sin(i*0.9+n*1.7))*20))+'px';b.style.animationDelay=(i%7*0.08)+'s';w.appendChild(b)}\n  var btn=m.querySelector('.vplay');btn.innerHTML=PLAY;\n  btn.addEventListener('click',function(){if(current===m){stop();return}stop();start(m)});\n });\n function germanVoice(){if(!synth)return null;var v=synth.getVoices();for(var i=0;v.length>i;i++){if(\/^de\/i.test(v[i].lang))return v[i]}return null}\n function start(m){\n  current=m;m.classList.add('playing');m.querySelector('.vplay').innerHTML=STOP;\n  var src=m.getAttribute('data-audio');\n  var done=function(){if(current===m)stop()};\n  if(src){audio=new Audio(src);audio.onended=done;audio.play().catch(done);return}\n  if(!synth){stop();return}\n  var u=new SpeechSynthesisUtterance(m.getAttribute('data-say'));\n  u.lang='de-DE';u.rate=0.95;var gv=germanVoice();if(gv)u.voice=gv;\n  u.onend=done;u.onerror=done;synth.speak(u);\n }\n function stop(){\n  if(audio){audio.pause();audio=null}\n  if(synth)synth.cancel();\n  if(current){current.classList.remove('playing');current.querySelector('.vplay').innerHTML=PLAY;current=null}\n }\n if(synth&&synth.onvoiceschanged!==undefined)synth.onvoiceschanged=function(){};\n})();\n<\/script>\n\n\n\n<span hidden data-spx-mark=\"foot-start\"><\/span>\n<style>\n\/* ===== Footer: Petrol, klar gegliedert in vier Spalten ===== *\/\nhtml,body{background:#FBF8F2}\n.spx-foot.f2{background:#0F5C73;color:#E6F3F7;margin:0!important;padding:0;line-height:1.5}\n.spx-foot.f2 *{box-sizing:border-box}\n.spx-foot.f2 .f2-in{max-width:1168px;margin:0 auto;padding:44px 24px 0}\n.spx-foot.f2 .f2-top{display:grid;grid-template-columns:minmax(0,1fr) repeat(3,140px);gap:32px 40px;padding-bottom:34px}\n.spx-foot.f2 .f2-logo{display:inline-flex;align-items:center;gap:20px;font-family:'Fraunces',Georgia,serif;font-size:22px;font-weight:600;letter-spacing:-.3px;line-height:1;color:#fff;text-decoration:none}\n.spx-foot.f2 .f2-logo:hover{color:#fff;text-decoration:none}\n.spx-foot.f2 .f2-logo .logo-dot{display:block;width:12px;height:12px;border-radius:50%;background:#FFCF33;box-shadow:8px 0 0 #6EC1E4}\n.spx-foot.f2 .f2-claim{margin:14px 0 18px;max-width:300px;font-size:14px;color:#CFE6EE}\n.spx-foot.f2 .f2-claim em{font-family:'Fraunces',Georgia,serif;font-style:italic;color:#FFCF33}\n.spx-foot.f2 .f2-cta{display:inline-flex;align-items:center;min-height:44px;padding:0 20px;border-radius:999px;background:#FFCF33;color:#0E1A20;font-size:14px;font-weight:700;text-decoration:none}\n.spx-foot.f2 .f2-cta:hover{background:#FFD94F;color:#0E1A20;text-decoration:none}\n.spx-foot.f2 .f2-h{margin:0 0 12px;font-size:11px;font-weight:800;letter-spacing:1.3px;text-transform:uppercase;color:#9FD3E6}\n.spx-foot.f2 ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}\n.spx-foot.f2 li{margin:0}\n.spx-foot.f2 .f2-top a.f2-l{font-size:14.5px;font-weight:500;color:#fff;text-decoration:none}\n.spx-foot.f2 .f2-top a.f2-l:hover{color:#FFCF33;text-decoration:none}\n.spx-foot.f2 .f2-bot{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 24px;padding:16px 0 20px;border-top:1px solid rgba(255,255,255,.16);font-size:12.5px;color:#B5D6E1}\n.spx-foot.f2 .f2-legal{display:flex;flex-wrap:wrap;gap:4px 18px}\n.spx-foot.f2 .f2-legal a{font-size:12.5px;color:#B5D6E1;text-decoration:none}\n.spx-foot.f2 .f2-legal a:hover{color:#fff;text-decoration:none}\n.spx-foot.f2 a:focus-visible{outline:2px solid #fff;outline-offset:2px;border-radius:6px}\n@media (max-width:900px){\n .spx-foot.f2 .f2-top{grid-template-columns:repeat(3,minmax(0,1fr))}\n .spx-foot.f2 .f2-brand{grid-column:1 \/ -1}\n .spx-foot.f2 .f2-top{gap:32px 40px}\n .spx-foot.f2 .f2-claim{max-width:340px}\n}\n@media (max-width:560px){\n .spx-foot.f2 .f2-in{padding:32px 20px 0}\n .spx-foot.f2 .f2-top{grid-template-columns:repeat(2,minmax(0,1fr));gap:26px 20px}\n}\n<\/style>\n<footer class=\"spx-foot f2\">\n <div class=\"f2-in\">\n  <div class=\"f2-top\">\n   <div class=\"f2-brand\">\n    <a class=\"f2-logo\" href=\"https:\/\/sofapiano.com\/\"><span class=\"logo-dot\" aria-hidden=\"true\"><\/span>sofapiano<\/a>\n    <p class=\"f2-claim\">Learn German <em>through translation<\/em> \u2014 with real sentences native speakers use every day.<\/p>\n    <a class=\"f2-cta\" href=\"https:\/\/sofapiano.com\/exercises\/\">Start practising free<\/a>\n   <\/div>\n   <nav aria-label=\"Practise\">\n    <p class=\"f2-h\">Practise<\/p>\n    <ul>\n     <li><a class=\"f2-l\" href=\"https:\/\/sofapiano.com\/exercises\/\">Exercises<\/a><\/li>\n     <li><a class=\"f2-l\" href=\"https:\/\/sofapiano.com\/level-test\/\">Level test<\/a><\/li>\n     <li><a class=\"f2-l\" href=\"https:\/\/sofapiano.com\/quiz\/\">Quiz<\/a><\/li>\n    <\/ul>\n   <\/nav>\n   <nav aria-label=\"Tools\">\n    <p class=\"f2-h\">Tools<\/p>\n    <ul>\n     <li><a class=\"f2-l\" href=\"https:\/\/sofapiano.com\/learning-tools\/\">Learning tools<\/a><\/li>\n     <li><a class=\"f2-l\" href=\"https:\/\/sofapiano.com\/workbook\/\">Workbook<\/a><\/li>\n     <li><a class=\"f2-l\" href=\"https:\/\/sofapiano.com\/blog\/\">Blog<\/a><\/li>\n    <\/ul>\n   <\/nav>\n   <nav aria-label=\"sofapiano\">\n    <p class=\"f2-h\">sofapiano<\/p>\n    <ul>\n     <li><a class=\"f2-l\" href=\"https:\/\/sofapiano.com\/the-sofapiano-story\/\">Our story<\/a><\/li>\n     <li><a class=\"f2-l\" href=\"https:\/\/sofapiano.com\/membership-join\/\">Membership<\/a><\/li>\n     <li><a class=\"f2-l\" href=\"https:\/\/sofapiano.com\/faq\/\">FAQ<\/a><\/li>\n     <li><a class=\"f2-l\" href=\"https:\/\/sofapiano.com\/contact\/\">Contact<\/a><\/li>\n    <\/ul>\n   <\/nav>\n  <\/div>\n  <div class=\"f2-bot\">\n   <span>\u00a9 2026 sofapiano<\/span>\n   <nav class=\"f2-legal\" aria-label=\"Legal\">\n    <a href=\"https:\/\/sofapiano.com\/privacy-policy\/\">Privacy Policy<\/a>\n    <a href=\"https:\/\/sofapiano.com\/terms-conditions\/\">Terms &amp; Conditions<\/a>\n    <a href=\"https:\/\/sofapiano.com\/terms-of-use\/\">Terms of Use<\/a>\n    <a href=\"https:\/\/sofapiano.com\/cookie-notice\/\">Cookie Notice<\/a>\n    <a href=\"https:\/\/sofapiano.com\/impressum\/\">Impressum<\/a>\n   <\/nav>\n  <\/div>\n <\/div>\n<\/footer>\n<span hidden data-spx-mark=\"foot-end\"><\/span>\n","protected":false},"excerpt":{"rendered":"<p>You know the words. So why won\u2019t the sentence come? Learn German through translation. Learn German the way native speakers actually speak. From textbook German to real conversations- one sentence at a time \u2013 from A1 to B2. Start practicing now Create free account Try it \u2014 it\u2019s live Loading&#8230; Ich h\u00e4tte gern einen Kaffee. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":16234,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-18812","page","type-page","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Learn German Through Translation | Free A1\u2013B2 Practice<\/title>\n<meta name=\"description\" content=\"Learn German through translation with real everyday sentences. Free exercises, listening trainer and level test from A1 to B2. Start in seconds.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/sofapiano.com\/es\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Learn German Through Translation | sofapiano\" \/>\n<meta property=\"og:description\" content=\"You know the words, but the sentence won&#039;t come? Translate real everyday sentences and speak German with confidence, from A1 to B2. Free to start.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/sofapiano.com\/es\/\" \/>\n<meta property=\"og:site_name\" content=\"sofapiano\" \/>\n<meta property=\"article:modified_time\" content=\"2026-11-04T07:02:39+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/sofapiano.com\/wp-content\/uploads\/2026\/05\/German-English-Translation-Exercise-1.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1241\" \/>\n\t<meta property=\"og:image:height\" content=\"741\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Learn German Through Translation | sofapiano\" \/>\n<meta name=\"twitter:description\" content=\"Translate real everyday sentences and speak German with confidence, from A1 to B2. Free to start.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/sofapiano.com\/wp-content\/uploads\/2026\/05\/German-English-Translation-Exercise-1.webp\" \/>\n<meta name=\"twitter:label1\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data1\" content=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/sofapiano.com\\\/\",\"url\":\"https:\\\/\\\/sofapiano.com\\\/\",\"name\":\"Learn German Through Translation | Free A1\u2013B2 Practice\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sofapiano.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/sofapiano.com\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/sofapiano.com\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/sofapiano.com\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/German-English-Translation-Exercise-1.webp\",\"datePublished\":\"2026-10-27T22:19:30+00:00\",\"dateModified\":\"2026-11-04T07:02:39+00:00\",\"description\":\"Learn German through translation with real everyday sentences. Free exercises, listening trainer and level test from A1 to B2. Start in seconds.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/sofapiano.com\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/sofapiano.com\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/sofapiano.com\\\/#primaryimage\",\"url\":\"https:\\\/\\\/sofapiano.com\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/German-English-Translation-Exercise-1.webp\",\"contentUrl\":\"https:\\\/\\\/sofapiano.com\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/German-English-Translation-Exercise-1.webp\",\"width\":1241,\"height\":741,\"caption\":\"Free Exercises for Learning German in different levels\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/sofapiano.com\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Start\",\"item\":\"https:\\\/\\\/sofapiano.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Home\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/sofapiano.com\\\/#website\",\"url\":\"https:\\\/\\\/sofapiano.com\\\/\",\"name\":\"sofapiano\",\"description\":\"Learn German through translation\",\"publisher\":{\"@id\":\"https:\\\/\\\/sofapiano.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/sofapiano.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/sofapiano.com\\\/#organization\",\"name\":\"sofapiano\",\"url\":\"https:\\\/\\\/sofapiano.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/sofapiano.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/sofapiano.com\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/cropped-Gemini_Generated_Image_m1p5p9m1p5p9m1p5-e1793819719304.png\",\"contentUrl\":\"https:\\\/\\\/sofapiano.com\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/cropped-Gemini_Generated_Image_m1p5p9m1p5p9m1p5-e1793819719304.png\",\"width\":1683,\"height\":1156,\"caption\":\"sofapiano\"},\"image\":{\"@id\":\"https:\\\/\\\/sofapiano.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Learn German Through Translation | Free A1\u2013B2 Practice","description":"Learn German through translation with real everyday sentences. Free exercises, listening trainer and level test from A1 to B2. Start in seconds.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/sofapiano.com\/es\/","og_locale":"es_ES","og_type":"article","og_title":"Learn German Through Translation | sofapiano","og_description":"You know the words, but the sentence won't come? Translate real everyday sentences and speak German with confidence, from A1 to B2. Free to start.","og_url":"https:\/\/sofapiano.com\/es\/","og_site_name":"sofapiano","article_modified_time":"2026-11-04T07:02:39+00:00","og_image":[{"width":1241,"height":741,"url":"https:\/\/sofapiano.com\/wp-content\/uploads\/2026\/05\/German-English-Translation-Exercise-1.webp","type":"image\/webp"}],"twitter_card":"summary_large_image","twitter_title":"Learn German Through Translation | sofapiano","twitter_description":"Translate real everyday sentences and speak German with confidence, from A1 to B2. Free to start.","twitter_image":"https:\/\/sofapiano.com\/wp-content\/uploads\/2026\/05\/German-English-Translation-Exercise-1.webp","twitter_misc":{"Tiempo de lectura":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/sofapiano.com\/","url":"https:\/\/sofapiano.com\/","name":"Learn German Through Translation | Free A1\u2013B2 Practice","isPartOf":{"@id":"https:\/\/sofapiano.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/sofapiano.com\/#primaryimage"},"image":{"@id":"https:\/\/sofapiano.com\/#primaryimage"},"thumbnailUrl":"https:\/\/sofapiano.com\/wp-content\/uploads\/2026\/05\/German-English-Translation-Exercise-1.webp","datePublished":"2026-10-27T22:19:30+00:00","dateModified":"2026-11-04T07:02:39+00:00","description":"Learn German through translation with real everyday sentences. Free exercises, listening trainer and level test from A1 to B2. Start in seconds.","breadcrumb":{"@id":"https:\/\/sofapiano.com\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/sofapiano.com\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/sofapiano.com\/#primaryimage","url":"https:\/\/sofapiano.com\/wp-content\/uploads\/2026\/05\/German-English-Translation-Exercise-1.webp","contentUrl":"https:\/\/sofapiano.com\/wp-content\/uploads\/2026\/05\/German-English-Translation-Exercise-1.webp","width":1241,"height":741,"caption":"Free Exercises for Learning German in different levels"},{"@type":"BreadcrumbList","@id":"https:\/\/sofapiano.com\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Start","item":"https:\/\/sofapiano.com\/"},{"@type":"ListItem","position":2,"name":"Home"}]},{"@type":"WebSite","@id":"https:\/\/sofapiano.com\/#website","url":"https:\/\/sofapiano.com\/","name":"sofapiano","description":"Aprende alem\u00e1n a trav\u00e9s de la traducci\u00f3n","publisher":{"@id":"https:\/\/sofapiano.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/sofapiano.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/sofapiano.com\/#organization","name":"sofapiano","url":"https:\/\/sofapiano.com\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/sofapiano.com\/#\/schema\/logo\/image\/","url":"https:\/\/sofapiano.com\/wp-content\/uploads\/2026\/11\/cropped-Gemini_Generated_Image_m1p5p9m1p5p9m1p5-e1793819719304.png","contentUrl":"https:\/\/sofapiano.com\/wp-content\/uploads\/2026\/11\/cropped-Gemini_Generated_Image_m1p5p9m1p5p9m1p5-e1793819719304.png","width":1683,"height":1156,"caption":"sofapiano"},"image":{"@id":"https:\/\/sofapiano.com\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/sofapiano.com\/es\/wp-json\/wp\/v2\/pages\/18812","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sofapiano.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sofapiano.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sofapiano.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sofapiano.com\/es\/wp-json\/wp\/v2\/comments?post=18812"}],"version-history":[{"count":184,"href":"https:\/\/sofapiano.com\/es\/wp-json\/wp\/v2\/pages\/18812\/revisions"}],"predecessor-version":[{"id":19593,"href":"https:\/\/sofapiano.com\/es\/wp-json\/wp\/v2\/pages\/18812\/revisions\/19593"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sofapiano.com\/es\/wp-json\/wp\/v2\/media\/16234"}],"wp:attachment":[{"href":"https:\/\/sofapiano.com\/es\/wp-json\/wp\/v2\/media?parent=18812"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}