{"id":82,"date":"2026-03-09T16:41:36","date_gmt":"2026-03-09T16:41:36","guid":{"rendered":"http:\/\/sofapiano.com\/?page_id=82"},"modified":"2026-11-03T12:50:17","modified_gmt":"2026-11-03T12:50:17","slug":"a1-mixed-translations","status":"publish","type":"page","link":"https:\/\/sofapiano.com\/es\/a1-mixed-translations\/","title":{"rendered":"Traducciones mixtas"},"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<div class=\"spx-page\">\n<div class=\"spx\"><section class=\"a1-head\" aria-labelledby=\"pg-h1\"><div class=\"wrap\">\n<p class=\"kicker\">Exercises \u00b7 A1<\/p>\n<h1 id=\"pg-h1\">German A1 <em>mixed translations<\/em><\/h1>\n<p class=\"a1-sub\">Free A1 German practice: translate real sentences native speakers use every day and get instant feedback.<\/p>\n<\/div><\/section><\/div>\n<div class=\"a1-stage\">\n<script>window.__spxLevel = \"A1\"; window.__spxGrammar = false;<\/script>\n\n\n\n<style id=\"spx-uebung-2e\">\n\/* ===== \u00dcbung \u201eIdee 2E \u2013 Verlaufsrahmen\u201c (alle \u00dcbungsseiten A1\u2013B2, 03.11.2026) =====\n   Rahmen als Farbverlauf: links Petrol, nach rechts hellblau bis sandfarben auslaufend.\n   Heller Kopfstreifen, umrandete runde Buttons, Check-Button als kleine Petrol-Pille. *\/\nhtml body .spx-page #trainer-container .tr-card {\n  border: 1.5px solid transparent !important;\n  background: linear-gradient(#FFFFFF, #FFFFFF) padding-box, linear-gradient(90deg, #14708C 0%, #7FB9CC 18%, #D9E7EC 45%, #E8E3D9 100%) border-box !important;\n  border-radius: 16px !important; box-shadow: 0 6px 20px rgba(20,112,140,0.06) !important;\n}\nhtml body .spx-page #trainer-container .tr-head {\n  background: #F2F8FA !important; color: #14708C !important;\n  padding: 8px 10px 8px 16px !important; gap: 10px !important; border-bottom: 1px solid #E2EEF2 !important;\n}\nhtml body .spx-page #trainer-container .tr-head button:focus-visible { outline-color: #14708C !important; }\nhtml body .spx-page #trainer-container .filter-toggle-btn,\nhtml body .spx-page #trainer-container .filter-toggle-btn.is-static:hover {\n  background: transparent !important; box-shadow: none !important; min-height: 44px !important; padding: 0 !important;\n  font-family: var(--font-serif) !important; font-size: 17px !important; font-weight: 500 !important; letter-spacing: 0 !important; color: #0E5367 !important;\n}\nhtml body .spx-page #trainer-container .fc-text { display: flex !important; align-items: center !important; }\nhtml body .spx-page #trainer-container .filter-toggle-btn .fc-level {\n  display: inline-flex !important; align-items: center !important; justify-content: center !important;\n  height: 26px !important; padding: 0 8px !important; margin-right: 10px !important; border: none !important; border-radius: 7px !important;\n  background: #14708C !important; color: #FFFFFF !important;\n  font-family: 'Inter', 'Segoe UI', Roboto, Arial, sans-serif !important; font-size: 12px !important; font-weight: 700 !important;\n  line-height: 1 !important; letter-spacing: 0.3px !important;\n}\nhtml body .spx-page #trainer-container .fc-topic-name { color: #0E5367 !important; font-weight: 500 !important; }\nhtml body .spx-page #trainer-container .filter-toggle-btn:not(.is-static) { cursor: pointer !important; }\nhtml body .spx-page #trainer-container .filter-toggle-btn:not(.is-static):hover { background: transparent !important; }\nhtml body .spx-page #trainer-container .filter-toggle-btn:not(.is-static):hover .fc-topic-name { text-decoration: underline !important; text-underline-offset: 3px !important; }\nhtml body .spx-page #trainer-container .fc-caret { min-height: 30px !important; padding: 0 11px !important; font-size: 12px !important; }\nhtml body .spx-page #trainer-container .tr-head-actions { gap: 2px !important; }\nhtml body .spx-page #trainer-container .tr-icon-btn {\n  width: 44px !important; height: 44px !important; background: transparent !important; box-shadow: none !important; color: #14708C !important;\n}\nhtml body .spx-page #trainer-container .tr-icon-btn:hover { background: #E2F0F4 !important; }\nhtml body .spx-page #trainer-container .tr-icon-btn.tr-lang {\n  width: auto !important; height: 30px !important; padding: 0 11px !important; margin: 7px 4px 7px 0 !important; border-radius: 999px !important;\n  background: transparent !important; box-shadow: inset 0 0 0 1px #C7DDE5 !important; color: #14708C !important;\n  font-size: 12px !important; font-weight: 700 !important;\n}\nhtml body .spx-page #trainer-container .tr-icon-btn.tr-lang:hover { background: #E2F0F4 !important; box-shadow: inset 0 0 0 1px #14708C !important; }\n\nhtml body .spx-page #trainer-container .sentence-block { background: #FFFFFF !important; padding: 44px 32px 28px 32px !important; }\nhtml body .spx-page #trainer-container .listen-btn {\n  top: 12px !important; right: 14px !important; width: 40px !important; height: 40px !important;\n  background: transparent !important; box-shadow: inset 0 0 0 1px #D9E7EC !important; color: #14708C !important;\n}\nhtml body .spx-page #trainer-container .listen-btn:hover { background: #E2F0F4 !important; }\nhtml body .spx-page #trainer-container .source { font-size: 28px !important; font-weight: 500 !important; margin: 0 0 26px 0 !important; line-height: 1.3 !important; }\n\nhtml body .spx-page #trainer-container .input-wrapper { max-width: 560px !important; }\nhtml body .spx-page #trainer-container textarea {\n  min-height: 50px !important; padding: 13px 52px 13px 52px !important;\n  border: 1px solid #C7DDE5 !important; border-radius: 25px !important; background: #FFFFFF !important;\n  box-shadow: none !important; font-size: 16px !important; font-weight: 400 !important; line-height: 1.45 !important;\n}\nhtml body .spx-page #trainer-container textarea:focus { border-color: #14708C !important; box-shadow: 0 0 0 3px #E2F0F4 !important; }\nhtml body .spx-page #trainer-container textarea::placeholder { color: #8E979A !important; }\nhtml body .spx-page #trainer-container .mic-in-input { top: 3px !important; right: 4px !important; color: #14708C !important; background: transparent !important; }\nhtml body .spx-page #trainer-container .mic-in-input:hover { background: #E2F0F4 !important; }\n\nhtml body .spx-page #trainer-container .sentence-controls { gap: 12px !important; margin-top: 24px !important; align-items: flex-start !important; }\nhtml body .spx-page #trainer-container .control-item { gap: 5px !important; }\nhtml body .spx-page #trainer-container .btn-icon {\n  width: 44px !important; height: 44px !important; border-radius: 50% !important; margin-top: 0 !important;\n  background: transparent !important; box-shadow: inset 0 0 0 1px #E2DCD0 !important; color: #3E4A4E !important;\n}\nhtml body .spx-page #trainer-container .btn-icon:hover { background: #F7F4EE !important; }\nhtml body .spx-page #trainer-container .btn-icon.saved { background: #E2F0F4 !important; color: #14708C !important; box-shadow: inset 0 0 0 1px #C7DDE5 !important; }\nhtml body .spx-page #trainer-container .btn-icon.is-disabled { opacity: 0.45 !important; }\nhtml body .spx-page #trainer-container .ctrl-next .btn-icon { color: #14708C !important; box-shadow: inset 0 0 0 1px #C7DDE5 !important; }\nhtml body .spx-page #trainer-container .ctrl-check { margin: 0 6px !important; }\nhtml body .spx-page #trainer-container .ctrl-check .btn-icon {\n  width: 48px !important; height: 44px !important; margin-top: 0 !important; border-radius: 999px !important;\n  background: #14708C !important; color: #FFFFFF !important; box-shadow: none !important;\n}\nhtml body .spx-page #trainer-container .ctrl-check .btn-icon:hover { background: #0E5367 !important; }\nhtml body .spx-page #trainer-container .btn-label { font-size: 11px !important; font-weight: 500 !important; color: #5E686B !important; }\nhtml body .spx-page #trainer-container .ctrl-check .btn-label { color: #14708C !important; font-weight: 700 !important; }\n\n@media (max-width: 800px) {\n  html body .spx-page #trainer-container .tr-head { padding: 6px 6px 6px 12px !important; }\n  html body .spx-page #trainer-container .filter-toggle-btn { font-size: 15px !important; }\n  html body .spx-page #trainer-container .tr-icon-btn { width: 40px !important; height: 40px !important; }\n  html body .spx-page #trainer-container .tr-icon-btn.tr-lang { height: 28px !important; margin: 6px 2px 6px 0 !important; padding: 0 9px !important; }\n  html body .spx-page #trainer-container .sentence-block { padding: 46px 16px 22px 16px !important; }\n  html body .spx-page #trainer-container .source { font-size: 22px !important; padding: 0 30px !important; }\n  html body .spx-page #trainer-container textarea { font-size: 16px !important; min-height: 48px !important; padding: 12px 48px 12px 16px !important; }\n  html body .spx-page #trainer-container .sentence-controls { gap: 8px !important; }\n  html body .spx-page #trainer-container .btn-icon { width: 44px !important; height: 44px !important; border-radius: 50% !important; }\n  html body .spx-page #trainer-container .ctrl-check .btn-icon { width: 48px !important; height: 44px !important; border-radius: 999px !important; margin-top: 0 !important; }\n  html body .spx-page #trainer-container .ctrl-check { margin: 0 2px !important; }\n}\n\n\/* Satz + Button unter der \u00dcbung (Footer-Claim) auf den \u00dcbungsseiten ausblenden *\/\nhtml body.page-id-82 .f2-claim, html body.page-id-82 .f2-cta, html body.page-id-85 .f2-claim, html body.page-id-85 .f2-cta, html body.page-id-472 .f2-claim, html body.page-id-472 .f2-cta, html body.page-id-473 .f2-claim, html body.page-id-473 .f2-cta, html body.page-id-488 .f2-claim, html body.page-id-488 .f2-cta, html body.page-id-491 .f2-claim, html body.page-id-491 .f2-cta, html body.page-id-497 .f2-claim, html body.page-id-497 .f2-cta, html body.page-id-499 .f2-claim, html body.page-id-499 .f2-cta { display: none !important; }\n\/* Change-Knopf direkt hinter der \u00dcberschrift (wandert mit der Titell\u00e4nge) *\/\nhtml body .spx-page #trainer-container .filter-toggle-btn { justify-content: flex-start !important; gap: 12px !important; }\nhtml body .spx-page #trainer-container .fc-text { flex: 0 1 auto !important; min-width: 0 !important; overflow: hidden !important; }\nhtml body .spx-page #trainer-container .fc-topic-name { overflow: hidden !important; text-overflow: ellipsis !important; white-space: nowrap !important; min-width: 0 !important; }\nhtml body .spx-page #trainer-container .fc-caret { flex: 0 0 auto !important; margin-left: 0 !important; }\n<\/style>\n<div id=\"trainer-container\" class=\"trainer-app\">\n<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Fraunces:ital,opsz,wght@0,9..144,500;0,9..144,600;1,9..144,500&family=Inter:wght@500;600;700;800&display=swap');\n\nhtml, body { max-width: 100% !important; overflow-x: hidden !important; width: 100% !important; position: relative !important; }\n\n\/* ============ DESIGN TOKENS (sofapiano Website-Design) ============\n   Petrol-Kopf + wei\u00dfer \u00dcbungsbereich in EINEM Kasten.\n   Farben\/Schriften wie auf der Startseite: Petrol, Himmelblau, Creme, Fraunces + Inter. *\/\n#trainer-container.trainer-app {\n  display: block !important;\n  max-width: 640px !important;\n  margin: 0px auto !important;\n  font-family: 'Inter', 'Segoe UI', Roboto, Helvetica, Arial, sans-serif !important;\n  --font-serif: 'Fraunces', Georgia, 'Times New Roman', serif;\n  --ink: #1D2427;\n  --muted: #5E686B;\n  --paper: #FBF8F2;\n  --soft: #F4F1EA;\n  --soft-hover: #ECE6DA;\n  --card: #F2F8FA;\n  --line: #E6DFD1;\n  --field-line: #E5E0D6;\n\n  --teal: #14708C;\n  --teal-dark: #0E5367;\n  --teal-soft: #E2F0F4;\n  --teal-ring: #D6EEF6;\n  --sky: #6EC1E4;\n\n  --correct: #DCEBD9; --correct-ink: #2E4B29; --correct-border: #B9D9B0;\n  --tip: #FFF0B3; --tip-ink: #5A3E00; --tip-border: #E9C46A;\n  --missing: #F7DDD5; --missing-ink: #8A3A25; --missing-border: #E4AA98;\n\n  --source-size: 30px;\n  --input-size: 17px;\n  --feedback-size: 21px;\n  --alt-size: 16px;\n  --input-width: 100%;\n  color: var(--ink) !important;\n}\n#trainer-container.trainer-app *, #trainer-container.trainer-app *::before, #trainer-container.trainer-app *::after {\n  box-sizing: border-box !important;\n}\n#trainer-container button:focus-visible, #trainer-container [tabindex]:focus-visible,\n#trainer-container textarea:focus-visible, #trainer-container input:focus-visible {\n  outline: 2px solid var(--teal) !important; outline-offset: 2px !important;\n}\n#trainer-container .tr-head button:focus-visible { outline-color: #FFFFFF !important; }\n#trainer-container svg { display: block !important; }\n#trainer-container .tr-sr {\n  position: absolute !important; width: 1px !important; height: 1px !important; overflow: hidden !important;\n  clip: rect(0 0 0 0) !important; white-space: nowrap !important;\n}\n\n\/* ---- Ein Kasten: Petrol-Kopf + wei\u00dfer \u00dcbungsbereich ---- *\/\n#trainer-container .tr-card {\n  position: relative !important; background: var(--card) !important; border: 3px solid var(--teal) !important;\n  border-radius: 28px !important; overflow: hidden !important;\n  box-shadow: 0 14px 36px rgba(29,36,39,0.08) !important;\n}\n#trainer-container .tr-head {\n  background: var(--teal) !important; color: #FFFFFF !important;\n  padding: 22px 24px 20px 24px !important; display: flex !important; flex-direction: column !important; gap: 16px !important;\n}\n#trainer-container .tr-head-top { display: flex !important; justify-content: space-between !important; align-items: flex-start !important; gap: 12px !important; }\n#trainer-container .tr-level { display: flex !important; align-items: flex-end !important; gap: 12px !important; min-width: 0 !important; }\n#trainer-container .tr-level-code {\n  font-family: var(--font-serif) !important; font-size: 56px !important; font-weight: 600 !important;\n  line-height: 0.9 !important; letter-spacing: -2px !important; color: #FFFFFF !important;\n}\n#trainer-container .tr-level-name { display: none !important; font-size: 13px !important; font-weight: 600 !important; line-height: 1.35 !important; padding-bottom: 3px !important; color: #C9D6DB !important; }\n#trainer-container .tr-head-actions { display: flex !important; gap: 8px !important; flex-shrink: 0 !important; }\n#trainer-container .tr-icon-btn {\n  all: unset !important; box-sizing: border-box !important; cursor: pointer !important; position: relative !important;\n  width: 44px !important; height: 44px !important; border-radius: 50% !important;\n  background: rgba(255,255,255,0.14) !important; color: #FFFFFF !important;\n  display: flex !important; align-items: center !important; justify-content: center !important;\n  font-family: inherit !important; transition: background 0.15s ease !important;\n}\n#trainer-container .tr-icon-btn:hover { background: rgba(255,255,255,0.26) !important; }\n#trainer-container .tr-icon-btn.tr-lang {\n  width: auto !important; padding: 0 14px !important; border-radius: 999px !important; background: transparent !important;\n  box-shadow: inset 0 0 0 1.5px rgba(255,255,255,0.55) !important; font-size: 13px !important; font-weight: 700 !important; letter-spacing: 0.3px !important;\n}\n#trainer-container .tr-icon-btn.tr-lang:hover { box-shadow: inset 0 0 0 1.5px #FFFFFF !important; background: rgba(255,255,255,0.08) !important; }\n#trainer-container .mft-icon { display: flex !important; }\n\n\/* Themen-Auswahl im Kopf *\/\n#trainer-container .top-bar { display: block !important; }\n#trainer-container .filter-toggle-btn {\n  all: unset !important; box-sizing: border-box !important; cursor: pointer !important; width: 100% !important;\n  display: flex !important; align-items: center !important; justify-content: space-between !important; gap: 10px !important;\n  min-height: 52px !important; padding: 6px 8px 6px 20px !important; border-radius: 999px !important;\n  background: rgba(255,255,255,0.12) !important; box-shadow: inset 0 0 0 1px rgba(255,255,255,0.25) !important;\n  font-family: inherit !important; font-size: 15px !important; font-weight: 700 !important; color: #FFFFFF !important;\n  transition: background 0.15s ease !important;\n}\n#trainer-container .filter-toggle-btn:hover { background: rgba(255,255,255,0.2) !important; }\n#trainer-container .filter-toggle-btn.is-static { cursor: default !important; }\n#trainer-container .filter-toggle-btn.is-static:hover { background: rgba(255,255,255,0.12) !important; }\n\n\/* ---- \u00dcbungsseiten: Hintergrund \u201eLampe von oben\u201c + Abstand unter dem Trainer ---- *\/\n.spx-page { background: radial-gradient(ellipse 80% 75% at 50% 0%, #FFFFFF 0%, #FBF8F2 50%, #F0EADE 100%) !important; }\n.spx-page .a1-stage { padding-bottom: 150px !important; }\n@media (max-width: 640px) { .spx-page .a1-stage { padding-bottom: 110px !important; } }\n#trainer-container .fc-text { flex: 1 1 auto !important; min-width: 0 !important; overflow: hidden !important; text-overflow: ellipsis !important; white-space: nowrap !important; text-align: left !important; }\n#trainer-container .fc-eyebrow { font-family: var(--font-serif) !important; font-style: italic !important; font-weight: 500 !important; color: #CFEFFB !important; margin-right: 4px !important; }\n#trainer-container .fc-topic-name { color: #FFFFFF !important; }\n#trainer-container .fc-caret {\n  flex-shrink: 0 !important; display: inline-flex !important; align-items: center !important; gap: 6px !important;\n  min-height: 36px !important; padding: 0 12px !important; border-radius: 999px !important;\n  background: #FFCF33 !important; color: #0E1A20 !important; font-size: 13px !important; font-weight: 700 !important;\n}\n\n\/* Tagesziel im Kopf *\/\n#trainer-container .daily-goal { display: none !important; align-items: center !important; gap: 14px !important; cursor: default !important; }\n#trainer-container .dg-label { font-size: 13px !important; font-weight: 700 !important; color: #FFFFFF !important; white-space: nowrap !important; }\n#trainer-container .dg-track { flex: 1 1 auto !important; height: 8px !important; border-radius: 999px !important; background: rgba(255,255,255,0.14) !important; overflow: hidden !important; }\n#trainer-container .dg-fill {\n  height: 100% !important; width: 0%; border-radius: 999px !important; background: var(--sky) !important;\n  transition: width 0.5s cubic-bezier(.25,.8,.25,1) !important;\n}\n#trainer-container .daily-goal.reached .dg-fill { background: #FFFFFF !important; }\n#trainer-container .dg-count {\n  font-size: 13px !important; font-weight: 700 !important; color: #C9D6DB !important; font-variant-numeric: tabular-nums !important;\n  cursor: pointer !important; text-decoration: underline dotted !important; text-underline-offset: 3px !important; white-space: nowrap !important;\n}\n\n\/* ---- \u00dcbungsbereich (wei\u00df) ---- *\/\n#trainer-container .sentence-block {\n  position: relative !important; padding: 46px 28px 28px 28px !important; background: var(--card) !important;\n  text-align: center !important; font-family: inherit !important;\n  animation: cardIn 0.35s ease both !important;\n}\n@keyframes cardIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: translateY(0); } }\n#trainer-container .sentence-block.ui-loading { color: var(--muted) !important; font-weight: 600 !important; padding: 50px 20px !important; animation: loadingPulse 1.3s ease-in-out infinite !important; }\n@keyframes loadingPulse { 0%, 100% { opacity: 0.55; } 50% { opacity: 1; } }\n#trainer-container .empty-state { padding: 50px 20px !important; text-align: center !important; color: var(--muted) !important; font-size: 14px !important; }\n#trainer-container .empty-state svg { display: inline-block !important; vertical-align: -3px !important; margin-right: 4px !important; }\n\n#trainer-container .listen-btn {\n  all: unset !important; box-sizing: border-box !important; cursor: pointer !important; position: absolute !important; top: 14px !important; right: 14px !important;\n  width: 44px !important; height: 44px !important; border-radius: 50% !important; background: var(--teal-soft) !important; color: var(--teal) !important;\n  display: flex !important; align-items: center !important; justify-content: center !important; transition: background 0.15s ease !important;\n}\n#trainer-container .listen-btn:hover { background: #D3E8EF !important; }\n\n#trainer-container .source {\n  display: block !important; font-family: var(--font-serif) !important; font-size: var(--source-size) !important;\n  font-weight: 600 !important; font-optical-sizing: auto !important; color: var(--ink) !important;\n  margin: 0 0 24px 0 !important; padding: 0 40px !important; line-height: 1.28 !important;\n}\n\n#trainer-container .input-wrapper { position: relative !important; width: var(--input-width) !important; margin: 0 auto !important; }\n@keyframes input-mic-blink-intense {\n  0% { background-color: #ffffff; border-color: var(--field-line); }\n  50% { background-color: var(--tip); border-color: var(--tip-border); box-shadow: 0 0 12px rgba(233,196,106,0.5); }\n  100% { background-color: #ffffff; border-color: var(--field-line); }\n}\n@keyframes mic-icon-blink-intense {\n  0% { transform: scale(1); color: var(--muted); }\n  50% { transform: scale(1.2); color: var(--missing-ink); }\n  100% { transform: scale(1); color: var(--muted); }\n}\n#trainer-container textarea.recording-active { animation: input-mic-blink-intense 0.7s infinite ease-in-out !important; border-color: var(--tip-border) !important; }\n#trainer-container .mic-in-input.recording-active { animation: mic-icon-blink-intense 0.7s infinite ease-in-out !important; }\n\n#trainer-container textarea {\n  display: block !important; width: 100% !important; min-height: 54px !important; height: 54px;\n  font-size: var(--input-size) !important; padding: 14px 52px 14px 16px !important; border-radius: 14px !important;\n  border: 2px solid var(--field-line) !important; resize: none !important; text-align: center !important;\n  font-family: inherit !important; color: var(--ink) !important; background: #FFFFFF !important;\n  overflow-y: hidden !important; line-height: 1.4 !important; transition: border-color 0.2s, box-shadow 0.2s, background 0.2s !important;\n}\n#trainer-container textarea::placeholder { color: #8E979A !important; }\n#trainer-container textarea:focus { outline: none !important; border-color: var(--teal) !important; background: #FFFFFF !important; box-shadow: 0 0 0 4px var(--teal-ring) !important; }\n#trainer-container textarea:disabled { opacity: 0.55 !important; }\n#trainer-container .mic-in-input {\n  all: unset !important; box-sizing: border-box !important; cursor: pointer !important; position: absolute !important; right: 5px !important; top: 5px !important;\n  width: 44px !important; height: 44px !important; border-radius: 10px !important; color: var(--muted) !important;\n  display: flex !important; align-items: center !important; justify-content: center !important; transition: color 0.15s, background 0.15s !important;\n}\n#trainer-container .mic-in-input:hover { color: var(--teal) !important; background: var(--teal-soft) !important; }\n\n\/* ---- Feedback ---- *\/\n#trainer-container .feedback-wrapper { display: block !important; margin-top: 12px !important; position: relative !important; }\n#trainer-container .feedback {\n  display: block !important; font-family: var(--font-serif) !important; font-size: var(--feedback-size) !important;\n  line-height: 1.75em !important; word-spacing: normal !important; user-select: text !important; cursor: text !important;\n}\n#trainer-container .solution-text {\n  display: block !important; font-family: var(--font-serif) !important; font-style: italic !important;\n  font-size: var(--alt-size) !important; color: var(--muted) !important; font-weight: 500 !important;\n  margin-top: 12px !important; padding-top: 12px !important; border-top: 1px dashed var(--field-line) !important; line-height: 1.45em !important;\n}\n#trainer-container .correct, #trainer-container .tip, #trainer-container .missing {\n  font-weight: 600 !important; padding: 2px 8px !important; margin: 0 1px !important; border-radius: 8px !important;\n}\n#trainer-container .correct { color: var(--correct-ink) !important; background: var(--correct) !important; }\n#trainer-container .tip { color: var(--tip-ink) !important; background: var(--tip) !important; }\n#trainer-container .missing { color: var(--missing-ink) !important; background: var(--missing) !important; }\n\n\/* ---- Bedienleiste: Save, Hint, Check, Back, Next ---- *\/\n#trainer-container .sentence-controls { display: flex !important; justify-content: center !important; align-items: flex-start !important; gap: 14px !important; margin-top: 26px !important; }\n#trainer-container .control-item { display: flex !important; flex-direction: column !important; align-items: center !important; gap: 8px !important; }\n#trainer-container .btn-icon {\n  all: unset !important; box-sizing: border-box !important; cursor: pointer !important; position: relative !important;\n  display: inline-flex !important; justify-content: center !important; align-items: center !important;\n  width: 54px !important; height: 54px !important; border-radius: 16px !important;\n  background: var(--soft) !important; color: var(--ink) !important;\n  transition: transform 0.12s ease, background 0.15s ease, box-shadow 0.15s ease !important;\n}\n#trainer-container .btn-icon:hover { background: var(--soft-hover) !important; transform: translateY(-1px) !important; }\n#trainer-container .btn-icon:active { transform: translateY(0) scale(0.97) !important; }\n#trainer-container .ctrl-check .btn-icon {\n  width: 66px !important; height: 66px !important; margin-top: -6px !important; border-radius: 20px !important;\n  background: var(--teal) !important; color: #FFFFFF !important; box-shadow: 0 8px 20px rgba(20,112,140,0.25) !important;\n}\n#trainer-container .ctrl-check .btn-icon:hover { background: var(--teal-dark) !important; }\n#trainer-container .ctrl-check .btn-label { color: var(--teal) !important; font-weight: 800 !important; }\n#trainer-container .btn-icon.saved { background: var(--teal-soft) !important; color: var(--teal) !important; }\n#trainer-container .btn-icon.saved svg { fill: currentColor !important; }\n#trainer-container .btn-icon.is-disabled { opacity: 0.35 !important; pointer-events: none !important; transform: none !important; }\n#trainer-container .btn-icon.is-locked,\n#trainer-container .listen-btn.is-locked { opacity: 0.4 !important; cursor: not-allowed !important; transform: none !important; }\n#trainer-container .ctrl-check .btn-icon.is-locked { box-shadow: none !important; }\n#trainer-container .btn-label { font-size: 12px !important; font-weight: 600 !important; color: var(--muted) !important; }\n\n\/* ---- Tooltips ---- *\/\n#trainer-container .tt-bubble {\n  position: absolute !important; z-index: 30 !important;\n  background: var(--ink) !important; color: #FFFFFF !important; font-size: 11.5px !important; font-weight: 600 !important;\n  padding: 6px 10px !important; border-radius: 8px !important; line-height: 1.35 !important;\n  text-align: center !important; white-space: normal !important;\n  width: max-content !important; max-width: calc(100% - 16px) !important;\n  pointer-events: none !important; box-shadow: 0 6px 16px rgba(0,0,0,0.22) !important;\n  animation: ttBubbleIn 0.12s ease both !important;\n}\n@keyframes ttBubbleIn { from { opacity: 0; transform: translateY(3px); } to { opacity: 1; transform: translateY(0); } }\n#trainer-container .tt-bubble::after {\n  content: \"\" !important; position: absolute !important; left: var(--tt-arrow-left, 50%) !important;\n  transform: translateX(-50%) !important; width: 0 !important; height: 0 !important;\n  border-left: 5px solid transparent !important; border-right: 5px solid transparent !important;\n}\n#trainer-container .tt-bubble.tt-arrow-bottom::after { bottom: -5px !important; border-top: 5px solid var(--ink) !important; }\n#trainer-container .tt-bubble.tt-arrow-top::after { top: -5px !important; border-bottom: 5px solid var(--ink) !important; }\n\n\/* ---- \u201eGespeichert\u201c-Hinweis ---- *\/\n#trainer-container .save-toast {\n  position: absolute !important; inset: 0 !important;\n  display: flex !important; align-items: center !important; justify-content: center !important;\n  background: rgba(14,26,32,0.82) !important; color: #FFFFFF !important; font-size: 18px !important; font-weight: 700 !important;\n  text-align: center !important; padding: 20px !important;\n  opacity: 0 !important; pointer-events: none !important; z-index: 25 !important;\n}\n#trainer-container .save-toast.show { opacity: 1 !important; transition: opacity 0.15s ease !important; }\n#trainer-container .save-toast.hide { opacity: 0 !important; transition: opacity 2.2s ease !important; }\n\n\/* ---- Tageslimit-Hinweis ---- *\/\n#trainer-container .daily-limit-notice {\n  margin: 16px auto 0 auto !important; padding: 12px 16px !important; border-radius: 14px !important;\n  background: var(--tip) !important; border: 1px solid var(--tip-border) !important; color: var(--tip-ink) !important;\n  font-size: 13px !important; line-height: 1.5 !important; text-align: center !important;\n}\n\n\/* ---- Puzzle-Modus (W\u00f6rter aufdecken) ---- *\/\n#trainer-container .reveal-wrapper, #trainer-container .reveal-alt-holder { display: none; }\n#trainer-container .reveal-wrapper { flex-wrap: wrap !important; justify-content: center !important; gap: 8px !important; }\n#trainer-container .reveal-word {\n  display: inline-block !important; padding: 9px 15px !important; border-radius: 12px !important; background: var(--soft) !important;\n  color: var(--ink) !important; font-family: var(--font-serif) !important; filter: blur(5.5px) !important; -webkit-filter: blur(5.5px) !important;\n  user-select: none !important; -webkit-user-select: none !important; -webkit-touch-callout: none !important; touch-action: pan-y !important;\n  cursor: pointer !important; font-size: 20px !important; font-weight: 600 !important; border: 1.5px solid var(--field-line) !important;\n  transition: background 0.25s, filter 0.15s, transform 0.1s, border-color 0.25s !important;\n}\n#trainer-container .reveal-word.dragging { transform: scale(1.07) !important; }\n#trainer-container .reveal-word.revealed { filter: none !important; -webkit-filter: none !important; cursor: default !important; }\n#trainer-container .reveal-word.revealed.correct-word { background: var(--correct) !important; color: var(--correct-ink) !important; border-color: var(--correct-border) !important; }\n#trainer-container .reveal-word.revealed.wrong-word { background: var(--missing) !important; color: var(--missing-ink) !important; border-color: var(--missing-border) !important; }\n\n@media (max-width: 800px) {\n  #trainer-container .tr-head { padding: 18px 16px 16px 16px !important; gap: 14px !important; }\n  #trainer-container .tr-level-code { font-size: 44px !important; }\n  #trainer-container .tr-level-name { font-size: 12px !important; }\n  #trainer-container .tr-head-actions { gap: 6px !important; }\n  #trainer-container .filter-toggle-btn { padding-left: 16px !important; font-size: 14px !important; }\n  #trainer-container .sentence-block { padding: 44px 16px 22px 16px !important; }\n  #trainer-container textarea { font-size: 16px !important; }\n  #trainer-container .source { font-size: 22px !important; padding: 0 34px !important; }\n  #trainer-container .feedback { font-size: 17px !important; }\n  #trainer-container .solution-text { font-size: 14px !important; }\n  #trainer-container .reveal-word { font-size: 18px !important; padding: 8px 12px !important; }\n  #trainer-container .input-wrapper { display: none !important; }\n  #trainer-container .reveal-wrapper { display: flex !important; width: var(--input-width) !important; margin: 0 auto !important; }\n  #trainer-container .reveal-alt-holder { display: block !important; }\n  #trainer-container .sentence-controls { gap: 8px !important; }\n  #trainer-container .btn-icon { width: 48px !important; height: 48px !important; border-radius: 14px !important; }\n  #trainer-container .ctrl-check .btn-icon { width: 58px !important; height: 58px !important; margin-top: -5px !important; border-radius: 18px !important; }\n\n  #trainer-container.full-input-mode .input-wrapper { display: block !important; }\n  #trainer-container.full-input-mode .reveal-wrapper { display: none !important; }\n  #trainer-container.full-input-mode .reveal-alt-holder { display: none !important; }\n}\n@media (max-width: 380px) {\n  #trainer-container .tr-level-name { display: none !important; }\n  #trainer-container .sentence-controls { gap: 5px !important; }\n  #trainer-container .btn-icon { width: 44px !important; height: 44px !important; }\n}\n\n@media (min-width: 801px) {\n  #trainer-container.full-input-mode .input-wrapper { display: none !important; }\n  #trainer-container.full-input-mode .reveal-wrapper {\n    display: flex !important; flex-wrap: wrap !important; justify-content: center !important; gap: 8px !important;\n    width: var(--input-width) !important; margin: 0 auto !important;\n  }\n  #trainer-container.full-input-mode .reveal-alt-holder { display: block !important; }\n}\n\n\/* ---- Vollbild ---- *\/\n#trainer-container.trainer-app:fullscreen,\n#trainer-container.trainer-app:-webkit-full-screen,\n#trainer-container.trainer-app.pseudo-fullscreen {\n  --source-size: 34px; --input-size: 19px; --feedback-size: 24px; --alt-size: 18px;\n  max-width: 100% !important; width: 100% !important; height: 100% !important;\n  margin: 0 !important; background: var(--paper) !important; background-color: var(--paper) !important;\n  display: flex !important; flex-direction: column !important; justify-content: center !important; align-items: center !important;\n  padding: 24px 16px !important; overflow-y: auto !important;\n}\n#trainer-container.trainer-app:fullscreen .tr-card,\n#trainer-container.trainer-app:-webkit-full-screen .tr-card,\n#trainer-container.trainer-app.pseudo-fullscreen .tr-card { width: 100% !important; max-width: 720px !important; }\n#trainer-container.trainer-app.pseudo-fullscreen { position: fixed !important; inset: 0 !important; z-index: 2147483647 !important; }\n\n@media (prefers-reduced-motion: reduce) {\n  #trainer-container.trainer-app *, #trainer-container.trainer-app *::before, #trainer-container.trainer-app *::after {\n    animation-duration: 0.001ms !important; animation-iteration-count: 1 !important; transition-duration: 0.001ms !important;\n  }\n}\n\n\/* ---- Themen-Schublade (Level + Suche + Liste) ---- *\/\n.tm-drawer-root {\n  --ink: #1D2427; --muted: #5E686B; --paper: #FBF8F2; --card: #FFFFFF; --line: #E6DFD1;\n  --accent: #14708C; --accent-rgb: 20, 112, 140; --accent-soft: #E2F0F4; --accent-ink: #14708C;\n  --accent-solid: #14708C; --accent-solid-rgb: 20, 112, 140;\n  display: none !important; position: fixed !important; z-index: 2147483647 !important; inset: 0 !important;\n  background: rgba(20,19,18,0.6) !important; backdrop-filter: blur(5px) !important; -webkit-backdrop-filter: blur(5px) !important;\n  font-family: 'Inter', 'Segoe UI', Roboto, Helvetica, Arial, sans-serif !important;\n}\n.tm-drawer-root.open { display: block !important; }\n.tm-drawer-root .filter-panel {\n  position: fixed !important; top: 0 !important; right: 0 !important; height: 100% !important; width: min(398px, 92vw) !important;\n  z-index: 2147483647 !important;\n  background: var(--paper) !important; box-shadow: -20px 0 40px rgba(28,27,26,0.15) !important; padding: 20px 16px !important;\n  display: flex !important; flex-direction: column !important; box-sizing: border-box !important;\n  animation: panelSlideIn 0.28s cubic-bezier(.2,.8,.2,1) both !important;\n}\n@media (max-width: 800px) {\n  .tm-drawer-root .filter-panel { width: 80vw !important; }\n}\n@keyframes panelSlideIn { from { transform: translateX(100%); } to { transform: translateX(0); } }\n.tm-drawer-root .filter-panel-header { display: flex !important; align-items: center !important; justify-content: space-between !important; margin-bottom: 12px !important; }\n.tm-drawer-root .filter-panel-header h3 { margin: 0 !important; font-size: 15px !important; font-weight: 700 !important; color: var(--ink) !important; }\n.tm-drawer-root .filter-close-btn {\n  all: unset !important; cursor: pointer !important; width: 30px !important; height: 30px !important; border-radius: 50% !important;\n  display: flex !important; align-items: center !important; justify-content: center !important; font-size: 20px !important; color: var(--muted) !important;\n  transition: background 0.15s !important;\n}\n.tm-drawer-root .filter-close-btn:hover { background: var(--line) !important; }\n.tm-drawer-root .level-buttons { display: flex !important; justify-content: center !important; gap: 5px !important; margin-bottom: 12px !important; }\n.tm-drawer-root .level-btn {\n  all: unset !important; box-sizing: border-box !important; flex: 1 !important; padding: 9px 0 !important;\n  border: 1px solid var(--line) !important; background: var(--card) !important; border-radius: 11px !important;\n  cursor: pointer !important; font-weight: 700 !important; font-size: 12px !important; text-align: center !important;\n  font-family: inherit !important; color: var(--ink) !important;\n  transition: flex 0.25s ease, background 0.25s ease, opacity 0.25s ease, color 0.25s ease, border-color 0.25s ease !important;\n}\n.tm-drawer-root .level-btn.active { flex: 2.3 !important; background: var(--accent-solid) !important; color: var(--paper) !important; border-color: var(--accent-solid) !important; box-shadow: 0 4px 10px rgba(var(--accent-solid-rgb), 0.35) !important; z-index: 2 !important; position: relative !important; }\n.tm-drawer-root .level-btn:not(.active) { background: transparent !important; border-color: transparent !important; color: var(--muted) !important; opacity: 0.7 !important; }\n.tm-drawer-root .level-btn:not(.active):hover { opacity: 1 !important; background: var(--card) !important; }\n\n.tm-drawer-root .all-topics-btn {\n  all: unset !important; box-sizing: border-box !important; display: block !important; width: 100% !important;\n  text-align: center !important; cursor: pointer !important; font-family: inherit !important;\n  padding: 13px 0 !important; margin-bottom: 10px !important; border-radius: 13px !important;\n  border: 1.5px solid var(--line) !important; background: var(--card) !important;\n  font-size: 15px !important; font-weight: 700 !important; color: var(--ink) !important;\n  transition: background 0.2s ease, border-color 0.2s ease, color 0.2s ease, box-shadow 0.2s ease, transform 0.12s ease !important;\n}\n.tm-drawer-root .all-topics-btn:hover { border-color: var(--accent) !important; transform: translateY(-1px) !important; }\n.tm-drawer-root .all-topics-btn.active {\n  background: var(--accent-solid) !important; border-color: var(--accent-solid) !important; color: var(--paper) !important;\n  box-shadow: 0 4px 12px rgba(var(--accent-solid-rgb), 0.3) !important;\n}\n\n.tm-drawer-root .search-wrapper { position: relative !important; margin: 0 0 12px 0 !important; }\n.tm-drawer-root .search-icon {\n  position: absolute !important; left: 11px !important; top: 50% !important;\n  width: 13px !important; height: 13px !important; transform: translateY(-52%) !important;\n  pointer-events: none !important;\n}\n.tm-drawer-root .search-icon::before {\n  content: \"\" !important; position: absolute !important; top: 0 !important; left: 0 !important;\n  width: 9px !important; height: 9px !important; border: 1.6px solid var(--muted) !important;\n  border-radius: 50% !important; box-sizing: border-box !important;\n}\n.tm-drawer-root .search-icon::after {\n  content: \"\" !important; position: absolute !important; width: 5px !important; height: 1.6px !important;\n  background: var(--muted) !important; border-radius: 1px !important;\n  left: 7.3px !important; top: 7.8px !important; transform: rotate(45deg) !important; transform-origin: left center !important;\n}\n.tm-drawer-root #topicSearch {\n  width: 100% !important; box-sizing: border-box !important; padding: 9px 10px 9px 30px !important; border-radius: 11px !important;\n  border: 1px solid var(--line) !important; font-family: inherit !important; font-size: 13px !important; color: var(--ink) !important;\n  background: var(--card) !important; transition: border-color 0.2s, box-shadow 0.2s !important;\n}\n.tm-drawer-root #topicSearch::placeholder { color: var(--muted) !important; }\n.tm-drawer-root #topicSearch:focus { outline: none !important; border-color: var(--accent) !important; box-shadow: 0 0 0 3px var(--accent-soft) !important; }\n\n.tm-drawer-root .topic-list { list-style: none !important; padding: 0 !important; margin: 0 !important; flex-grow: 1 !important; overflow-y: auto !important; text-align: left !important; }\n.tm-drawer-root .topic-item {\n  position: relative !important; background: var(--card) !important; border: 1px solid var(--line) !important;\n  border-radius: 13px !important; margin-bottom: 7px !important; overflow: hidden !important;\n  transition: border-color 0.15s ease, background 0.15s ease !important; line-height: 1.3 !important;\n}\n.tm-drawer-root .topic-item:hover { border-color: var(--accent) !important; }\n.tm-drawer-root .topic-item.active {\n  border-color: var(--accent) !important; background: var(--accent-soft) !important;\n}\n.tm-drawer-root .topic-item.locked { opacity: 0.65 !important; }\n.tm-drawer-root .topic-row {\n  position: relative !important; display: flex !important; align-items: flex-start !important; gap: 10px !important;\n  padding: 11px 46px 11px 11px !important; cursor: pointer !important; font-size: 14px !important;\n}\n.tm-drawer-root .topic-item.locked .topic-row { cursor: not-allowed !important; }\n.tm-drawer-root .topic-item.locked:hover { border-color: var(--line) !important; }\n\n.tm-drawer-root .topic-id-big {\n  flex: 0 0 auto !important; display: inline-flex !important; align-items: center !important; justify-content: center !important;\n  font-size: 11.5px !important; font-weight: 800 !important; color: var(--accent-ink) !important;\n  background: var(--accent-soft) !important; padding: 3px 7px !important; border-radius: 7px !important; line-height: 1.3 !important;\n}\n.tm-drawer-root .topic-text-wrapper { flex: 1 1 auto !important; min-width: 0 !important; display: block !important; overflow: hidden !important; }\n.tm-drawer-root .topic-title-text {\n  display: block !important; font-size: 14px !important; font-weight: 700 !important; color: var(--ink) !important;\n  line-height: 1.3 !important; white-space: normal !important; overflow-wrap: break-word !important; word-break: break-word !important;\n}\n.tm-drawer-root .topic-name-row { font-size: 12.5px !important; font-weight: 500 !important; color: var(--muted) !important; margin-top: 3px !important; line-height: 1.35 !important; white-space: normal !important; }\n.tm-drawer-root .topic-level-badge { display: inline-block !important; font-size: 10px !important; font-weight: 700 !important; color: var(--muted) !important; border: 1px solid var(--line) !important; border-radius: 5px !important; padding: 1px 5px !important; margin-left: 6px !important; vertical-align: middle !important; }\n.tm-drawer-root .topic-lock-badge {\n  font-size: 11px !important; font-weight: 700 !important; color: var(--muted) !important; margin-top: 5px !important; display: inline-block !important;\n}\n\n.tm-drawer-root .topic-expand-btn {\n  position: absolute !important; right: 8px !important; top: 50% !important; transform: translateY(-50%) !important; background: transparent !important;\n  border: none !important; cursor: pointer !important; display: flex !important; align-items: center !important;\n  width: 34px !important; height: 34px !important; border-radius: 50% !important; justify-content: center !important; font-size: 17px !important;\n  color: var(--muted) !important; opacity: 0.85 !important;\n  transition: opacity 0.2s, transform 0.2s, background 0.2s, color 0.2s !important;\n}\n.tm-drawer-root .topic-expand-btn:hover { opacity: 1 !important; background: var(--accent-soft) !important; color: var(--accent-ink) !important; }\n.tm-drawer-root .topic-expand-btn.open { transform: translateY(-50%) rotate(180deg) !important; }\n\n.tm-drawer-root .topic-info-panel {\n  max-height: 0 !important; overflow: hidden !important;\n  transition: max-height 0.28s ease, padding 0.28s ease !important;\n  padding: 0 14px !important; font-size: 12.5px !important; line-height: 1.55 !important;\n  color: var(--muted) !important; border-top: 1px solid transparent !important;\n}\n.tm-drawer-root .topic-info-panel.open {\n  max-height: 400px !important; padding: 0 14px 12px 14px !important;\n  border-top-color: var(--line) !important;\n}\n\n#trainer-container .sentence-block.ui-loading { color: var(--muted) !important; font-weight: 600 !important; animation: loadingPulse 1.3s ease-in-out infinite !important; }\n@keyframes loadingPulse { 0%, 100% { opacity: 0.55; } 50% { opacity: 1; } }\n\n@keyframes modalFadeIn { from { opacity: 0; transform: translateY(-20px); } to { opacity: 1; transform: translateY(0); } }\n\n@media (prefers-reduced-motion: reduce) {\n  #trainer-container.trainer-app *, #trainer-container.trainer-app *::before, #trainer-container.trainer-app *::after {\n    animation-duration: 0.001ms !important; animation-iteration-count: 1 !important; transition-duration: 0.001ms !important;\n  }\n}\n\n\/* ============ LAYOUT-UPDATE 28.10.: flacher Kopf in EINER Zeile + gro\u00dfer \u00dcbungsbereich ============\n   Kopf: Level (A1) | Themenbalken (Thema in Fraunces, ohne \"Topic:\") | 3 Buttons.\n   Unten: breiterer Trainer, gr\u00f6\u00dferer Satz, gro\u00dfes Eingabefeld mit Petrol-Rahmen als Mittelpunkt. *\/\n#trainer-container.trainer-app {\n  max-width: 780px !important;\n  --source-size: 32px; --input-size: 21px; --feedback-size: 23px; --alt-size: 17px;\n}\n#trainer-container .tr-head {\n  flex-direction: row !important; align-items: center !important; gap: 14px !important;\n  padding: 12px 14px 12px 22px !important;\n}\n#trainer-container .tr-head-top { display: contents !important; }\n#trainer-container .tr-level { order: 1 !important; flex: 0 0 auto !important; align-items: center !important; }\n#trainer-container .tr-level-code { font-size: 34px !important; line-height: 1 !important; letter-spacing: -1px !important; }\n#trainer-container .top-bar { order: 2 !important; flex: 1 1 auto !important; min-width: 0 !important; }\n#trainer-container .tr-head-actions { order: 3 !important; flex: 0 0 auto !important; align-items: center !important; }\n#trainer-container .tr-icon-btn { width: 40px !important; height: 40px !important; }\n#trainer-container .tr-icon-btn.tr-lang { width: auto !important; }\n#trainer-container .filter-toggle-btn {\n  min-height: 44px !important; padding: 4px 6px 4px 18px !important;\n  font-family: var(--font-serif) !important; font-size: 20px !important; font-weight: 600 !important; letter-spacing: -0.2px !important;\n}\n#trainer-container .fc-eyebrow { display: none !important; }\n#trainer-container .fc-topic-name { font-family: var(--font-serif) !important; font-weight: 600 !important; }\n#trainer-container .fc-caret { font-family: 'Inter', 'Segoe UI', Roboto, Helvetica, Arial, sans-serif !important; min-height: 32px !important; letter-spacing: 0 !important; }\n\n#trainer-container .sentence-block { padding: 58px 40px 34px 40px !important; }\n#trainer-container .source { margin: 0 0 28px 0 !important; }\n#trainer-container textarea {\n  min-height: 64px !important; padding: 15px 60px 15px 22px !important;\n  border: 2.5px solid var(--teal) !important; border-radius: 18px !important;\n  box-shadow: 0 0 0 5px var(--teal-ring), 0 12px 28px rgba(20,112,140,0.10) !important;\n  font-weight: 500 !important; line-height: 1.45 !important;\n}\n#trainer-container textarea:focus {\n  border-color: var(--teal-dark) !important;\n  box-shadow: 0 0 0 7px var(--teal-ring), 0 14px 32px rgba(20,112,140,0.16) !important;\n}\n#trainer-container textarea::placeholder { color: #7FA3AE !important; }\n#trainer-container .mic-in-input { top: 10px !important; right: 10px !important; }\n#trainer-container .reveal-word { font-size: 22px !important; padding: 10px 16px !important; }\n\n#trainer-container.trainer-app:fullscreen .tr-card,\n#trainer-container.trainer-app:-webkit-full-screen .tr-card,\n#trainer-container.trainer-app.pseudo-fullscreen .tr-card { max-width: 880px !important; }\n\n@media (max-width: 800px) {\n  #trainer-container .tr-head { padding: 10px 10px 10px 16px !important; gap: 10px !important; }\n  #trainer-container .tr-level-code { font-size: 28px !important; }\n  #trainer-container .filter-toggle-btn { min-height: 40px !important; padding: 4px 5px 4px 14px !important; font-size: 16px !important; }\n  #trainer-container .fc-caret-label { display: none !important; }\n  #trainer-container .fc-caret { padding: 0 9px !important; min-height: 30px !important; }\n  #trainer-container .tr-head-actions { gap: 5px !important; }\n  #trainer-container .tr-icon-btn { width: 36px !important; height: 36px !important; }\n  #trainer-container .tr-icon-btn.tr-lang { padding: 0 10px !important; }\n  #trainer-container .sentence-block { padding: 52px 16px 24px 16px !important; }\n  #trainer-container .source { font-size: 24px !important; padding: 0 30px !important; }\n  #trainer-container textarea { font-size: 18px !important; min-height: 56px !important; padding: 13px 52px 13px 16px !important; }\n  #trainer-container .reveal-word { font-size: 20px !important; padding: 9px 13px !important; }\n}\n@media (max-width: 420px) {\n  #trainer-container .fc-caret { display: none !important; }\n  #trainer-container .filter-toggle-btn { padding-right: 14px !important; }\n}\n\/* Level (A1) sitzt jetzt IM Themenbalken, gleiche Schrift wie das Thema *\/\n#trainer-container .tr-level { display: none !important; }\n#trainer-container .filter-toggle-btn .fc-level {\n  display: inline-block !important; font-family: var(--font-serif) !important; font-size: inherit !important;\n  font-weight: 600 !important; line-height: inherit !important; letter-spacing: inherit !important; color: #FFFFFF !important;\n  padding-right: 11px !important; margin-right: 11px !important; border-right: 1.5px solid rgba(255,255,255,0.45) !important;\n}\n#trainer-container .filter-toggle-btn { font-size: 21px !important; }\n@media (max-width: 800px) {\n  #trainer-container .filter-toggle-btn { font-size: 17px !important; }\n  #trainer-container .filter-toggle-btn .fc-level { padding-right: 9px !important; margin-right: 9px !important; }\n}\n\/* Kopf etwas h\u00f6her + mehr Luft; Sprachknopf im selben Design wie die anderen Kopf-Buttons *\/\n#trainer-container .tr-head { padding: 20px 22px 20px 22px !important; gap: 18px !important; }\n#trainer-container .tr-head-actions { gap: 10px !important; }\n#trainer-container .tr-icon-btn { width: 46px !important; height: 46px !important; }\n#trainer-container .filter-toggle-btn { min-height: 52px !important; padding: 6px 8px 6px 22px !important; }\n#trainer-container .tr-icon-btn.tr-lang {\n  width: 46px !important; padding: 0 !important; border-radius: 50% !important;\n  background: rgba(255,255,255,0.14) !important; box-shadow: none !important;\n  font-size: 13px !important; font-weight: 700 !important; letter-spacing: 0.3px !important;\n}\n#trainer-container .tr-icon-btn.tr-lang:hover { background: rgba(255,255,255,0.26) !important; box-shadow: none !important; }\n@media (max-width: 800px) {\n  #trainer-container .tr-head { padding: 14px 12px 14px 14px !important; gap: 10px !important; }\n  #trainer-container .tr-head-actions { gap: 6px !important; }\n  #trainer-container .tr-icon-btn, #trainer-container .tr-icon-btn.tr-lang { width: 40px !important; height: 40px !important; }\n  #trainer-container .filter-toggle-btn { min-height: 46px !important; padding: 5px 6px 5px 16px !important; }\n}\n@media (max-width: 420px) {\n  #trainer-container .tr-head { gap: 8px !important; padding: 12px 10px 12px 12px !important; }\n  #trainer-container .tr-head-actions { gap: 5px !important; }\n  #trainer-container .tr-icon-btn, #trainer-container .tr-icon-btn.tr-lang { width: 36px !important; height: 36px !important; }\n  #trainer-container .filter-toggle-btn { padding-right: 14px !important; }\n}\n\/* Puzzle-Modus: nur der TEXT ist verschwommen, der Rahmen um jedes Wort bleibt scharf *\/\n#trainer-container .reveal-word {\n  filter: none !important; -webkit-filter: none !important;\n  color: transparent !important; text-shadow: 0 0 9px rgba(29,36,39,0.75) !important;\n  background: #FFFFFF !important; border: 2px solid #B9C7CC !important;\n  box-shadow: 0 2px 6px rgba(29,36,39,0.06) !important;\n}\n#trainer-container .reveal-word.revealed { text-shadow: none !important; color: var(--ink) !important; }\n#trainer-container .reveal-word.revealed.correct-word { color: var(--correct-ink) !important; border-color: var(--correct-border) !important; background: var(--correct) !important; }\n#trainer-container .reveal-word.revealed.wrong-word { color: var(--missing-ink) !important; border-color: var(--missing-border) !important; background: var(--missing) !important; }\n\n\/* Alternativsatz gr\u00f6\u00dfer *\/\n#trainer-container .solution-text { font-size: 20px !important; }\n@media (max-width: 800px) {\n  #trainer-container .solution-text { font-size: 18px !important; }\n}\n<\/style>\n\n<!-- Themen-Schublade -->\n<div id=\"filter-overlay\" class=\"filter-overlay tm-drawer-root\">\n  <div class=\"filter-panel\">\n    <div class=\"filter-panel-header\">\n      <h3 class=\"ui-topic-title\">Grammar Topic<\/h3>\n      <button id=\"filter-close\" class=\"filter-close-btn\">&times;<\/button>\n    <\/div>\n    <div class=\"level-buttons\" id=\"levelBtnGroup\">\n      <button class=\"level-btn\" data-level=\"A1\">A1<\/button>\n      <button class=\"level-btn\" data-level=\"A2\">A2<\/button>\n      <button class=\"level-btn\" data-level=\"B1\">B1<\/button>\n      <button class=\"level-btn\" data-level=\"B2\">B2<\/button>\n    <\/div>\n    <div class=\"search-wrapper\"><span class=\"search-icon\" aria-hidden=\"true\"><\/span><input type=\"text\" id=\"topicSearch\" placeholder=\"Search...\"><\/div>\n    <button id=\"allTopicsBtn\" class=\"all-topics-btn\">All topics<\/button>\n    <ul class=\"topic-list\" id=\"topicList\"><\/ul>\n  <\/div>\n<\/div>\n\n<!-- SHOW_TOPIC_BAR-Vorbereitung: window.__trainerShowTopicBar bestimmt, ob die\n     obere Auswahl-Leiste sichtbar ist. true = Leiste ausblenden (fest auf\n     MANUAL_LEVEL\/MANUAL_TOPIC_ID), false\/nicht gesetzt = Leiste anzeigen.\n     FIX: setProperty(...,'important') statt .style.display=, da die CSS-Regel\n     #trainer-container .top-bar { display: flex !important; ... } ein normales\n     Inline-display sonst \u00fcberstimmen w\u00fcrde. -->\n<script>window.__trainerShowTopicBar = true;<\/script>\n<div class=\"tr-card\">\n  <div class=\"tr-head\">\n    <div class=\"tr-head-top\">\n      <div class=\"tr-level\">\n        \n        <span class=\"tr-level-name\" id=\"fcLevelName\"><\/span>\n      <\/div>\n      <div class=\"tr-head-actions\">\n        <button type=\"button\" class=\"tr-icon-btn tr-lang lang-indicator\" aria-label=\"Change Language\">EN<\/button>\n        <button type=\"button\" id=\"mobileFullToggle\" class=\"tr-icon-btn mobile-full-toggle\"><span class=\"mft-icon\"><\/span><span class=\"mft-label tr-sr\"><\/span><\/button>\n        <button type=\"button\" class=\"tr-icon-btn fullscreen-toggle-btn\" aria-label=\"Fullscreen\"><\/button>\n      <\/div>\n    <\/div>\n    <div class=\"top-bar\" id=\"topBar\">\n      <button id=\"filterToggleBtn\" class=\"filter-toggle-btn\" type=\"button\">\n        <span class=\"fc-text\"><span class=\"tr-level-code fc-level\" id=\"fcLevelBadge\">...<\/span><span class=\"fc-eyebrow\" id=\"fcEyebrow\">Topic:<\/span> <span class=\"fc-topic-name\" id=\"fcTopicName\">...<\/span><\/span>\n        <span class=\"fc-caret\"><span class=\"fc-caret-label\">Change<\/span><svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m9 6 6 6-6 6\"\/><\/svg><\/span>\n      <\/button>\n    <\/div>\n    <div class=\"daily-goal\">\n      <span class=\"dg-label\">Daily goal<\/span>\n      <span class=\"dg-track\"><span class=\"dg-fill\" style=\"display:block\"><\/span><\/span>\n      <span class=\"dg-count\">0 \/ 10<\/span>\n    <\/div>\n  <\/div>\n  <div id=\"sentenceArea\">\n    <div class=\"sentence-block ui-loading\">Loading...<\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function(container){\n    const MANUAL_LEVEL = window.__spxLevel || \"A1\";\n    const MANUAL_TOPIC_ID = \"\";\n    const MANUAL_TOPIC_AREA = \"Grammar\";\n    const SESSION_SIZE = 8;\n    const SHOW_TOPIC_BAR = window.__spxGrammar ? (window.__trainerShowTopicBar !== false) : (window.__trainerShowTopicBar !== true);\n\n    const DAILY_LIMIT_GUEST  = 10;   \/\/ nicht angemeldete Besucher (G\u00e4ste)\n    const DAILY_LIMIT_MEMBER = 20;  \/\/ angemeldet, aber nicht zahlend (Level 1)\n    const DAILY_LIMIT_PAYER  = 0;   \/\/ zahlende Mitglieder (Level 2\/3) \u2013 0 = unbegrenzt\n\n    const UI_LANGUAGES = {\n        en: {\n            topicTitle: \"Grammar Topic\", loading: \"Loading data...\", placeholder: \"translation...\",\n            saveHint: \"Save Sentence\", langHint: \"Change Language\", micHint: \"Speech to Text\",\n            btnHint: \"Hint\", btnListen: \"Listen\", btnCheck: \"Check\", btnPrev: \"Back\", btnNew: \"Next\",\n            altLabel: \"Alternative: \", noData: \"No sentences for this selection yet.\", allTopics: \"All topics mixed\",\n            searchPlaceholder: \"Search topics...\", topicEyebrow: \"Topic:\", topicChange: \"Change\", everydayTopic: \"Mixed Translations\", btnSave: \"Save\", levelPrefix: \"German\",\n            fullModeOn: \"Type your answer\", fullModeOff: \"Switch to puzzle mode\",\n            fullscreenHint: \"Fullscreen\", exitFullscreenHint: \"Exit fullscreen\",\n            savedToast: \"Sentence Saved\", dailyGoalLabel: \"Daily goal\",\n            lockedLogin: \"Log in to unlock this topic.\", lockedPaid: \"This topic is for paying members only.\",\n            lockedLoginList: \"Members only\", lockedPaidList: \"Paying members only\",\n            listenLockedHint: \"Log in to listen\", saveLockedHint: \"Log in to save sentences\",\n            saveUpgradeHint: \"Upgrade membership to save sentence\",\n            dailyGoalAdjustHint: \"Adjust Daily Goal in your Profile\",\n            dailyLimitReachedGuest: \"Daily limit reached. Log in for free to continue.\",\n            dailyLimitReachedMember: \"Daily limit reached. Upgrade your membership to continue.\",\n            dailyLimitReachedTitle: \"Daily limit reached\"\n        },\n        es: {\n            topicTitle: \"Tema de gram\u00e1tica\", loading: \"Cargando datos...\", placeholder: \"traducci\u00f3n...\",\n            saveHint: \"Guardar frase\", langHint: \"Cambiar idioma\", micHint: \"Reconocimiento de voz\",\n            btnHint: \"Pista\", btnListen: \"Escucha\", btnCheck: \"Valida\", btnPrev: \"Atr\u00e1s\", btnNew: \"Siguiente\",\n            altLabel: \"Alternativa: \", noData: \"A\u00fan no hay frases para esta selecci\u00f3n.\", allTopics: \"Todos los temas mezclados\",\n            searchPlaceholder: \"Buscar temas...\", topicEyebrow: \"Tema:\", topicChange: \"Cambiar\", everydayTopic: \"Traducciones mixtas\", btnSave: \"Guardar\", levelPrefix: \"Alem\u00e1n\",\n            fullModeOn: \"Escribir la respuesta\", fullModeOff: \"Cambiar a modo puzzle\",\n            fullscreenHint: \"Pantalla completa\", exitFullscreenHint: \"Salir de pantalla completa\",\n            savedToast: \"Frase guardada\", dailyGoalLabel: \"Objetivo diario\",\n            lockedLogin: \"Inicia sesi\u00f3n para desbloquear este tema.\", lockedPaid: \"Este tema es solo para miembros de pago.\",\n            lockedLoginList: \"Solo miembros\", lockedPaidList: \"Solo miembros de pago\",\n            listenLockedHint: \"Inicia sesi\u00f3n para escuchar\", saveLockedHint: \"Inicia sesi\u00f3n para guardar frases\",\n            saveUpgradeHint: \"Mejora tu membres\u00eda para guardar frases\",\n            dailyGoalAdjustHint: \"Ajusta tu objetivo diario en tu perfil\",\n            dailyLimitReachedGuest: \"L\u00edmite diario alcanzado. Inicia sesi\u00f3n gratis para continuar.\",\n            dailyLimitReachedMember: \"L\u00edmite diario alcanzado. Mejora tu membres\u00eda para continuar.\",\n            dailyLimitReachedTitle: \"L\u00edmite diario alcanzado\"\n        }\n    };\n    \/\/ Das Label vor dem Alternativsatz bleibt immer auf Deutsch, da der\n    \/\/ dahinterstehende Alternativsatz selbst Deutsch ist (unabh\u00e4ngig von der\n    \/\/ gew\u00e4hlten Oberfl\u00e4chensprache en\/es).\n    const ALT_LABEL = \"Alternative: \";\n    const LEVEL_NAMES = {\n        en: { A1: \"Beginner\", A2: \"Elementary\", B1: \"Intermediate\", B2: \"Upper intermediate\" },\n        es: { A1: \"Principiante\", A2: \"Elemental\", B1: \"Intermedio\", B2: \"Intermedio alto\" }\n    };\n    \/\/ Strich-Icons (statt Emojis), passend zum Website-Design\n    const svgIcon = (inner, size, sw) => `<svg width=\"${size || 20}\" height=\"${size || 20}\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"${sw || 2.2}\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">${inner}<\/svg>`;\n    const ICONS = {\n        star: svgIcon('<path d=\"m12 3 2.8 5.7 6.2.9-4.5 4.4 1 6.2L12 17.3 6.5 20.2l1-6.2L3 9.6l6.2-.9z\"\/>', 20, 2),\n        hint: svgIcon('<path d=\"M9 18h6M10 21h4M12 3a6 6 0 0 0-3.5 10.9c.6.5 1 1.2 1 2.1h5c0-.9.4-1.6 1-2.1A6 6 0 0 0 12 3z\"\/>'),\n        listen: svgIcon('<path d=\"M4 9v6h4l5 4V5L8 9zM16.5 8.5a5 5 0 0 1 0 7\"\/>', 19),\n        check: svgIcon('<path d=\"m5 12 5 5 9-10\"\/>', 26, 2.8),\n        back: svgIcon('<path d=\"M19 12H5M11 6l-6 6 6 6\"\/>', 20, 2.4),\n        next: svgIcon('<path d=\"M5 12h14M13 6l6 6-6 6\"\/>', 20, 2.4),\n        mic: svgIcon('<rect x=\"9\" y=\"3\" width=\"6\" height=\"11\" rx=\"3\"\/><path d=\"M5 11a7 7 0 0 0 14 0M12 18v3\"\/>', 19, 2),\n        expand: svgIcon('<path d=\"M4 9V4h5M15 4h5v5M20 15v5h-5M9 20H4v-5\"\/>', 17),\n        close: svgIcon('<path d=\"M6 6l12 12M18 6 6 18\"\/>', 18, 2.4),\n        keyboard: svgIcon('<rect x=\"2.5\" y=\"6\" width=\"19\" height=\"12\" rx=\"2.5\"\/><path d=\"M6.5 10h1M10.5 10h1M14.5 10h1M8 14h8\"\/>', 19, 2),\n        puzzle: svgIcon('<rect x=\"3\" y=\"3\" width=\"7\" height=\"7\" rx=\"1.5\"\/><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\" rx=\"1.5\"\/><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\" rx=\"1.5\"\/><rect x=\"14\" y=\"14\" width=\"7\" height=\"7\" rx=\"1.5\"\/>', 18, 2),\n        lock: svgIcon('<rect x=\"5\" y=\"11\" width=\"14\" height=\"10\" rx=\"2\"\/><path d=\"M8 11V7a4 4 0 0 1 8 0v4\"\/>', 15, 2.4)\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\n    const URL_GOAL = `https:\/\/docs.google.com\/spreadsheets\/d\/${SHEET_ID}\/export?format=csv&gid=588315623`;\n    const DEFAULT_DAILY_TARGET = 10;\n\n    let allData = [];\n    let state_topics = [];\n    let currentLevel = MANUAL_LEVEL;\n    let currentTopicId = MANUAL_TOPIC_ID;\n    let currentLang = detectSiteLanguage();\n    let session = [];\n    let sessionIndex = 0;\n\n    let dgBaseCounts = {};\n    let dgTarget = null;\n    let dgLiveModifier = 0;\n\n    function detectSiteLanguage() {\n        const supported = Object.keys(UI_LANGUAGES);\n        const candidates = [\n            document.documentElement.lang,\n            navigator.language,\n            (navigator.languages && navigator.languages[0])\n        ].filter(Boolean).map(v => v.toLowerCase().split('-')[0]);\n        for (const c of candidates) { if (supported.includes(c)) return c; }\n        return \"en\";\n    }\n\n    \/\/ ============ GAST-ID ============\n    \/\/ Jeder nicht angemeldete Besucher bekommt eine zuf\u00e4llige, aber dauerhafte\n    \/\/ ID (localStorage), damit wiederkehrende G\u00e4ste im Log erkennbar sind und\n    \/\/ das Tageslimit personenbezogen (statt nur pro Browser-Sitzung) gilt.\n    \/\/ Der Name bleibt bewusst immer \"Gast\" \u2014 nur die ID ist individuell.\n    function generateGuestId() {\n        if (window.crypto && typeof window.crypto.randomUUID === 'function') {\n            return 'guest-' + window.crypto.randomUUID();\n        }\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) {\n                id = generateGuestId();\n                window.localStorage.setItem('trainerGuestId', id);\n            }\n            return id;\n        } catch (e) {\n            \/\/ localStorage nicht verf\u00fcgbar (z.B. privater Modus ohne Speicher) -> pro Ladevorgang neue ID\n            return generateGuestId();\n        }\n    }\n    \/\/ Aktive Nutzer-Info: entweder das echte wpTrainerUserInfo (eingeloggt)\n    \/\/ oder ein Gast-Objekt mit fester, wiederkehrender ID und Name \"Gast\".\n    function getActiveUserInfo() {\n        if (window.wpTrainerUserInfo) return window.wpTrainerUserInfo;\n        return { id: getGuestId(), name: 'Gast', level: 1 };\n    }\n\n    const bookmarksMemory = [];\n    let sessionAnswers = {};\n\n    const filterOverlayEl = container.querySelector('#filter-overlay');\n    const filterPanelEl = filterOverlayEl ? filterOverlayEl.querySelector('.filter-panel') : null;\n    const filterTitleEl = filterPanelEl ? filterPanelEl.querySelector('.ui-topic-title') : null;\n    const filterCloseBtn = filterOverlayEl ? filterOverlayEl.querySelector('#filter-close') : null;\n    const levelBtnGroupEl = filterOverlayEl ? filterOverlayEl.querySelector('#levelBtnGroup') : null;\n    const topicSearchEl = filterOverlayEl ? filterOverlayEl.querySelector('#topicSearch') : null;\n    const allTopicsBtnEl = filterOverlayEl ? filterOverlayEl.querySelector('#allTopicsBtn') : null;\n    const topicListEl = filterOverlayEl ? filterOverlayEl.querySelector('#topicList') : null;\n\n    if (filterOverlayEl && filterOverlayEl.parentNode !== document.body) document.body.appendChild(filterOverlayEl);\n\n    const ua = navigator.userAgent || \"\";\n    const isIOS = \/iPad|iPhone|iPod\/.test(ua) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1);\n    const isSafari = \/^((?!chrome|android|crios|fxios|edgios).)*safari\/i.test(ua);\n\n    const fsApiSupported = !!(document.fullscreenEnabled || document.webkitFullscreenEnabled);\n    function isContainerFullscreen() {\n        return document.fullscreenElement === container || document.webkitFullscreenElement === container || container.classList.contains('pseudo-fullscreen');\n    }\n    function updateFsBtnIcon() {\n        const btn = container.querySelector('.fullscreen-toggle-btn');\n        if (!btn) return;\n        const active = isContainerFullscreen();\n        btn.innerHTML = active ? ICONS.close : ICONS.expand;\n        btn.setAttribute('aria-label', active ? (UI_LANGUAGES[currentLang].exitFullscreenHint || 'Exit fullscreen') : (UI_LANGUAGES[currentLang].fullscreenHint || 'Fullscreen'));\n        btn.dataset.tooltip = active\n            ? (UI_LANGUAGES[currentLang].exitFullscreenHint || 'Exit fullscreen')\n            : (UI_LANGUAGES[currentLang].fullscreenHint || 'Fullscreen');\n    }\n    document.addEventListener('fullscreenchange', updateFsBtnIcon);\n    document.addEventListener('webkitfullscreenchange', updateFsBtnIcon);\n\n    const originalParent = container.parentNode;\n    const originalNextSibling = container.nextSibling;\n    function activatePseudoFullscreen() {\n        document.body.appendChild(container);\n        container.classList.add('pseudo-fullscreen');\n        document.body.style.overflow = 'hidden';\n        updateFsBtnIcon();\n    }\n    function deactivatePseudoFullscreen() {\n        if (originalNextSibling && originalNextSibling.parentNode === originalParent) {\n            originalParent.insertBefore(container, originalNextSibling);\n        } else if (originalParent) {\n            originalParent.appendChild(container);\n        }\n        container.classList.remove('pseudo-fullscreen');\n        document.body.style.overflow = '';\n        updateFsBtnIcon();\n    }\n    document.addEventListener('keydown', (e) => {\n        if (e.key === 'Escape' && container.classList.contains('pseudo-fullscreen')) deactivatePseudoFullscreen();\n    });\n\n    const initialBtn = levelBtnGroupEl ? levelBtnGroupEl.querySelector(`.level-btn[data-level=\"${MANUAL_LEVEL}\"]`) : null;\n    if (initialBtn) initialBtn.classList.add('active');\n\n    function getLevenshteinDist(a, b) {\n        const matrix = [];\n        for (let i = 0; i <= b.length; i++) matrix[i] = [i];\n        for (let j = 0; j <= a.length; j++) matrix[0][j] = j;\n        for (let i = 1; i <= b.length; i++) {\n            for (let j = 1; j <= a.length; j++) {\n                if (b.charAt(i - 1) === a.charAt(j - 1)) matrix[i][j] = matrix[i - 1][j - 1];\n                else matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, Math.min(matrix[i][j - 1] + 1, matrix[i - 1][j] + 1));\n            }\n        }\n        return matrix[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\n    function wordsEqualFuzzy(a, b) {\n        if (!a || !b) return false;\n        if (a === b) return true;\n        const maxLen = Math.max(a.length, b.length);\n        const threshold = maxLen <= 4 ? 1 : (maxLen <= 8 ? 2 : 3);\n        return getLevenshteinDist(a, b) <= threshold;\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 isMatch = Array.from({length: n + 1}, () => new Array(m + 1).fill(false));\n        for (let i = 1; i <= n; i++) {\n            for (let j = 1; j <= m; j++) {\n                if (wordsEqualFuzzy(target[i - 1], user[j - 1])) { dp[i][j] = dp[i - 1][j - 1] + 1; isMatch[i][j] = true; }\n                else { dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]); }\n            }\n        }\n        let i = n, j = m;\n        const alignment = new Array(n).fill(null);\n        while (i > 0 && j > 0) {\n            if (isMatch[i][j] && dp[i][j] === dp[i - 1][j - 1] + 1) { alignment[i - 1] = j - 1; i--; j--; }\n            else if (dp[i - 1][j] >= dp[i][j - 1]) { i--; } else { j--; }\n        }\n        return alignment;\n    }\n\n    let cachedVoices = [];\n    let voicesReady = false;\n    let speechWarmedUp = false;\n    function loadVoices() {\n        return new Promise((resolve) => {\n            let voices = window.speechSynthesis ? speechSynthesis.getVoices() : [];\n            if (voices.length) { cachedVoices = voices; voicesReady = true; resolve(voices); return; }\n            const handler = () => {\n                voices = speechSynthesis.getVoices();\n                if (voices.length) { cachedVoices = voices; voicesReady = true; speechSynthesis.removeEventListener('voiceschanged', handler); resolve(voices); }\n            };\n            if (window.speechSynthesis) speechSynthesis.addEventListener('voiceschanged', handler);\n            setTimeout(() => { resolve(window.speechSynthesis ? speechSynthesis.getVoices() : []); }, 1200);\n        });\n    }\n    if (window.speechSynthesis) loadVoices();\n\n    function warmUpSpeechOniOS() {\n        if (speechWarmedUp || !isIOS || !('speechSynthesis' in window)) return;\n        speechWarmedUp = true;\n        try {\n            const warmup = new SpeechSynthesisUtterance(' ');\n            warmup.volume = 0;\n            speechSynthesis.speak(warmup);\n        } catch (e) { \/* ignorieren *\/ }\n        loadVoices();\n    }\n    if (isIOS) container.addEventListener('pointerdown', warmUpSpeechOniOS, { once: true, passive: true });\n\n    async function speakText(textToSpeak) {\n        if (!textToSpeak) return;\n        if (!('speechSynthesis' in window)) { alert('Sprachausgabe wird von diesem Browser nicht unterst\u00fctzt.'); return; }\n\n        const doSpeak = (voices) => {\n            speechSynthesis.cancel();\n            const u = new SpeechSynthesisUtterance(textToSpeak);\n            const germanVoices = voices.filter(v => v.lang && v.lang.toLowerCase().startsWith('de'));\n            function scoreVoice(v) {\n                const name = v.name.toLowerCase();\n                let score = 0;\n                if (v.localService === false) score += 4;\n                if (\/neural|natural|enhanced|premium|wavenet|online\/.test(name)) score += 5;\n                if (name.includes('google')) score += 3;\n                if (\/compact\/.test(name)) score -= 2;\n                const goodNames = ['katja', 'vicki', 'conrad', 'daniel', 'markus', 'anna', 'stefan', 'hedda', 'yannick'];\n                if (goodNames.some(n => name.includes(n))) score += 1;\n                return score;\n            }\n            const chosen = germanVoices.slice().sort((a, b) => scoreVoice(b) - scoreVoice(a))[0];\n            if (chosen) u.voice = chosen;\n            u.lang = \"de-DE\"; u.pitch = 1.0; u.rate = 0.96;\n            u.onerror = (e) => { console.error(\"Sprachausgabe-Fehler:\", e); };\n\n            if (!isIOS && !isSafari) {\n                let keepAlive = setInterval(() => {\n                    if (!window.speechSynthesis || !speechSynthesis.speaking) { clearInterval(keepAlive); return; }\n                    speechSynthesis.pause(); speechSynthesis.resume();\n                }, 5000);\n                u.onend = () => clearInterval(keepAlive);\n                u.onerror = () => clearInterval(keepAlive);\n            }\n            speechSynthesis.speak(u);\n        };\n\n        if (isIOS || isSafari) {\n            const voices = voicesReady ? cachedVoices : (window.speechSynthesis.getVoices() || []);\n            doSpeak(voices);\n            if (!voicesReady) loadVoices();\n        } else {\n            speechSynthesis.cancel();\n            await new Promise(r => setTimeout(r, 60));\n            const voices = voicesReady ? cachedVoices : await loadVoices();\n            doSpeak(voices);\n        }\n    }\n\n    let activeTooltipBubble = null;\n    function hideTooltip() {\n        if (activeTooltipBubble && activeTooltipBubble.parentNode) activeTooltipBubble.parentNode.removeChild(activeTooltipBubble);\n        activeTooltipBubble = null;\n    }\n    function clampAndShowTooltip(el, text) {\n        hideTooltip();\n        if (!text) return;\n        const card = el.closest('.sentence-block') || el.closest('.tr-card');\n        if (!card) return;\n        const bubble = document.createElement('div');\n        bubble.className = 'tt-bubble';\n        bubble.textContent = text;\n        bubble._anchorEl = el;\n        card.appendChild(bubble);\n\n        const cardRect = card.getBoundingClientRect();\n        const elRect = el.getBoundingClientRect();\n        const margin = 8;\n        const bw = bubble.offsetWidth;\n        const bh = bubble.offsetHeight;\n\n        let left = (elRect.left - cardRect.left) + (elRect.width \/ 2) - (bw \/ 2);\n        if (left < margin) left = margin;\n        if (left + bw > cardRect.width - margin) left = Math.max(margin, cardRect.width - margin - bw);\n\n        let top = (elRect.top - cardRect.top) - bh - 10;\n        let arrowSide = 'bottom';\n        if (top < margin) {\n            top = (elRect.bottom - cardRect.top) + 10;\n            arrowSide = 'top';\n        }\n\n        bubble.style.left = left + 'px';\n        bubble.style.top = top + 'px';\n        bubble.classList.add('tt-arrow-' + arrowSide);\n\n        const elCenterInCard = (elRect.left - cardRect.left) + elRect.width \/ 2;\n        let arrowLeft = elCenterInCard - left;\n        arrowLeft = Math.max(10, Math.min(bw - 10, arrowLeft));\n        bubble.style.setProperty('--tt-arrow-left', arrowLeft + 'px');\n\n        activeTooltipBubble = bubble;\n    }\n    function attachHoverTooltip(el) {\n        if (!el) return;\n        const show = () => clampAndShowTooltip(el, el.dataset.tooltip);\n        el.addEventListener('mouseenter', show);\n        el.addEventListener('mouseleave', hideTooltip);\n        el.addEventListener('focus', show);\n        el.addEventListener('blur', hideTooltip);\n        el.addEventListener('touchstart', () => { show(); setTimeout(hideTooltip, 2000); }, { passive: true });\n    }\n    function attachClickTooltip(el, textFn) {\n        if (!el) return;\n        el.addEventListener('click', (e) => {\n            e.stopPropagation();\n            clampAndShowTooltip(el, typeof textFn === 'function' ? textFn() : textFn);\n            setTimeout(hideTooltip, 2500);\n        });\n    }\n    document.addEventListener('click', (e) => {\n        if (!activeTooltipBubble) return;\n        const anchor = activeTooltipBubble._anchorEl;\n        if (e.target.closest('.tt-bubble')) return;\n        if (anchor && anchor.contains(e.target)) return;\n        hideTooltip();\n    }, true);\n\n    async function logToGoogle(data) {\n        const userInfo = getActiveUserInfo();\n        data.user_id = userInfo.id; data.user_name = userInfo.name;\n        const LOG_URL = 'https:\/\/script.google.com\/macros\/s\/AKfycbz7ViqxDaSi1l2M0o4rsPHqS09qmgosQy34eIJmBhfd1hs2SBbRAuc3nrJC4D4KfBoPPQ\/exec';\n        try {\n            await fetch(LOG_URL, { method: 'POST', mode: 'no-cors', cache: 'no-cache', headers: { 'Content-Type': 'application\/json' }, body: JSON.stringify(data) });\n        } catch (e) { console.error(\"Logging Fehler:\", e); }\n    }\n\n    function dgNormalizeDate(dateStr) {\n        if (!dateStr) return \"\";\n        let pureDate = dateStr.trim().split(\" \")[0];\n        if (pureDate.includes('.')) return pureDate;\n        if (pureDate.includes('-')) {\n            const parts = pureDate.split('-');\n            if (parts[0].length === 4) return `${parts[2]}.${parts[1]}.${parts[0]}`;\n        }\n        return pureDate;\n    }\n    function dgTodayKey() {\n        return new Date().toLocaleDateString('de-DE', { day: '2-digit', month: '2-digit', year: 'numeric' });\n    }\n    async function loadDailyGoal() {\n        const userInfo = getActiveUserInfo();\n        const userName = String(userInfo.name || \"\").trim().toLowerCase();\n        const userId = String(userInfo.id || \"\").trim().toLowerCase();\n        try {\n            const res = await fetch(`${URL_GOAL}&_cb=${Date.now()}`);\n            const csvText = await res.text();\n            const lines = csvText.split(\/\\r?\\n\/);\n            dgBaseCounts = {}; dgTarget = null;\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 rowUserId = (cols[1] || \"\").toLowerCase();\n                const rowName = (cols[2] || \"\").toLowerCase();\n                \/\/ Bei G\u00e4sten matchen wir bewusst NUR auf die individuelle Gast-ID\n                \/\/ (nicht auf den Namen \"Gast\", da sonst alle G\u00e4ste zusammengez\u00e4hlt w\u00fcrden).\n                const matches = userId.startsWith('guest-')\n                    ? (rowUserId && rowUserId === userId)\n                    : ((rowUserId && rowUserId === userId) || (rowName && rowName === userName));\n                if (matches) {\n                    const rowDate = dgNormalizeDate(cols[0]);\n                    const rowTargetRaw = cols[10] || cols[3];\n                    const rowTarget = parseInt(rowTargetRaw, 10);\n                    if (!isNaN(rowTarget) && rowTarget > 0) dgTarget = rowTarget;\n                    dgBaseCounts[rowDate] = (dgBaseCounts[rowDate] || 0) + 1;\n                }\n            }\n        } catch (e) { console.error(\"Tagesziel-Fehler:\", e); }\n        updateDailyGoalUI(true);\n        applyDailyLimitState();\n    }\n    function updateDailyGoalUI(animateFromZero) {\n        const goalEl = container.querySelector('.daily-goal');\n        const fillEl = container.querySelector('.dg-fill');\n        const countEl = container.querySelector('.dg-count');\n        if (!goalEl || !fillEl || !countEl) return;\n        const target = dgTarget || DEFAULT_DAILY_TARGET;\n        const todayCount = getTodaySentenceCount();\n        const pct = Math.min(Math.round((todayCount \/ target) * 100), 100);\n        countEl.textContent = `${todayCount} \/ ${target}`;\n        goalEl.classList.toggle('reached', todayCount >= target);\n        if (animateFromZero) {\n            fillEl.style.transition = 'none';\n            fillEl.style.width = '0%';\n            void fillEl.offsetWidth;\n            fillEl.style.transition = '';\n            requestAnimationFrame(() => { fillEl.style.width = pct + '%'; });\n        } else {\n            fillEl.style.width = pct + '%';\n        }\n    }\n\n    \/\/ ============ TAGESLIMIT-LOGIK ============\n    \/\/ Nutzt denselben Z\u00e4hler wie das Daily-Goal (heutige Check-Aktionen dieser\n    \/\/ Person), vergleicht ihn aber gegen ein hartes Limit je Nutzergruppe.\n    function getTodaySentenceCount() {\n        return (dgBaseCounts[dgTodayKey()] || 0) + dgLiveModifier;\n    }\n    function getCurrentDailyLimit() {\n        if (!window.wpTrainerUserInfo) return DAILY_LIMIT_GUEST;\n        const lvl = getUserAccessLevel();\n        return (lvl >= 2) ? DAILY_LIMIT_PAYER : DAILY_LIMIT_MEMBER;\n    }\n    function isDailyLimitReached() {\n        const limit = getCurrentDailyLimit();\n        if (!limit || limit <= 0) return false; \/\/ 0 = unbegrenzt\n        return getTodaySentenceCount() >= limit;\n    }\n    \/\/ Sperrt\/entsperrt die Check-\/Eingabe-Steuerung der aktuell sichtbaren\n    \/\/ Satzkarte, wenn das Tageslimit erreicht ist. Wird nach jedem Laden des\n    \/\/ Tagesziels und nach jeder best\u00e4tigten Antwort aufgerufen.\n    function applyDailyLimitState() {\n        const area = container.querySelector('#sentenceArea');\n        const block = area ? area.querySelector('.sentence-block') : null;\n        if (!block) return;\n        const limitReached = isDailyLimitReached();\n        block.classList.toggle('daily-limit-reached', limitReached);\n\n        const input = block.querySelector('textarea');\n        const revealWords = block.querySelectorAll('.reveal-word');\n        const checkBtn = block.querySelector('.ctrl-check .btn-icon');\n        const hintBtn = block.querySelector('.ctrl-hint .btn-icon');\n        const micBtn = block.querySelector('.mic-in-input');\n\n        if (input) input.disabled = limitReached;\n        revealWords.forEach(w => { if (!w.classList.contains('revealed')) w.style.pointerEvents = limitReached ? 'none' : ''; });\n        if (checkBtn) checkBtn.classList.toggle('is-locked', limitReached);\n        if (hintBtn) hintBtn.classList.toggle('is-locked', limitReached);\n        if (micBtn) micBtn.style.pointerEvents = limitReached ? 'none' : '';\n\n        let noticeEl = block.querySelector('.daily-limit-notice');\n        if (limitReached) {\n            if (!noticeEl) {\n                noticeEl = document.createElement('div');\n                noticeEl.className = 'daily-limit-notice';\n                const feedbackWrapper = block.querySelector('.feedback-wrapper');\n                if (feedbackWrapper) feedbackWrapper.insertAdjacentElement('afterend', noticeEl);\n            }\n            const isGuest = !window.wpTrainerUserInfo;\n            noticeEl.innerHTML = `<strong>${UI_LANGUAGES[currentLang].dailyLimitReachedTitle}<\/strong><br>${isGuest ? UI_LANGUAGES[currentLang].dailyLimitReachedGuest : UI_LANGUAGES[currentLang].dailyLimitReachedMember}`;\n        } else if (noticeEl) {\n            noticeEl.remove();\n        }\n    }\n    window.addEventListener('tm-satz-bestaetigt', () => { dgLiveModifier++; updateDailyGoalUI(false); applyDailyLimitState(); });\n    window.addEventListener('tm-user-switched', () => {\n        dgLiveModifier = 0; loadDailyGoal();\n        if (state_topics.length) { renderTopics(); buildSession(); }\n    });\n\n    function shuffleCopy(arr) {\n        const a = arr.slice();\n        for (let i = a.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [a[i], a[j]] = [a[j], a[i]]; }\n        return a;\n    }\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 getTopicAccessLevel(topicId) {\n        if (!topicId) return 1;\n        const t = state_topics.find(t2 => t2.id === topicId);\n        return t ? (t.accessLevel || 1) : 1;\n    }\n    function isTopicUnlocked(topicId) {\n        return getTopicAccessLevel(topicId) <= getUserAccessLevel();\n    }\n\n    async function loadData() {\n        try {\n            const [csvS, csvT] = await Promise.all([fetch(URL_S).then(r => r.text()), fetch(URL_T).then(r => r.text())]);\n            const rowsS = csvS.split(\/\\r?\\n\/).slice(1);\n            allData = rowsS.map(row => {\n                const cols = row.split(\/,(?=(?:(?:[^\"]*\"){2})*[^\"]*$)\/);\n                const clean = (v) => v ? v.trim().replace(\/^\"|\"$\/g, '').replace(\/\"\"\/g, '\"') : \"\";\n                return { id: clean(cols[0]), level: clean(cols[1]), topicId: clean(cols[2]), de: clean(cols[4]), en: clean(cols[5]), es: clean(cols[6]), alt: clean(cols[7]) };\n            }).filter(r => r.de);\n\n            const rowsT = csvT.split(\/\\r?\\n\/).slice(1);\n            state_topics = rowsT.map(row => {\n                const cols = row.split(\/,(?=(?:(?:[^\"]*\"){2})*[^\"]*$)\/);\n                const clean = (v) => v ? v.trim().replace(\/^\"|\"$\/g, '').replace(\/\"\"\/g, '\"') : \"\";\n                const accessRaw = parseInt(clean(cols[10]), 10);\n                const accessLevel = (accessRaw === 2 || accessRaw === 3) ? accessRaw : 1;\n                return {\n                    level: clean(cols[0]),\n                    id: clean(cols[1]),\n                    topicTitle: clean(cols[2]),\n                    area: clean(cols[3]),\n                    name: clean(cols[4]),\n                    nameEn: clean(cols[5]),\n                    nameEs: clean(cols[6]),\n                    infoDe: clean(cols[7]),\n                    infoEn: clean(cols[8]),\n                    infoEs: clean(cols[9]),\n                    accessLevel: accessLevel\n                };\n            });\n            updateInterfaceStrings();\n            renderTopics();\n            buildSession();\n        } catch (e) { console.error(\"Fehler beim Laden:\", e); }\n    }\n\n    function updateInterfaceStrings() {\n        if (filterTitleEl) filterTitleEl.textContent = UI_LANGUAGES[currentLang].topicTitle;\n        if (topicSearchEl) topicSearchEl.placeholder = UI_LANGUAGES[currentLang].searchPlaceholder;\n        updateFilterToggleLabel();\n        updateMobileFullToggleUI();\n    }\n\n    function updateFilterToggleLabel() {\n        const levelBadge = container.querySelector('#fcLevelBadge');\n        const eyebrow = container.querySelector('#fcEyebrow');\n        const topicName = container.querySelector('#fcTopicName');\n        if (!levelBadge || !topicName) return;\n\n        if (eyebrow) eyebrow.textContent = UI_LANGUAGES[currentLang].topicEyebrow;\n        levelBadge.textContent = currentLevel;\n        const levelNameEl = container.querySelector('#fcLevelName');\n        if (levelNameEl) {\n            const names = LEVEL_NAMES[currentLang] || LEVEL_NAMES.en;\n            levelNameEl.innerHTML = `${UI_LANGUAGES[currentLang].levelPrefix} ${currentLevel}<br>${names[currentLevel] || ''}`;\n        }\n        const caretLabelEl = container.querySelector('.fc-caret-label');\n        if (caretLabelEl) caretLabelEl.textContent = UI_LANGUAGES[currentLang].topicChange;\n\n        if (!currentTopicId) {\n            \/\/ Everyday-Sentences-Seiten (window.__spxGrammar === false): festes Thema statt \"All topics mixed\"\n            topicName.textContent = (window.__spxGrammar === false) ? UI_LANGUAGES[currentLang].everydayTopic : UI_LANGUAGES[currentLang].allTopics;\n            return;\n        }\n        const t = state_topics.find(t2 => t2.id === currentTopicId);\n        if (t) {\n            topicName.textContent = t.topicTitle || t.name || t.id;\n        } else {\n            topicName.textContent = currentTopicId;\n        }\n    }\n\n    function updateMobileFullToggleUI() {\n        const btn = container.querySelector('#mobileFullToggle');\n        if (!btn) return;\n        const toggled = container.classList.contains('full-input-mode');\n        const isMobileWidth = window.matchMedia('(max-width: 800px)').matches;\n        const defaultIsPuzzle = isMobileWidth;\n        const puzzleShowing = defaultIsPuzzle !== toggled;\n        btn.classList.toggle('active', !puzzleShowing);\n        const icon = btn.querySelector('.mft-icon');\n        const label = btn.querySelector('.mft-label');\n        const modeLabel = puzzleShowing ? UI_LANGUAGES[currentLang].fullModeOn : UI_LANGUAGES[currentLang].fullModeOff;\n        if (icon) icon.innerHTML = puzzleShowing ? ICONS.keyboard : ICONS.puzzle;\n        if (label) label.textContent = modeLabel;\n        btn.dataset.tooltip = modeLabel;\n        btn.setAttribute('aria-label', modeLabel);\n    }\n\n    function updateAllTopicsBtnState() {\n        const btn = allTopicsBtnEl;\n        if (!btn) return;\n        btn.textContent = UI_LANGUAGES[currentLang].allTopics;\n        btn.classList.toggle('active', !currentTopicId);\n    }\n\n    function renderTopics() {\n        const list = topicListEl;\n        const searchInput = topicSearchEl;\n        if (!list) return;\n        list.innerHTML = \"\";\n        updateAllTopicsBtnState();\n\n        const term = searchInput ? searchInput.value.toLowerCase().trim() : \"\";\n        let filtered;\n        let crossLevelSearch = false;\n        const areaPool = MANUAL_TOPIC_AREA ? state_topics.filter(t => t.area === MANUAL_TOPIC_AREA) : state_topics;\n        if (term) {\n            crossLevelSearch = true;\n            filtered = areaPool.filter(t => {\n                const haystacks = [t.name, t.nameEn, t.nameEs, t.topicTitle, t.id].map(v => (v || \"\").toLowerCase());\n                return haystacks.some(h => h.includes(term));\n            });\n        } else {\n            filtered = areaPool.filter(t => t.level === currentLevel);\n        }\n\n        const userLevel = getUserAccessLevel();\n        filtered.forEach(t => {\n            const topicName = (currentLang === 'en' ? t.nameEn : t.nameEs) || t.name;\n            let activeInfo = t.infoDe;\n            if (currentLang === 'en') activeInfo = t.infoEn || t.infoDe;\n            if (currentLang === 'es') activeInfo = t.infoEs || t.infoDe;\n            const levelBadge = crossLevelSearch ? `<span class=\"topic-level-badge\">${t.level}<\/span>` : '';\n            const infoText = (activeInfo || \"\").replace(\/\\n\/g, '<br>');\n\n            const topicAccess = t.accessLevel || 1;\n            const isLocked = topicAccess > userLevel;\n            const lockLabel = topicAccess >= 3 ? UI_LANGUAGES[currentLang].lockedPaidList : UI_LANGUAGES[currentLang].lockedLoginList;\n            const lockBadge = isLocked ? `<span class=\"topic-lock-badge\">\ud83d\udd12 ${lockLabel}<\/span>` : '';\n\n            const li = document.createElement('li');\n            li.className = \"topic-item\" + (currentTopicId === t.id ? \" active\" : \"\") + (isLocked ? \" locked\" : \"\");\n            li.innerHTML = `\n                <div class=\"topic-row\">\n                    <span class=\"topic-id-big\">${t.id}<\/span>\n                    <div class=\"topic-text-wrapper\">\n                        <div class=\"topic-title-text\">${t.topicTitle || \"\"}<\/div>\n                        <div class=\"topic-name-row\">${topicName}${levelBadge}<\/div>\n                        ${lockBadge}\n                    <\/div>\n                    <button class=\"topic-expand-btn\" type=\"button\" aria-expanded=\"false\">\u25be<\/button>\n                <\/div>\n                <div class=\"topic-info-panel\">${infoText || \"\"}<\/div>`;\n\n            const row = li.querySelector('.topic-row');\n            const expandBtn = li.querySelector('.topic-expand-btn');\n            const infoPanel = li.querySelector('.topic-info-panel');\n\n            row.onclick = (e) => {\n                if (e.target.closest('.topic-expand-btn')) return;\n                if (isLocked) {\n                    infoPanel.innerHTML = `<strong>${topicAccess >= 3 ? UI_LANGUAGES[currentLang].lockedPaid : UI_LANGUAGES[currentLang].lockedLogin}<\/strong>`;\n                    infoPanel.classList.add('open');\n                    expandBtn.classList.add('open');\n                    expandBtn.setAttribute('aria-expanded', 'true');\n                    return;\n                }\n                currentTopicId = t.id;\n                if (t.level !== currentLevel) {\n                    currentLevel = t.level;\n                    if (levelBtnGroupEl) levelBtnGroupEl.querySelectorAll('.level-btn').forEach(b => b.classList.toggle('active', b.dataset.level === currentLevel));\n                }\n                closeFilterDrawer();\n                renderTopics();\n                buildSession();\n            };\n            expandBtn.onclick = (e) => {\n                e.stopPropagation();\n                const willOpen = !infoPanel.classList.contains('open');\n                if (willOpen && isLocked) infoPanel.innerHTML = `<strong>${topicAccess >= 3 ? UI_LANGUAGES[currentLang].lockedPaid : UI_LANGUAGES[currentLang].lockedLogin}<\/strong>`;\n                else if (willOpen) infoPanel.innerHTML = infoText || \"\";\n                infoPanel.classList.toggle('open', willOpen);\n                expandBtn.classList.toggle('open', willOpen);\n                expandBtn.setAttribute('aria-expanded', String(willOpen));\n            };\n            list.appendChild(li);\n        });\n        updateFilterToggleLabel();\n    }\n\n    function captureCurrentAnswer() {\n        const area = container.querySelector('#sentenceArea');\n        const ta = area ? area.querySelector('textarea') : null;\n        if (ta) sessionAnswers[sessionIndex] = ta.value;\n    }\n    function buildSession() {\n        let poolAll = allData.filter(d => d.level === currentLevel);\n        if (MANUAL_TOPIC_AREA) {\n            poolAll = poolAll.filter(d => {\n                const t = state_topics.find(t2 => t2.id === d.topicId);\n                return t && t.area === MANUAL_TOPIC_AREA;\n            });\n        }\n        if (currentTopicId) poolAll = poolAll.filter(d => d.topicId === currentTopicId);\n        const pool = currentTopicId ? poolAll.filter(d => isTopicUnlocked(d.topicId)) : poolAll;\n        sessionAnswers = {};\n        if (pool.length === 0) {\n            session = [];\n            if (poolAll.length > 0) {\n                const requiredLevel = Math.min(...poolAll.map(d => getTopicAccessLevel(d.topicId)));\n                renderLockedState(requiredLevel);\n            } else {\n                renderEmptyState();\n            }\n            return;\n        }\n        const ordered = shuffleCopy(pool);\n        session = ordered.slice(0, Math.min(SESSION_SIZE, ordered.length));\n        sessionIndex = 0;\n        renderCurrentSentence();\n    }\n    function goToNext() {\n        captureCurrentAnswer();\n        sessionIndex++;\n        if (sessionIndex >= session.length) { buildSession(); return; }\n        renderCurrentSentence();\n    }\n    function goToPrevious() {\n        if (sessionIndex <= 0) return;\n        captureCurrentAnswer();\n        sessionIndex--;\n        renderCurrentSentence();\n    }\n    function renderEmptyState() {\n        const area = container.querySelector('#sentenceArea');\n        area.innerHTML = `<div class=\"sentence-block empty-state\">${UI_LANGUAGES[currentLang].noData}<\/div>`;\n    }\n    function renderLockedState(requiredLevel) {\n        const area = container.querySelector('#sentenceArea');\n        const msg = requiredLevel >= 3 ? UI_LANGUAGES[currentLang].lockedPaid : UI_LANGUAGES[currentLang].lockedLogin;\n        area.innerHTML = `<div class=\"sentence-block empty-state\">${ICONS.lock} ${msg}<\/div>`;\n    }\n    function renderCurrentSentence() {\n        const area = container.querySelector('#sentenceArea');\n        area.innerHTML = \"\";\n        if (session.length === 0) { renderEmptyState(); return; }\n        area.appendChild(createSentenceBlock(session[sessionIndex]));\n        updateDailyGoalUI(true);\n        applyDailyLimitState();\n    }\n\n    function isBookmarked(s) { return bookmarksMemory.some(b => b.de === s.de); }\n\n    function createSentenceBlock(initialS) {\n        const block = document.createElement(\"div\");\n        block.className = \"sentence-block\";\n        block.dataset.sentence = JSON.stringify(initialS);\n        block.dataset.tipLevel = 0;\n        const isB = isBookmarked(initialS);\n\n        const userLevel = getUserAccessLevel();\n        const canListen = userLevel >= 2;\n        const canSave = userLevel >= 3;\n        const saveTooltip = canSave\n            ? UI_LANGUAGES[currentLang].saveHint\n            : (userLevel >= 2 ? UI_LANGUAGES[currentLang].saveUpgradeHint : UI_LANGUAGES[currentLang].saveLockedHint);\n\n        block.innerHTML = `\n            <button type=\"button\" class=\"listen-btn ${canListen ? '' : 'is-locked'}\" aria-label=\"${UI_LANGUAGES[currentLang].btnListen}\" data-tooltip=\"${canListen ? UI_LANGUAGES[currentLang].btnListen : UI_LANGUAGES[currentLang].listenLockedHint}\">${ICONS.listen}<\/button>\n            <span class=\"save-toast\"><\/span>\n            <div class=\"source\">${initialS[currentLang]}<\/div>\n            <div class=\"input-wrapper\">\n                <textarea placeholder=\"${UI_LANGUAGES[currentLang].placeholder}\" aria-label=\"${UI_LANGUAGES[currentLang].placeholder}\"><\/textarea>\n                <button type=\"button\" class=\"mic-in-input\" aria-label=\"${UI_LANGUAGES[currentLang].micHint}\" data-tooltip=\"${UI_LANGUAGES[currentLang].micHint}\">${ICONS.mic}<\/button>\n            <\/div>\n            <div class=\"reveal-wrapper\"><\/div>\n            <div class=\"reveal-alt-holder\"><\/div>\n            <div class=\"feedback-wrapper\"><div class=\"feedback\"><\/div><\/div>\n            <div class=\"sentence-controls\"><\/div>\n        `;\n        const input = block.querySelector(\"textarea\");\n        const micBtn = block.querySelector(\".mic-in-input\");\n        const fb = block.querySelector(\".feedback\");\n        const fbWrapper = block.querySelector(\".feedback-wrapper\");\n        const saveToast = block.querySelector(\".save-toast\");\n        const langInd = container.querySelector(\".lang-indicator\");\n        const listenBtn = block.querySelector(\".listen-btn\");\n        const ctrlArea = block.querySelector(\".sentence-controls\");\n        const revealWrapper = block.querySelector(\".reveal-wrapper\");\n        const revealAltHolder = block.querySelector(\".reveal-alt-holder\");\n\n        const createBtn = (icon, labelKey, fn, opts) => {\n            opts = opts || {};\n            const div = document.createElement(\"div\");\n            div.className = \"control-item\" + (opts.cls ? \" \" + opts.cls : \"\");\n            const tipAttr = opts.tooltip ? ` data-tooltip=\"${opts.tooltip}\"` : '';\n            const extra = opts.extraClass ? \" \" + opts.extraClass : \"\";\n            div.innerHTML = `<button type=\"button\" class=\"btn-icon${opts.locked ? ' is-locked' : ''}${extra}\" aria-label=\"${UI_LANGUAGES[currentLang][labelKey]}\"${tipAttr}>${icon}<\/button><div class=\"btn-label\" data-label-key=\"${labelKey}\">${UI_LANGUAGES[currentLang][labelKey]}<\/div>`;\n            const btnEl = div.querySelector(\"button\");\n            btnEl.onclick = (opts.locked || !fn) ? () => {} : fn;\n            if (opts.tooltip) attachHoverTooltip(btnEl);\n            return div;\n        };\n\n        \/\/ Speichern-Button sitzt jetzt unten in der Bedienleiste\n        const saveItem = createBtn(ICONS.star, \"btnSave\", null, { cls: \"ctrl-save\", locked: !canSave, tooltip: saveTooltip, extraClass: \"save-btn\" + (isB ? \" saved\" : \"\") });\n        const saveBtn = saveItem.querySelector(\"button\");\n        ctrlArea.appendChild(saveItem);\n\n        attachHoverTooltip(listenBtn);\n        attachHoverTooltip(micBtn);\n        attachHoverTooltip(fbWrapper);\n        listenBtn.onclick = canListen ? () => { const s = JSON.parse(block.dataset.sentence); speakText(s.de); } : () => {};\n\n        saveBtn.onclick = () => {\n            if (!canSave) return;\n            const s = JSON.parse(block.dataset.sentence);\n            const idx = bookmarksMemory.findIndex(b => b.de === s.de);\n            let actionType = \"\";\n            if (idx > -1) { bookmarksMemory.splice(idx, 1); saveBtn.classList.remove('saved'); actionType = \"Bookmark entfernt\"; }\n            else {\n                bookmarksMemory.push(s); saveBtn.classList.add('saved'); actionType = \"Bookmark gesetzt\";\n                if (saveToast) {\n                    saveToast.textContent = UI_LANGUAGES[currentLang].savedToast;\n                    clearTimeout(saveToast._hideTimer);\n                    clearTimeout(saveToast._resetTimer);\n                    saveToast.classList.remove('hide');\n                    void saveToast.offsetWidth;\n                    saveToast.classList.add('show');\n                    saveToast._hideTimer = setTimeout(() => {\n                        saveToast.classList.remove('show');\n                        saveToast.classList.add('hide');\n                        saveToast._resetTimer = setTimeout(() => saveToast.classList.remove('hide'), 2300);\n                    }, 700);\n                }\n            }\n            logToGoogle({ sentence_id: s.id, level: currentLevel, topic: s.topicId || \"Mix\", german: s.de, translation: s[currentLang], action: actionType, status: \"-\", user_input: \"\" });\n        };\n\n        langInd.onclick = () => {\n            currentLang = (currentLang === 'en' ? 'es' : 'en');\n            updateInterfaceStrings();\n            renderTopics();\n            const data = JSON.parse(block.dataset.sentence);\n            block.querySelector('.source').textContent = data[currentLang];\n            langInd.textContent = currentLang.toUpperCase();\n            langInd.setAttribute('aria-label', UI_LANGUAGES[currentLang].langHint);\n            langInd.dataset.tooltip = UI_LANGUAGES[currentLang].langHint;\n            saveBtn.dataset.tooltip = canSave\n                ? UI_LANGUAGES[currentLang].saveHint\n                : (userLevel >= 2 ? UI_LANGUAGES[currentLang].saveUpgradeHint : UI_LANGUAGES[currentLang].saveLockedHint);\n            micBtn.dataset.tooltip = UI_LANGUAGES[currentLang].micHint;\n            if (input) input.placeholder = UI_LANGUAGES[currentLang].placeholder;\n            block.querySelectorAll('.btn-label[data-label-key]').forEach(lbl => {\n                const key = lbl.dataset.labelKey;\n                lbl.textContent = UI_LANGUAGES[currentLang][key];\n                const b = lbl.parentNode.querySelector('.btn-icon');\n                if (b) b.setAttribute('aria-label', UI_LANGUAGES[currentLang][key]);\n            });\n            listenBtn.dataset.tooltip = canListen ? UI_LANGUAGES[currentLang].btnListen : UI_LANGUAGES[currentLang].listenLockedHint;\n            listenBtn.setAttribute('aria-label', UI_LANGUAGES[currentLang].btnListen);\n            micBtn.setAttribute('aria-label', UI_LANGUAGES[currentLang].micHint);\n            updateFsBtnIcon();\n            const altDiv = block.querySelector(\".solution-text\");\n            if (altDiv) altDiv.textContent = ALT_LABEL + data.alt;\n            const dgLabelEl = container.querySelector(\".dg-label\");\n            if (dgLabelEl) dgLabelEl.textContent = UI_LANGUAGES[currentLang].dailyGoalLabel;\n            applyDailyLimitState();\n        };\n\n        function autoResize() { input.style.height = '0px'; input.style.height = Math.max(46, input.scrollHeight) + 'px'; }\n        input.addEventListener('input', autoResize);\n        if (sessionAnswers[sessionIndex]) { input.value = sessionAnswers[sessionIndex]; autoResize(); }\n\n        const check = () => {\n            if (isDailyLimitReached()) { applyDailyLimitState(); return; }\n            const s = JSON.parse(block.dataset.sentence);\n            fb.innerHTML = \"\";\n            const topicInfo = s.topicId ? `Grammar Topic ${s.topicId} (${s.level})` : `no specific grammar topic (${s.level})`;\n            fbWrapper.setAttribute('data-tooltip', topicInfo);\n\n            const targetWordsOriginal = s.de.split(\/\\s+\/).filter(Boolean);\n            const targetNorm = targetWordsOriginal.map(normalize);\n            const userWordsOriginal = input.value.trim().split(\/\\s+\/).filter(Boolean);\n            const userNorm = userWordsOriginal.map(normalize);\n            const alignment = alignWords(targetNorm, userNorm);\n            const usedUserIdx = new Set(alignment.filter(x => x !== null));\n\n            targetWordsOriginal.forEach((word, idx) => {\n                const span = document.createElement(\"span\");\n                span.textContent = word;\n                const uIdx = alignment[idx];\n                if (uIdx !== null) { span.className = (userNorm[uIdx] === targetNorm[idx]) ? \"correct\" : \"tip\"; }\n                else {\n                    const foundElsewhere = userNorm.some((uw, k) => !usedUserIdx.has(k) && wordsEqualFuzzy(uw, targetNorm[idx]));\n                    span.className = foundElsewhere ? \"tip\" : \"missing\";\n                }\n                fb.appendChild(span);\n                fb.appendChild(document.createTextNode(\" \"));\n            });\n            if (s.alt) {\n                const altDiv = document.createElement(\"div\");\n                altDiv.className = \"solution-text\";\n                altDiv.textContent = ALT_LABEL + s.alt;\n                fb.appendChild(altDiv);\n            }\n            const isCorrect = normalize(input.value) === normalize(s.de);\n            window.dispatchEvent(new CustomEvent('tm-satz-bestaetigt'));\n            logToGoogle({ sentence_id: s.id, level: currentLevel, topic: s.topicId || \"Mix\", german: s.de, translation: s[currentLang], action: \"Check\", status: isCorrect ? \"Richtig\" : \"Falsch\", user_input: input.value });\n        };\n\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 isListening = false; let autoStopTimer = null;\n            const resetTimer = () => {\n                if (autoStopTimer) clearTimeout(autoStopTimer);\n                autoStopTimer = setTimeout(() => { if (isListening) rec.stop(); }, 5000);\n            };\n            rec.onstart = () => { isListening = true; input.classList.add(\"recording-active\"); micBtn.classList.add(\"recording-active\"); resetTimer(); };\n            rec.onerror = (event) => { console.error(\"Spracherkennungsfehler:\", event.error); rec.stop(); };\n            rec.onend = () => {\n                isListening = false; input.classList.remove(\"recording-active\"); micBtn.classList.remove(\"recording-active\");\n                if (autoStopTimer) clearTimeout(autoStopTimer);\n                if (input.value) { let text = input.value.trim(); if (text.length > 0) input.value = text.charAt(0).toUpperCase() + text.slice(1); }\n            };\n            rec.onresult = (e) => {\n                let currentTranscript = '';\n                for (let i = 0; i < e.results.length; ++i) {\n                    let word = e.results[i][0].transcript;\n                    currentTranscript += (i > 0 && !word.startsWith(' ')) ? ' ' + word : word;\n                }\n                input.value = currentTranscript.replace(\/\\s\\s+\/g, ' ');\n                autoResize(); resetTimer();\n            };\n            micBtn.onclick = (e) => {\n                e.preventDefault();\n                if (isDailyLimitReached()) return;\n                if (isListening) { rec.stop(); }\n                else { input.value = \"\"; if (window.speechSynthesis.speaking) window.speechSynthesis.cancel(); rec.start(); }\n            };\n        }\n\n        let revealedCount = 0;\n        let revealCorrectCount = 0;\n        function finalizeRevealIfComplete() {\n            if (revealWrapper.children.length === 0 || revealedCount !== revealWrapper.children.length) return;\n            const s2 = JSON.parse(block.dataset.sentence);\n            revealAltHolder.innerHTML = \"\";\n            if (s2.alt) {\n                const altDiv = document.createElement('div');\n                altDiv.className = 'solution-text';\n                altDiv.textContent = ALT_LABEL + s2.alt;\n                revealAltHolder.appendChild(altDiv);\n            }\n            const isCorrect = (revealCorrectCount === revealedCount);\n            window.dispatchEvent(new CustomEvent('tm-satz-bestaetigt'));\n            logToGoogle({ sentence_id: s2.id, level: currentLevel, topic: s2.topicId || \"Mix\", german: s2.de, translation: s2[currentLang], action: \"Mobile Aufdecken\", status: isCorrect ? \"Richtig\" : \"Teilweise\", user_input: `${revealCorrectCount}\/${revealedCount} gewusst` });\n        }\n        function buildRevealWord(word) {\n            const span = document.createElement('span');\n            span.className = 'reveal-word';\n            span.textContent = word;\n            let startX = null; let dragged = false; const threshold = 22;\n            const reveal = (isKnown) => {\n                if (span.classList.contains('revealed')) return;\n                if (isDailyLimitReached()) return;\n                span.classList.add('revealed', isKnown ? 'correct-word' : 'wrong-word');\n                revealedCount++; if (isKnown) revealCorrectCount++;\n                finalizeRevealIfComplete();\n            };\n            span.addEventListener('pointerdown', (e) => { if (span.classList.contains('revealed') || isDailyLimitReached()) return; startX = e.clientX; dragged = false; span.classList.add('dragging'); });\n            span.addEventListener('pointermove', (e) => { if (startX === null) return; if (Math.abs(e.clientX - startX) > 6) dragged = true; });\n            const finish = (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('pointerup', finish);\n            span.addEventListener('pointercancel', () => { startX = null; span.classList.remove('dragging'); });\n            return span;\n        }\n        function renderRevealWords(sentenceDe) {\n            revealWrapper.innerHTML = \"\"; revealAltHolder.innerHTML = \"\";\n            revealedCount = 0; revealCorrectCount = 0;\n            sentenceDe.split(\/\\s+\/).filter(Boolean).forEach(w => revealWrapper.appendChild(buildRevealWord(w)));\n        }\n        function revealAllRemaining() {\n            let changed = false;\n            Array.from(revealWrapper.children).forEach(span => {\n                if (!span.classList.contains('revealed')) { span.classList.add('revealed', 'wrong-word'); revealedCount++; changed = true; }\n            });\n            if (changed) finalizeRevealIfComplete();\n        }\n        renderRevealWords(initialS.de);\n\n        ctrlArea.appendChild(createBtn(ICONS.hint, \"btnHint\", () => {\n            if (isDailyLimitReached()) return;\n            const s = JSON.parse(block.dataset.sentence);\n            let tipL = (parseInt(block.dataset.tipLevel) || 0) + 1;\n            block.dataset.tipLevel = tipL;\n            fb.innerHTML = s.de.split(\" \").map(w => `<span class=\"tip\">${w.slice(0, tipL)}${tipL < w.length ? '...' : ''}<\/span> `).join(\"\");\n        }, { cls: \"ctrl-hint\" }));\n        ctrlArea.appendChild(createBtn(ICONS.check, \"btnCheck\", () => {\n            if (window.matchMedia('(max-width: 800px)').matches && !container.classList.contains('full-input-mode')) revealAllRemaining(); else check();\n        }, { cls: \"ctrl-check\" }));\n        const prevItem = createBtn(ICONS.back, \"btnPrev\", () => goToPrevious(), { cls: \"ctrl-prev\" });\n        if (sessionIndex <= 0) prevItem.querySelector(\".btn-icon\").classList.add(\"is-disabled\");\n        ctrlArea.appendChild(prevItem);\n        ctrlArea.appendChild(createBtn(ICONS.next, \"btnNew\", goToNext, { cls: \"ctrl-next\" }));\n\n        input.onkeydown = (e) => { if (e.key === \"Enter\") { e.preventDefault(); check(); } };\n        applyDailyLimitState();\n        return block;\n    }\n\n    function scrollToActiveTopic() {\n        if (!topicListEl) return;\n        const activeItem = topicListEl.querySelector('.topic-item.active');\n        if (activeItem) {\n            activeItem.scrollIntoView({ block: 'start', behavior: 'auto' });\n        } else {\n            topicListEl.scrollTop = 0;\n        }\n    }\n    function openFilterDrawer() {\n        if (filterOverlayEl) document.body.appendChild(filterOverlayEl);\n        if (filterOverlayEl) filterOverlayEl.classList.add('open');\n        document.body.style.overflow = 'hidden';\n        requestAnimationFrame(() => requestAnimationFrame(scrollToActiveTopic));\n    }\n    function closeFilterDrawer() {\n        if (filterOverlayEl) filterOverlayEl.classList.remove('open');\n        document.body.style.overflow = '';\n    }\n    container.querySelector('#filterToggleBtn').onclick = openFilterDrawer;\n    if (filterCloseBtn) filterCloseBtn.onclick = closeFilterDrawer;\n    if (filterOverlayEl) filterOverlayEl.addEventListener('click', (e) => {\n        if (e.target === filterOverlayEl) closeFilterDrawer();\n    });\n\n    const mobileFullBtn = container.querySelector('#mobileFullToggle');\n    if (mobileFullBtn) {\n        mobileFullBtn.onclick = () => {\n            container.classList.toggle('full-input-mode');\n            updateMobileFullToggleUI();\n        };\n        attachHoverTooltip(mobileFullBtn);\n    }\n\n    const headLangBtn = container.querySelector('.lang-indicator');\n    if (headLangBtn) {\n        headLangBtn.textContent = currentLang.toUpperCase();\n        headLangBtn.dataset.tooltip = UI_LANGUAGES[currentLang].langHint;\n        attachHoverTooltip(headLangBtn);\n    }\n    const headFsBtn = container.querySelector('.fullscreen-toggle-btn');\n    if (headFsBtn) {\n        headFsBtn.onclick = () => {\n            if (fsApiSupported) {\n                if (!isContainerFullscreen()) {\n                    const reqFs = container.requestFullscreen || container.webkitRequestFullscreen;\n                    if (reqFs) reqFs.call(container);\n                } else {\n                    const exitFs = document.exitFullscreen || document.webkitExitFullscreen;\n                    if (exitFs) exitFs.call(document);\n                }\n            } else {\n                if (container.classList.contains('pseudo-fullscreen')) deactivatePseudoFullscreen();\n                else activatePseudoFullscreen();\n            }\n        };\n        attachHoverTooltip(headFsBtn);\n        updateFsBtnIcon();\n    }\n    const headDgCount = container.querySelector('.dg-count');\n    if (headDgCount) attachClickTooltip(headDgCount, () => UI_LANGUAGES[currentLang].dailyGoalAdjustHint);\n\n    if (levelBtnGroupEl) {\n        levelBtnGroupEl.querySelectorAll('.level-btn').forEach(btn => {\n            btn.onclick = (e) => {\n                currentLevel = e.target.dataset.level;\n                levelBtnGroupEl.querySelectorAll('.level-btn').forEach(b => b.classList.remove('active'));\n                e.target.classList.add('active');\n                currentTopicId = null;\n                renderTopics();\n                buildSession();\n            };\n        });\n    }\n    if (allTopicsBtnEl) allTopicsBtnEl.onclick = () => { currentTopicId = null; closeFilterDrawer(); renderTopics(); buildSession(); };\n    if (topicSearchEl) topicSearchEl.oninput = () => { renderTopics(); };\n\n    \/\/ Obere Leiste bleibt IMMER sichtbar (dient nur noch als \u00dcberschrift).\n    \/\/ Bei SHOW_TOPIC_BAR = false wird lediglich der Klick deaktiviert und der\n    \/\/ Eyebrow-Text (\"Current topic \u2014 tap to change\") sowie der Pfeil (Caret)\n    \/\/ ausgeblendet, da beide eine Interaktion suggerieren, die nicht mehr\n    \/\/ m\u00f6glich ist. FIX: setProperty(...,'important') statt .style.display=,\n    \/\/ da die zugeh\u00f6rigen CSS-Regeln display mit !important setzen.\n    if (!SHOW_TOPIC_BAR) {\n        const toggleBtn = container.querySelector('#filterToggleBtn');\n        if (toggleBtn) {\n            toggleBtn.onclick = null;\n            toggleBtn.classList.add('is-static');\n            toggleBtn.setAttribute('aria-disabled', 'true');\n            toggleBtn.tabIndex = -1;\n        }\n        \/\/ \"Topic:\" bleibt sichtbar (z. B. \"Topic: Everyday sentences\"), nur der Change-Knopf verschwindet.\n        const caretEl = container.querySelector('.fc-caret');\n        if (caretEl) caretEl.style.setProperty('display', 'none', 'important');\n    }\n\n    updateMobileFullToggleUI();\n    window.addEventListener('resize', updateMobileFullToggleUI);\n    loadData();\n    loadDailyGoal();\n})(document.currentScript.parentElement);\n<\/script><\/div>\n\n\n\n<\/div>\n<\/div>\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>Exercises \u00b7 A1 German A1 mixed translations Free A1 German practice: translate real sentences native speakers use every day and get instant feedback.<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-82","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>German A1 Mixed Translations: Free Practice | sofapiano<\/title>\n<meta name=\"description\" content=\"Free German A1 practice with mixed translations. Translate real sentences native speakers use and build confidence step by step.\" \/>\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\/a1-mixed-translations\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"German A1 Mixed Translations: Free Practice | sofapiano\" \/>\n<meta property=\"og:description\" content=\"Free German A1 practice with mixed translations. Translate real sentences native speakers use and build confidence step by step.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/sofapiano.com\/es\/a1-mixed-translations\/\" \/>\n<meta property=\"og:site_name\" content=\"sofapiano\" \/>\n<meta property=\"article:modified_time\" content=\"2026-11-03T12:50:17+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minuto\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/sofapiano.com\\\/a1-mixed-translations\\\/\",\"url\":\"https:\\\/\\\/sofapiano.com\\\/a1-mixed-translations\\\/\",\"name\":\"German A1 Mixed Translations: Free Practice | sofapiano\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sofapiano.com\\\/#website\"},\"datePublished\":\"2026-03-09T16:41:36+00:00\",\"dateModified\":\"2026-11-03T12:50:17+00:00\",\"description\":\"Free German A1 practice with mixed translations. Translate real sentences native speakers use and build confidence step by step.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/sofapiano.com\\\/a1-mixed-translations\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/sofapiano.com\\\/a1-mixed-translations\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/sofapiano.com\\\/a1-mixed-translations\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Start\",\"item\":\"https:\\\/\\\/sofapiano.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mixed Translations\"}]},{\"@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":"German A1 Mixed Translations: Free Practice | sofapiano","description":"Free German A1 practice with mixed translations. Translate real sentences native speakers use and build confidence step by step.","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\/a1-mixed-translations\/","og_locale":"es_ES","og_type":"article","og_title":"German A1 Mixed Translations: Free Practice | sofapiano","og_description":"Free German A1 practice with mixed translations. Translate real sentences native speakers use and build confidence step by step.","og_url":"https:\/\/sofapiano.com\/es\/a1-mixed-translations\/","og_site_name":"sofapiano","article_modified_time":"2026-11-03T12:50:17+00:00","twitter_card":"summary_large_image","twitter_misc":{"Tiempo de lectura":"1 minuto"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/sofapiano.com\/a1-mixed-translations\/","url":"https:\/\/sofapiano.com\/a1-mixed-translations\/","name":"German A1 Mixed Translations: Free Practice | sofapiano","isPartOf":{"@id":"https:\/\/sofapiano.com\/#website"},"datePublished":"2026-03-09T16:41:36+00:00","dateModified":"2026-11-03T12:50:17+00:00","description":"Free German A1 practice with mixed translations. Translate real sentences native speakers use and build confidence step by step.","breadcrumb":{"@id":"https:\/\/sofapiano.com\/a1-mixed-translations\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/sofapiano.com\/a1-mixed-translations\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/sofapiano.com\/a1-mixed-translations\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Start","item":"https:\/\/sofapiano.com\/"},{"@type":"ListItem","position":2,"name":"Mixed Translations"}]},{"@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\/82","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=82"}],"version-history":[{"count":44,"href":"https:\/\/sofapiano.com\/es\/wp-json\/wp\/v2\/pages\/82\/revisions"}],"predecessor-version":[{"id":19363,"href":"https:\/\/sofapiano.com\/es\/wp-json\/wp\/v2\/pages\/82\/revisions\/19363"}],"wp:attachment":[{"href":"https:\/\/sofapiano.com\/es\/wp-json\/wp\/v2\/media?parent=82"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}