PageSourceSearch

https://www.learngermanwithgames.com/_next/static/chunks/adf82cf12…?dpl=dpl_97SacGXgjPHTSufveZWxi1AXmb27

js learngermanwithgames.com collected 2026-10-06 13:19:35 UTC 85,481 bytes, 46 lines download raw bytes

1(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,16715,e=>{"use strict";let t=(0,e.i(475254).default)("RefreshCw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);e.s(["RefreshCw",()=>t],16715)},593780,e=>{"use strict";let t={blue:{text:"text-cat-blue-text dark:text-cat-blue-soft",tintBg:"bg-cat-blue-tint dark:bg-cat-blue/15",chipOn:"bg-cat-blue border-cat-blue text-white",gradient:"bg-gg-grad-blue",glow:"shadow-gg-glow-blue"},red:{text:"text-cat-red-text dark:text-cat-red-soft",tintBg:"bg-cat-red-tint dark:bg-cat-red/15",chipOn:"bg-cat-red border-cat-red text-white",gradient:"bg-gg-grad-red",glow:"shadow-gg-glow-red"},green:{text:"text-cat-green-text dark:text-cat-green-soft",tintBg:"bg-cat-green-tint dark:bg-cat-green/15",chipOn:"bg-cat-green border-cat-green text-white",gradient:"bg-gg-grad-green",glow:"shadow-gg-glow-green"},gold:{text:"text-cat-gold-text dark:text-cat-gold-soft",tintBg:"bg-cat-gold-tint dark:bg-cat-gold/15",chipOn:"bg-cat-gold border-cat-gold text-white",gradient:"bg-gg-grad-gold",glow:"shadow-gg-glow-gold"},purple:{text:"text-cat-purple-text dark:text-cat-purple-soft",tintBg:"bg-cat-purple-tint dark:bg-cat-purple/15",chipOn:"bg-cat-purple border-cat-purple text-white",gradient:"bg-gg-grad-purple",glow:"shadow-gg-glow-purple"}},r={nouns:"blue",verbs:"red",numbers:"green",adjectives:"gold"};function a(e){return 1===e.length?r[e[0]]:"purple"}function n(e){return t[a(e)]}let i={der:t.blue,die:t.red,das:t.green};function s(e){let[t,...r]=e.trim().split(" "),a=t?.toLowerCase();return r.length>0&&("der"===a||"die"===a||"das"===a)?{article:a,rest:r.join(" ")}:{article:null,rest:e}}e.s(["accentForCategories",()=>n,"accentKeyForCategories",()=>a,"accents",0,t,"articleAccent",0,i,"categoryAccentKey",0,r,"splitArticle",()=>s,"wordTypeAccentKey",0,{noun:"blue",verb:"red",adjective:"gold"}])},519406,e=>{"use strict";var t=e.i(843476),r=e.i(271645),a=e.i(16715),n=e.i(152236);function i({children:e,className:r,corner:i,hidden:s}){return(0,t.jsxs)("div",{className:(0,n.cn)("relative w-full h-full flex items-center justify-center overflow-hidden rounded-3xl border border-border shadow-widget",r),children:[(0,t.jsx)("div",{className:"p-6 text-center w-full max-h-full overflow-y-auto",inert:s,children:e}),(0,t.jsx)(a.RefreshCw,{"aria-hidden":"true",className:"absolute bottom-4 right-4 h-4 w-4 text-muted-foreground/60"}),i&&(0,t.jsx)("div",{className:"absolute right-3 top-3 z-10",inert:s,onClick:e=>e.stopPropagation(),children:i})]})}let s=(0,r.forwardRef)(({front:e,back:a,className:s,initialFlipped:l=!1,corner:o},d)=>{let[c,u]=(0,r.useState)(l),h=()=>{u(e=>!e)},m=e=>{u(e??l)};return(0,r.useImperativeHandle)(d,()=>({flip:h,reset:m})),(0,r.useEffect)(()=>{u(l)},[l]),(0,t.jsx)("div",{className:(0,n.cn)("perspective-1000 w-full max-w-md mx-auto",s),onClick:h,children:(0,t.jsxs)("div",{className:"relative w-full h-80 transition-transform duration-500 cursor-pointer",style:{transformStyle:"preserve-3d",transform:c?"rotateY(180deg)":"rotateY(0deg)"},children:[(0,t.jsx)("div",{className:"absolute inset-0 w-full h-full",style:{backfaceVisibility:"hidden",WebkitBackfaceVisibility:"hidden",transform:"rotateY(0deg)"},children:(0,t.jsx)(i,{className:"bg-card",corner:o,hidden:c,children:e})}),(0,t.jsx)("div",{className:"absolute inset-0 w-full h-full",style:{backfaceVisibility:"hidden",WebkitBackfaceVisibility:"hidden",transform:"rotateY(180deg)"},children:(0,t.jsx)(i,{className:"bg-sunk",corner:o,hidden:!c,children:a})})]})})});s.displayName="Flashcard",e.s(["default",0,s])},39312,e=>{"use strict";let t=(0,e.i(475254).default)("Zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]);e.s(["Zap",()=>t],39312)},526665,e=>{"use strict";var t=e.i(843476),r=e.i(958377),a=e.i(152236);function n({label:e,children:r}){return(0,t.jsxs)("div",{className:"flex flex-col items-center gap-0.5",children:[(0,t.jsx)("span",{className:"text-xs sm:text-sm font-medium text-muted-foreground",children:e}),r]})}function i({score:e,correctAnswers:i,totalAnswers:s,streak:l,timeLeft:o,timeLabel:d="Time",timeSuffix:c="s",timeWarningThreshold:u=10}){return(0,t.jsxs)("div",{className:(0,a.cn)("mb-3 sm:mb-4 grid divide-x divide-border text-center",null==o?"grid-cols-3":"grid-cols-4"),children:[(0,t.jsx)(n,{label:"Score",children:(0,t.jsx)("span",{className:"font-display text-lg sm:text-2xl font-bold text-primary",children:e})}),(0,t.jsx)(n,{label:"Correct",children:(0,t.jsxs)("span",{className:"font-display text-lg sm:text-2xl font-bold text-cat-green-text dark:text-cat-green-soft",children:[i,"/",s]})}),(0,t.jsx)(n,{label:(0,t.jsxs)("span",{className:"flex items-center gap-0.5 sm:gap-1",children:[(0,t.jsx)(r.Flame,{className:"h-3 w-3 sm:h-4 sm:w-4 text-cat-gold-text dark:text-cat-gold-soft"}),"Streak"]}),children:(0,t.jsx)("span",{className:"font-display text-lg sm:text-2xl font-bold text-primary",children:l})}),null!=o&&(0,t.jsx)(n,{label:d,children:(0,t.jsxs)("span",{className:(0,a.cn)("font-display text-lg sm:text-2xl font-bold",o<=u?"text-destructive animate-pulse":"text-primary"),children:[o,c]})})]})}e.s(["GameStats",()=>i])},207057,e=>{"use strict";var t=e.i(843476),r=e.i(271645),a=e.i(466691),n=e.i(526665);e.i(924856);var i=e.i(231286);let s=["3","2","1","Los!"],l=["1 or ←","2 or ↑","3 or →"];function o({picker:e,durationSeconds:o,endless:c=!1,config:u,metadata:h,tracking:m,onFinished:g,failPrefix:p,keyHints:f=l,arrowKeys:y=!0,endLabel:x="End Game Early",wordMotion:b="fall"}){var w;let k=c?31536e3:o,[v,j]=(0,r.useState)(()=>i.dropGame.service.createGameService().createInitialRuntime(u)),[S,N]=(0,r.useState)(0),[E,M]=(0,r.useState)(k),[C,T]=(0,r.useState)(null),[z,A]=(0,r.useState)("falling"),[W,_]=(0,r.useState)(!1),[I,R]=(0,r.useState)([]),[D,$]=(0,r.useState)(null),[P,L]=(0,r.useState)(!1),O
1=(0,r.useRef)(null),F=(0,r.useRef)(null),B=(0,r.useRef)([]),U=(0,r.useRef)(i.dropGame.service.createGameService({tracking:{onStart:()=>m?.onStart?.(),onEnd:async e=>{await m?.onEnd?.({session:e.session,metadata:e.metadata})}}})),G=(0,r.useRef)(v),H=(0,r.useRef)(!1),J=(0,r.useRef)("falling"),q=(0,r.useRef)(0),K=(0,r.useRef)(!1),V=(0,r.useRef)(i.dropGame.core.DEFAULT_CONFIG.baseFallMs),X=(0,r.useRef)(k),Y=(0,r.useRef)(0),Z=(0,r.useRef)(0),Q=(0,r.useRef)(50),ee=(0,r.useRef)(.32),et=(0,r.useRef)(null);(0,r.useEffect)(()=>{G.current=v},[v]);let er=(0,r.useCallback)(()=>Math.max((O.current?.clientHeight??400)-96,120),[]),ea=(0,r.useCallback)(()=>(O.current?.clientHeight??400)/2,[]),en=(0,r.useCallback)((e,t,r)=>{Z.current+=1;let a=Z.current;R(n=>[...n,{id:a,x:t,y:r,text:e}]),setTimeout(()=>{R(e=>e.filter(e=>e.id!==a))},900)},[]),ei=(0,r.useCallback)((e,t)=>{Z.current+=1,$({index:e,kind:t,id:Z.current}),setTimeout(()=>$(null),450)},[]),es=(0,r.useCallback)(e=>{let t=F.current,r=B.current[e],a=O.current;if(!t||!r||!a)return;let n=a.getBoundingClientRect(),i=r.getBoundingClientRect(),s=i.left+i.width/2-n.left,l=i.top+i.height/2-n.top,o=Q.current/100*n.width;t.style.transition="transform 0.32s cubic-bezier(0.45, 0, 0.85, 0.6), opacity 0.32s ease-in",t.style.transform=`translate(calc(-50% + ${s-o}px), ${l-30}px) scale(0.25)`,t.style.opacity="0"},[]),el=(0,r.useCallback)(()=>{let e=F.current,t=O.current;e&&t&&(e.style.transition="transform 0.4s cubic-bezier(0.55, 0, 1, 1)",e.style.transform=`translate(-50%, ${t.clientHeight+90}px)`)},[]),eo=(0,r.useCallback)(()=>{let e=F.current;e&&(e.style.transition="transform 0.25s ease-out, opacity 0.25s ease-out",e.style.transform=`translate(-50%, -50%) scale(${1.18*ee.current})`,e.style.opacity="0")},[]),ed=(0,r.useCallback)(()=>{let e=F.current;if(!e)return;let t=Math.max(ee.current,1.5);ee.current=t,e.style.transition="transform 0.16s ease-out",e.style.transform=`translate(-50%, -50%) scale(${t})`,e.style.opacity="1"},[]),ec=(0,r.useCallback)(()=>{let e=F.current;e&&(e.style.transition="transform 0.3s cubic-bezier(0.55, 0, 1, 1), opacity 0.3s ease-in",e.style.transform=`translate(-50%, -50%) scale(${Math.max(3*ee.current,6)})`,e.style.opacity="0")},[]),eu=(0,r.useCallback)(()=>{let e=G.current,t=e.flow.session.currentQuestion;if("playing"!==e.flow.phase||!t)return;V.current=i.dropGame.flow.speedState(e.flow,Date.now()).fallDurationMs,q.current=0,K.current=!1,J.current="falling",Y.current+=1;let r="approach"===b?50:22+56*Math.random();Q.current=r,ee.current=.32,et.current=null,_(!1),A("falling"),T({id:Y.current,question:t,x:r})},[b]),eh=(0,r.useCallback)(e=>{setTimeout(()=>{let e=G.current;H.current||"playing"!==e.flow.phase||i.dropGame.flow.isTimeUp(e.flow,Date.now())||eu()},e)},[eu]),em=(0,r.useCallback)(async()=>{if(H.current)return;let e=G.current;if("playing"!==e.flow.phase)return;H.current=!0;let t={...e,flow:i.dropGame.flow.endFlow(e.flow)};G.current=t,j(t),T(null),R([]);try{await U.current.end({runtime:e,metadata:h})}catch(e){console.error("Failed to end drop game:",e)}finally{H.current=!1,g(t.flow.session)}},[h,g]),eg=(0,r.useCallback)(t=>{if("falling"!==J.current||H.current)return;let r=G.current;if("playing"!==r.flow.phase)return;let a=r.flow.session.currentQuestion;if(!a)return;let n=null===t?null:a.options[t]?.id??null;if(null!==t&&null===n)return;let s=Math.min(q.current,1),{runtime:l,feedback:o}=U.current.resolve({runtime:r,picker:e,optionId:n,fallProgress:s});if(G.current=l,j(l),!o)return;let d=i.dropGame.flow.speedState(l.flow,Date.now());if(o.correct&&null!==t){J.current="correct",A("correct"),"approach"===b?(en(`+${o.points}`,50,ea()-46),eo()):(en(`+${o.points}`,Q.current,s*er()),es(t)),ei(t,"correct"),eh(d.correctGapMs);return}J.current=null!==t?"wrong":"missed",A(null!==t?"wrong":"missed"),null!==t&&ei(t,"wrong"),L(!0),setTimeout(()=>L(!1),450),"approach"===b?(ed(),setTimeout(ec,380)):setTimeout(el,280),eh(d.failGapMs)},[e,b,en,ei,es,eo,ed,ec,el,er,ea,eh]),ep=(0,r.useCallback)(async()=>{try{H.current=!1;let t=await U.current.start({picker:e,config:{...u,gameDurationMs:1e3*k},metadata:h});G.current=t,j(t),X.current=k,M(k),eu()}catch(e){console.error("Failed to start drop game:",e)}},[u,k,h,e,eu]),ef="config"===v.flow.phase;(0,r.useEffect)(()=>
1{if(!ef)return;if(S>=s.length)return void ep();let e=setTimeout(()=>N(e=>e+1),S===s.length-1?500:700);return()=>clearTimeout(e)},[ef,S,ep]),(0,r.useEffect)(()=>{let e;if("playing"!==v.flow.phase)return;let t=performance.now(),r=a=>{let n=Math.min(a-t,50);t=a;let s=G.current;if(!c){let e=i.dropGame.flow.timeLeftMs(s.flow,Date.now()),t=Math.ceil(e/1e3);if(t!==X.current&&(X.current=t,M(t)),e<=0)return void em()}if("falling"===J.current&&F.current){q.current+=n/V.current;let e=Math.min(q.current,1);if("approach"===b){var l;null===et.current&&(et.current=Math.min(Math.max(Math.min(.92*(O.current?.clientWidth??600)/Math.max(F.current.offsetWidth,1),2*ea()*.95/Math.max(F.current.offsetHeight,1)),1.4),2.8));let t=(l=et.current,1/(3.125+(1/l-3.125)*e));ee.current=t,F.current.style.transform=`translate(-50%, -50%) scale(${t})`,F.current.style.opacity=String(Math.min(e/.12,1))}else F.current.style.transform=`translate(-50%, ${e*er()}px)`;e>s.flow.config.dangerProgress&&!K.current&&(K.current=!0,_(!0)),e>=1&&eg(null)}e=requestAnimationFrame(r)};return e=requestAnimationFrame(r),()=>cancelAnimationFrame(e)},[v.flow.phase,b,c,em,er,ea,eg]),(0,r.useEffect)(()=>{if("playing"!==v.flow.phase)return;let e=e=>{var t;let r=(t=e.key,"1"===t||y&&"ArrowLeft"===t?0:"2"===t||y&&"ArrowUp"===t?1:"3"===t||y&&"ArrowRight"===t?2:null);null!==r&&(e.preventDefault(),eg(r))};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[v.flow.phase,y,eg]);let ey=v.flow.session,ex="wrong"===z||"missed"===z,eb=C?.question.options??null,ew=C?i.dropGame.core.correctOption(C.question).label:"";return(0,t.jsxs)("div",{className:"bg-card border border-border rounded-2xl p-4 sm:p-6 shadow-lg space-y-4",children:[(0,t.jsx)("style",{children:d}),(0,t.jsx)(n.GameStats,{score:ey.score,correctAnswers:ey.correctAnswers,totalAnswers:ey.answeredQuestions,streak:ey.streak,timeLeft:c?void 0:Math.max(E,0)}),(0,t.jsxs)("div",{className:`relative overflow-hidden rounded-xl border border-border bg-background h-[min(44vh,400px)] min-h-[300px] ${P?"dg-shake":""}`,ref:O,children:[!ef&&C&&(0,t.jsx)("div",{ref:F,className:"absolute z-10 will-change-transform",style:"approach"===b?{left:"50%",top:"50%",transform:"translate(-50%, -50%) scale(0.32)",opacity:0}
1:{left:`${C.x}%`,top:0,transform:"translate(-50%, -70px)"},children:(0,t.jsxs)("div",{className:`dg-pop-in rounded-xl border-2 bg-card px-5 py-3 text-center shadow-lg ${"correct"===z?"border-emerald-500":ex?"dg-shake border-red-500 bg-red-500/10":W?"dg-danger border-red-500":"border-border"}`,children:[(0,t.jsxs)("div",{className:`${(w=C.question.prompt.length)<=10?"text-2xl sm:text-3xl":w<=15?"text-xl sm:text-2xl":w<=20?"text-lg sm:text-xl":"text-base sm:text-lg"} font-bold whitespace-nowrap text-primary`,children:[ex&&p?p(C.question):null,C.question.prompt]}),ex&&!p?(0,t.jsx)("div",{className:"text-sm font-semibold text-emerald-600 dark:text-emerald-400",children:ew}):(0,t.jsx)("div",{className:"text-xs text-muted-foreground",children:C.question.hint})]})},C.id),I.map(e=>(0,t.jsx)("div",{className:"dg-float-up pointer-events-none absolute z-30 -translate-x-1/2 text-xl font-bold text-emerald-500",style:{left:`${e.x}%`,top:e.y},children:e.text},e.id)),ef&&S<s.length&&(0,t.jsx)("div",{className:"absolute inset-0 z-30 flex items-center justify-center",children:(0,t.jsx)("span",{className:"dg-countdown text-7xl font-extrabold text-primary",children:s[S]},S)})]}),(0,t.jsx)("div",{className:"grid grid-cols-3 gap-3",children:[0,1,2].map(e=>{var r;let n=eb?.[e]??null,i=D?.index===e?D:null;return(0,t.jsx)(a.Button,{ref:t=>{B.current[e]=t},onClick:()=>eg(e),size:"lg",variant:"outline",disabled:!n,className:`h-auto min-h-24 py-3 font-bold bg-card ${i?"correct"===i.kind?"dg-gate-pop ring-2 ring-emerald-400/70":"dg-shake ring-2 ring-red-400/70":""}`,children:(0,t.jsxs)("div",{className:"flex w-full min-w-0 flex-col items-center gap-2",children:[(0,t.jsx)("span",{className:"hidden text-xs font-normal text-muted-foreground sm:block",children:f[e]}),(0,t.jsx)("span",{className:`${(r=n?.label.length??3)<=8?"text-lg sm:text-xl md:text-2xl":r<=14?"text-base sm:text-lg":r<=20?"text-sm sm:text-base":"text-xs sm:text-sm"} max-w-full whitespace-normal break-words leading-tight`,children:n?.label??""})]})},e)})}),!ef&&(0,t.jsx)("div",{className:"flex justify-end",children:(0,t.jsx)(a.Button,{variant:"outline",onClick:em,children:x})})]})}let d=`
2@keyframes dg-pop-in {
3  0% { transform: scale(0.6); opacity: 0; }
4  70% { transform: scale(1.06); opacity: 1; }
5  100% { transform: scale(1); opacity: 1; }
6}
7.dg-pop-in { animation: dg-pop-in 0.25s ease-out; }
8
9@keyframes dg-shake {
10  0%, 100% { transform: translateX(0); }
11  20% { transform: translateX(-7px); }
12  40% { transform: translateX(6px); }
13  60% { transform: translateX(-4px); }
14  80% { transform: translateX(3px); }
15}
16.dg-shake { animation: dg-shake 0.4s ease-in-out; }
17
18@keyframes dg-float-up {
19  0% { transform: translate(-50%, 0) scale(0.8); opacity: 0; }
20  20% { transform: translate(-50%, -14px) scale(1.1); opacity: 1; }
21  100% { transform: translate(-50%, -60px) scale(1); opacity: 0; }
22}
23.dg-float-up { animation: dg-float-up 0.9s ease-out forwards; }
24
25@keyframes dg-danger {
26  0%, 100% { box-shadow: 0 0 0 0 rgba(239, 68, 68, 0.5); }
27  50% { box-shadow: 0 0 0 8px rgba(239, 68, 68, 0); }
28}
29.dg-danger { animation: dg-danger 0.5s ease-in-out infinite; }
30
31@keyframes dg-gate-pop {
32  0% { transform: scale(1); }
33  40% { transform: scale(1.08); }
34  100% { transform: scale(1); }
35}
36.dg-gate-pop { animation: dg-gate-pop 0.35s ease-out; }
37
38@keyframes dg-countdown {
39  0% { transform: scale(2.2); opacity: 0; }
40  40% { transform: scale(1); opacity: 1; }
41  100% { transform: scale(0.9); opacity: 0.9; }
42}
43.dg-countdown { animation: dg-countdown 0.65s ease-out; }
44`;e.s(["DropGamePlay",()=>o])},144823,e=>{"use strict";let t=(0,e.i(475254).default)("Delete",[["path",{d:"M10 5a2 2 0 0 0-1.344.519l-6.328 5.74a1 1 0 0 0 0 1.481l6.328 5.741A2 2 0 0 0 10 19h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2z",key:"1yo7s0"}],["path",{d:"m12 9 6 6",key:"anjzzh"}],["path",{d:"m18 9-6 6",key:"1fp51s"}]]);e.s(["Delete",()=>t],144823)},12150,e=>{"use strict";e.i(645266);var t=e.i(176100);e.s(["checkAnswer",()=>t.checkAnswer,"checkTimeAnswer",()=>t.checkTimeAnswer,"checkTimeShortFormAnswer",()=>t.checkTimeShortFormAnswer,"getGermanNumber",()=>t.getGermanNumber,"getGermanNumberSpellings",()=>t.getGermanNumberSpellings,"getGermanNumberWord",()=>t.getGermanNumberWord,"getGermanTime",()=>t.getGermanTime,"getGermanTimeShortForm",()=>t.getGermanTimeShortForm,"getGermanWord",()=>t.getGermanWord,"getGermanWordTileGroups",()=>t.getGermanWordTileGroups,"getRandomNumber",()=>t.getRandomNumber],867822);var r=e.i(867822);e.s(["germanNumbers",0,r],12150)},382373,e=>{"use strict";let t=(0,e.i(475254).default)("Volume2",[["path",{d:"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z",key:"uqj9uw"}],["path",{d:"M16 9a5 5 0 0 1 0 6",key:"1q6k2b"}],["path",{d:"M19.364 18.364a9 9 0 0 0 0-12.728",key:"ijwkga"}]]);e.s(["Volume2",()=>t],382373)},662349,e=>{"use strict";var t=e.i(843476),r=e.i(522016),a=e.i(593780),n=e.i(647580);let i=e=>e in a.accents?a.accents[e]:n.sections[e];function s({children:e,className:r=""}){return(0,t.jsx)("div",{className:`not-prose my-6 rounded-3xl border border-border bg-card p-5 sm:p-7 shadow-widget ${r}`,children:e})}function l({accent:e,children:r="Quick practice"}){return(0,t.jsx)("span",{className:`font-display text-gg-eyebrow font-bold uppercase ${i(e).text}`,children:r})}function o({accent:e,label:r="Quick practice",progress:a}){return(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsx)(l,{accent:e,children:r}),a&&(0,t.jsx)("span",{className:"rounded-full bg-muted px-2.5 py-1 text-xs font-semibold text-muted-foreground",children:a})]})}function d(){return(0,t.jsx)(s,{children:(0,t.jsx)("div",{className:"py-4 text-center text-sm text-muted-foreground",children:"Loading quick practice…"})})}function c({href:e,accent:a,children:n,className:s=""}){let l=i(a);return(0,t.jsx)(r.default,{href:e,className:`inline-flex items-center justify-center rounded-2xl px-5 py-3 font-display text-gg-btn font-bold tracking-tight text-white transition-transform hover:-translate-y-0.5 active:scale-[0.97] ${l.gradient} ${l.glow} ${s}`,children:n})}function u({onClick:e,disabled:r,accent:a,children:n,className:s=""}){let l=i(a);return(0,t.jsx)("button",{type:"button",onClick:e,disabled:r,className:`inline-flex items-center justify-center rounded-2xl px-5 py-3 font-display text-gg-btn font-bold tracking-tight text-white transition-transform enabled:hover:-translate-y-0.5 enabled:active:scale-[0.97] disabled:opacity-50 disabled:cursor-default ${l.gradient} ${l.glow} ${s}`,children:n})}function h({onClick:e,disabled:r,children:a,className:n=""}){return(0,t.jsx)("button",{type:"button",onClick:e,disabled:r,className:`inline-flex items-center justify-center rounded-2xl border border-input bg-card px-5 py-3 font-display text-gg-btn font-bold tracking-tight text-foreground transition-all enabled:hover:-translate-y-0.5 enabled:hover:shadow-card-hover enabled:active:scale-[0.97] disabled:opacity-50 disabled:cursor-default ${n}`,children:a})}function m({accent:e,score:r,total:a,unit:n="correct",children:i,onReplay:o,replayLabel:d="Try another set",fullGameHref:u,fullGameLabel:m="Play the full game"}){return(0,t.jsx)(s,{children:(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsxs)("div",{className:"text-center",children:[(0,t.jsx)(l,{accent:e}),(0,t.jsxs)("div",{className:"mt-1 font-display text-3xl font-extrabold tracking-tight",children:[r," / ",a," ",(0,t.jsx)("span",{className:"text-xl",children:n})]})]}),i,(0,t.jsxs)("div",{className:"flex flex-col sm:flex-row gap-2 pt-2",children:[(0,t.jsx)(h,{onClick:o,className:"flex-1",children:d}),(0,t.jsx)(c,{href:u,accent:e,className:"flex-1",children:m})]})]})})}function g(e){return null==e?"text-muted-foreground":e?"text-cat-green-text dark:text-cat-green-soft":"text-cat-red-text dark:text-cat-red-soft"}function p({correct:e}
44){return(0,t.jsx)("span",{"aria-hidden":!0,className:`font-bold ${g(e)}`,children:e?"✓":"✗"})}function f(e){let t="rounded-2xl border font-display font-bold transition-all active:scale-95 disabled:cursor-default";switch(e){case"correct":return`${t} ${a.accents.green.chipOn} ${a.accents.green.glow}`;case"wrong":return`${t} border-cat-red bg-cat-red-tint text-cat-red-text dark:bg-cat-red/15 dark:text-cat-red-soft`;case"picked":return`${t} bg-ink border-ink text-[#FBF8F2] dark:bg-[#FBF8F2] dark:border-[#FBF8F2] dark:text-ink`;case"dimmed":return`${t} border-input bg-card text-foreground opacity-50`;default:return`${t} border-input bg-card text-foreground hover:-translate-y-0.5 hover:shadow-card-hover`}}e.s(["EmbedActionButton",()=>u,"EmbedCard",()=>s,"EmbedCtaLink",()=>c,"EmbedEyebrow",()=>l,"EmbedGhostButton",()=>h,"EmbedHeader",()=>o,"EmbedLoading",()=>d,"EmbedResults",()=>m,"ResultMark",()=>p,"feedbackTextClass",()=>g,"optionButtonClass",()=>f])},898879,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"default",{enumerable:!0,get:function(){return l}});let a=e.r(271645),n="u"<typeof window,i=n?()=>{}:a.useLayoutEffect,s=n?()=>{}:a.useEffect;function l(e){let{headManager:t,reduceComponentsToState:r}=e;function l(){if(t&&t.mountedInstances){let e=a.Children.toArray(Array.from(t.mountedInstances).filter(Boolean));t.updateHead(r(e))}}return n&&(t?.mountedInstances?.add(e.children),l()),i(()=>(t?.mountedInstances?.add(e.children),()=>{t?.mountedInstances?.delete(e.children)})),i(()=>(t&&(t._pendingUpdate=l),()=>{t&&(t._pendingUpdate=l)})),s(()=>(t&&t._pendingUpdate&&(t._pendingUpdate(),t._pendingUpdate=null),()=>{t&&t._pendingUpdate&&(t._pendingUpdate(),t._pendingUpdate=null)})),null}},325633,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var a={default:function(){return p},defaultHead:function(){return u}};for(var n in a)Object.defineProperty(r,n,{enumerable:!0,get:a[n]});let i=e.r(555682),s=e.r(190809),l=e.r(843476),o=s._(e.r(271645)),d=i._(e.r(898879)),c=e.r(742732);function u(){return[(0,l.jsx)("meta",{charSet:"utf-8"},"charset"),(0,l.jsx)("meta",{name:"viewport",content:"width=device-width"},"viewport")]}function h(e,t){return"string"==typeof t||"number"==typeof t?e:t.type===o.default.Fragment?e.concat(o.default.Children.toArray(t.props.children).reduce((e,t)=>"string"==typeof t||"number"==typeof t?e:e.concat(t),[])):e.concat(t)}e.r(233525);let m=["name","httpEquiv","charSet","itemProp"];function g(e){let t,r,a,n;return e.reduce(h,[]).reverse().concat(u().reverse()).filter((t=new Set,r=new Set,a=new Set,n={},e=>{let i=!0,s=!1;if(e.key&&"number"!=typeof e.key&&e.key.indexOf("$")>0){s=!0;let r=e.key.slice(e.key.indexOf("$")+1);t.has(r)?i=!1:t.add(r)}switch(e.type){case"title":case"base":r.has(e.type)?i=!1:r.add(e.type);break;case"meta":for(let t=0,r=m.length;t<r;t++){let r=m[t];if(e.props.hasOwnProperty(r))if("charSet"===r)a.has(r)?i=!1:a.add(r);else{let t=e.props[r],a=n[r]||new Set;("name"!==r||!s)&&a.has(t)?i=!1:(a.add(t),n[r]=a)}}}return i})).reverse().map((e,t)=>{let r=e.key||t;return o.default.cloneElement(e,{key:r})})}let p=function({children:e}){let t=(0,o.useContext)(c.HeadManagerContext);return(0,l.jsx)(d.default,{reduceComponentsToState:g,headManager:t,children:e})};("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},488143,(e,t,r)=>{"use strict";function a({widthInt:e,heightInt:t,blurWidth:r,blurHeight:a,blurDataURL:n,objectFit:i}){let s=r?40*r:e,l=a?40*a:t,o=s&&l?`viewBox='0 0 ${s} ${l}'`:"";return`%3Csvg xmlns='http://www.w3.org/2000/svg' ${o}%3E%3Cfilter id='b' color-interpolation-filters='sRGB'%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3CfeColorMatrix values='1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 100 -1' result='s'/%3E%3CfeFlood x='0' y='0' width='100%25' height='100%25'/%3E%3CfeComposite operator='out' in='s'/%3E%3CfeComposite in2='SourceGraphic'/%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3C/filter%3E%3Cimage width='100%25' height='100%25' x='0' y='0' preserveAspectRatio='${o?"none":"contain"===i?"xMidYMid":"cover"===i?"xMidYMid slice":"none"}' style='filter: url(%23b);' href='${n}'/%3E%3C/svg%3E`}
44Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"getImageBlurSvg",{enumerable:!0,get:function(){return a}})},987690,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var a={VALID_LOADERS:function(){return i},imageConfigDefault:function(){return s}};for(var n in a)Object.defineProperty(r,n,{enumerable:!0,get:a[n]});let i=["default","imgix","cloudinary","akamai","custom"],s={deviceSizes:[640,750,828,1080,1200,1920,2048,3840],imageSizes:[32,48,64,96,128,256,384],path:"/_next/image",loader:"default",loaderFile:"",domains:[],disableStaticImages:!1,minimumCacheTTL:14400,formats:["image/webp"],maximumRedirects:3,maximumResponseBody:5e7,dangerouslyAllowLocalIP:!1,dangerouslyAllowSVG:!1,contentSecurityPolicy:"script-src 'none'; frame-src 'none'; sandbox;",contentDispositionType:"attachment",localPatterns:void 0,remotePatterns:[],qualities:[75],unoptimized:!1}},908927,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"getImgProps",{enumerable:!0,get:function(){return d}}),e.r(233525);let a=e.r(543369),n=e.r(488143),i=e.r(987690),s=["-moz-initial","fill","none","scale-down",void 0];function l(e){return void 0!==e.default}function o(e){return void 0===e?e:"number"==typeof e?Number.isFinite(e)?e:NaN:"string"==typeof e&&/^[0-9]+$/.test(e)?parseInt(e,10):NaN}function d({src:e,sizes:t,unoptimized:r=!1,priority:d=!1,preload:c=!1,loading:u,className:h,quality:m,width:g,height:p,fill:f=!1,style:y,overrideSrc:x,onLoad:b,onLoadingComplete:w,placeholder:k="empty",blurDataURL:v,fetchPriority:j,decoding:S="async",layout:N,objectFit:E,objectPosition:M,lazyBoundary:C,lazyRoot:T,...z},A){var W;let _,I,R,{imgConf:D,showAltText:$,blurComplete:P,defaultLoader:L}=A,O=D||i.imageConfigDefault;if("allSizes"in O)_=O;else{let e=[...O.deviceSizes,...O.imageSizes].sort((e,t)=>e-t),t=O.deviceSizes.sort((e,t)=>e-t),r=O.qualities?.sort((e,t)=>e-t);_={...O,allSizes:e,deviceSizes:t,qualities:r}}if(void 0===L)throw Object.defineProperty(Error("images.loaderFile detected but the file is missing default export.\nRead more: https://nextjs.org/docs/messages/invalid-images-config"),"__NEXT_ERROR_CODE",{value:"E163",enumerable:!1,configurable:!0});let F=z.loader||L;delete z.loader,delete z.srcSet;let B="__next_img_default"in F;if(B){if("custom"===_.loader)throw Object.defineProperty(Error(`Image with src "${e}" is missing "loader" prop.
45Read more: https://nextjs.org/docs/messages/next-image-missing-loader`),"__NEXT_ERROR_CODE",{value:"E252",enumerable:!1,configurable:!0})}else{let e=F;F=t=>{let{config:r,...a}=t;return e(a)}}if(N){"fill"===N&&(f=!0);let e={intrinsic:{maxWidth:"100%",height:"auto"},responsive:{width:"100%",height:"auto"}}[N];e&&(y={...y,...e});let r={responsive:"100vw",fill:"100vw"}[N];r&&!t&&(t=r)}let U="",G=o(g),H=o(p);if((W=e)&&"object"==typeof W&&(l(W)||void 0!==W.src)){let t=l(e)?e.default:e;if(!t.src)throw Object.defineProperty(Error(`An object should only be passed to the image component src parameter if it comes from a static image import. It must include src. Received ${JSON.stringify(t)}`),"__NEXT_ERROR_CODE",{value:"E460",enumerable:!1,configurable:!0});if(!t.height||!t.width)throw Object.defineProperty(Error(`An object should only be passed to the image component src parameter if it comes from a static image import. It must include height and width. Received ${JSON.stringify(t)}`),"__NEXT_ERROR_CODE",{value:"E48",enumerable:!1,configurable:!0});if(I=t.blurWidth,R=t.blurHeight,v=v||t.blurDataURL,U=t.src,!f)if(G||H){if(G&&!H){let e=G/t.width;H=Math.round(t.height*e)}else if(!G&&H){let e=H/t.height;G=Math.round(t.width*e)}}else G=t.width,H=t.height}let J=!d&&!c&&("lazy"===u||void 0===u);(!(e="string"==typeof e?e:U)||e.startsWith("data:")||e.startsWith("blob:"))&&(r=!0,J=!1),_.unoptimized&&(r=!0),B&&!_.dangerouslyAllowSVG&&e.split("?",1)[0].endsWith(".svg")&&(r=!0);let q=o(m),K=Object.assign(f?{position:"absolute",height:"100%",width:"100%",left:0,top:0,right:0,bottom:0,objectFit:E,objectPosition:M}:{},$?{}:{color:"transparent"},y),V=P||"empty"===k?null:"blur"===k?`url("data:image/svg+xml;charset=utf-8,${(0,n.getImageBlurSvg)({widthInt:G,heightInt:H,blurWidth:I,blurHeight:R,blurDataURL:v||"",objectFit:K.objectFit})}")`:`url("${k}")`,X=s.includes(K.objectFit)?"fill"===K.objectFit?"100% 100%":"cover":K.objectFit,Y=V?{backgroundSize:X,backgroundPosition:K.objectPosition||"50% 50%",backgroundRepeat:"no-repeat",backgroundImage:V}:{},Z=function({config:e,src:t,unoptimized:r,width:n,quality:i,sizes:s,loader:l}){if(r){let e=(0,a.getDeploymentId)();if(t.startsWith("/")&&!t.startsWith("//")&&e){let r=t.includes("?")?"&":"?";t=`${t}${r}dpl=${e}`}return{src:t,srcSet:void 0,sizes:void 0}}let{widths:o,kind:d}=function({deviceSizes:e,allSizes:t},r,a){if(a){let r=/(^|\s)(1?\d?\d)vw/g,n=[];for(let e;e=r.exec(a);)n.push(parseInt(e[2]));if(n.length){let r=.01*Math.min(...n);return{widths:t.filter(t=>t>=e[0]*r),kind:"w"}}return{widths:t,kind:"w"}}return"number"!=typeof r?{widths:e,kind:"w"}:{widths:[...new Set([r,2*r].map(e=>t.find(t=>t>=e)||t[t.length-1]))],kind:"x"}}(e,n,s),c=o.length-1;return{sizes:s||"w"!==d?s:"100vw",srcSet:o.map((r,a)=>`${l({config:e,src:t,quality:i,width:r})} ${"w"===d?r:a+1}${d}`).join(", "),src:l({config:e,src:t,quality:i,width:o[c]})}}({config:_,src:e,unoptimized:r,width:G,quality:q,sizes:t,loader:F}),Q=J?"lazy":u;return{props:{...z,loading:Q,fetchPriority:j,width:G,height:H,decoding:S,className:h,style:{...K,...Y},sizes:Z.sizes,srcSet:Z.srcSet,src:x||Z.src},meta:{unoptimized:r,preload:c||d,placeholder:k,fill:f}}}},918556,(e,t,r)=>{"use strict";
45Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"ImageConfigContext",{enumerable:!0,get:function(){return i}});let a=e.r(555682)._(e.r(271645)),n=e.r(987690),i=a.default.createContext(n.imageConfigDefault)},65856,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"RouterContext",{enumerable:!0,get:function(){return a}});let a=e.r(555682)._(e.r(271645)).default.createContext(null)},670965,(e,t,r)=>{"use strict";function a(e,t){let r=e||75;return t?.qualities?.length?t.qualities.reduce((e,t)=>Math.abs(t-r)<Math.abs(e-r)?t:e,0):r}Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"findClosestQuality",{enumerable:!0,get:function(){return a}})},1948,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"default",{enumerable:!0,get:function(){return s}});let a=e.r(670965),n=e.r(543369);function i({config:e,src:t,width:r,quality:i}){if(t.startsWith("/")&&t.includes("?")&&e.localPatterns?.length===1&&"**"===e.localPatterns[0].pathname&&""===e.localPatterns[0].search)throw Object.defineProperty(Error(`Image with src "${t}" is using a query string which is not configured in images.localPatterns.
46Read more: https://nextjs.org/docs/messages/next-image-unconfigured-localpatterns`),"__NEXT_ERROR_CODE",{value:"E871",enumerable:!1,configurable:!0});let s=(0,a.findClosestQuality)(i,e),l=(0,n.getDeploymentId)();return`${e.path}?url=${encodeURIComponent(t)}&w=${r}&q=${s}${t.startsWith("/")&&l?`&dpl=${l}`:""}`}i.__next_img_default=!0;let s=i},605500,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"Image",{enumerable:!0,get:function(){return w}});let a=e.r(555682),n=e.r(190809),i=e.r(843476),s=n._(e.r(271645)),l=a._(e.r(174080)),o=a._(e.r(325633)),d=e.r(908927),c=e.r(987690),u=e.r(918556);e.r(233525);let h=e.r(65856),m=a._(e.r(1948)),g=e.r(818581),p={deviceSizes:[640,750,828,1080,1200,1920,2048,3840],imageSizes:[32,48,64,96,128,256,384],qualities:[75],path:"/_next/image",loader:"default",dangerouslyAllowSVG:!1,unoptimized:!1};function f(e,t,r,a,n,i,s){let l=e?.src;e&&e["data-loaded-src"]!==l&&(e["data-loaded-src"]=l,("decode"in e?e.decode():Promise.resolve()).catch(()=>{}).then(()=>{if(e.parentElement&&e.isConnected){if("empty"!==t&&n(!0),r?.current){let t=new Event("load");Object.defineProperty(t,"target",{writable:!1,value:e});let a=!1,n=!1;r.current({...t,nativeEvent:t,currentTarget:e,target:e,isDefaultPrevented:()=>a,isPropagationStopped:()=>n,persist:()=>{},preventDefault:()=>{a=!0,t.preventDefault()},stopPropagation:()=>{n=!0,t.stopPropagation()}})}a?.current&&a.current(e)}}))}function y(e){return s.use?{fetchPriority:e}:{fetchpriority:e}}"u"<typeof window&&(globalThis.__NEXT_IMAGE_IMPORTED=!0);let x=(0,s.forwardRef)(({src:e,srcSet:t,sizes:r,height:a,width:n,decoding:l,className:o,style:d,fetchPriority:c,placeholder:u,loading:h,unoptimized:m,fill:p,onLoadRef:x,onLoadingCompleteRef:b,setBlurComplete:w,setShowAltText:k,sizesInput:v,onLoad:j,onError:S,...N},E)=>{let M=(0,s.useCallback)(e=>{e&&(S&&(e.src=e.src),e.complete&&f(e,u,x,b,w,m,v))},[e,u,x,b,w,S,m,v]),C=(0,g.useMergedRef)(E,M);return(0,i.jsx)("img",{...N,...y(c),loading:h,width:n,height:a,decoding:l,"data-nimg":p?"fill":"1",className:o,style:d,sizes:r,srcSet:t,src:e,ref:C,onLoad:e=>{f(e.currentTarget,u,x,b,w,m,v)},onError:e=>{k(!0),"empty"!==u&&w(!0),S&&S(e)}})});function b({isAppRouter:e,imgAttributes:t}){let r={as:"image",imageSrcSet:t.srcSet,imageSizes:t.sizes,crossOrigin:t.crossOrigin,referrerPolicy:t.referrerPolicy,...y(t.fetchPriority)};return e&&l.default.preload?(l.default.preload(t.src,r),null):(0,i.jsx)(o.default,{children:(0,i.jsx)("link",{rel:"preload",href:t.srcSet?void 0:t.src,...r},"__nimg-"+t.src+t.srcSet+t.sizes)})}let w=(0,s.forwardRef)((e,t)=>{let r=(0,s.useContext)(h.RouterContext),a=(0,s.useContext)(u.ImageConfigContext),n=(0,s.useMemo)(()=>{let e=p||a||c.imageConfigDefault,t=[...e.deviceSizes,...e.imageSizes].sort((e,t)=>e-t),r=e.deviceSizes.sort((e,t)=>e-t),n=e.qualities?.sort((e,t)=>
46e-t);return{...e,allSizes:t,deviceSizes:r,qualities:n,localPatterns:"u"<typeof window?a?.localPatterns:e.localPatterns}},[a]),{onLoad:l,onLoadingComplete:o}=e,g=(0,s.useRef)(l);(0,s.useEffect)(()=>{g.current=l},[l]);let f=(0,s.useRef)(o);(0,s.useEffect)(()=>{f.current=o},[o]);let[y,w]=(0,s.useState)(!1),[k,v]=(0,s.useState)(!1),{props:j,meta:S}=(0,d.getImgProps)(e,{defaultLoader:m.default,imgConf:n,blurComplete:y,showAltText:k});return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(x,{...j,unoptimized:S.unoptimized,placeholder:S.placeholder,fill:S.fill,onLoadRef:g,onLoadingCompleteRef:f,setBlurComplete:w,setShowAltText:v,sizesInput:e.sizes,ref:t}),S.preload?(0,i.jsx)(b,{isAppRouter:!r,imgAttributes:j}):null]})});("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},383900,e=>{"use strict";var t=e.i(843476),r=e.i(271645),a=e.i(382373);let n=null;function i({src:e,label:i,size:s="md"}){let[l,o]=(0,r.useState)(!1),d=(0,r.useCallback)(()=>{n?.pause();let t=new Audio(e);n=t,t.onplay=()=>o(!0),t.onended=()=>o(!1),t.onpause=()=>o(!1),t.onerror=()=>o(!1),t.play().catch(()=>o(!1))},[e]);return(0,t.jsx)("button",{type:"button",onClick:d,"aria-label":`Play ${i}`,className:`flex ${"sm"===s?"h-7 w-7":"h-9 w-9"} shrink-0 items-center justify-center rounded-full bg-cat-green-tint text-cat-green-text dark:bg-cat-green/15 dark:text-cat-green-soft transition-transform hover:-translate-y-0.5 active:scale-95 ${l?"ring-2 ring-current":""}`,children:(0,t.jsx)(a.Volume2,{className:"sm"===s?"h-3.5 w-3.5":"h-4 w-4"})})}e.s(["NumberPlayButton",()=>i])},517608,e=>{"use strict";var t=e.i(843476),r=e.i(271645);e.i(477527);var a=e.i(639802);e.i(41104);var n=e.i(358317),i=e.i(152236),s=e.i(593780),l=e.i(662349);function o({rounds:e=5}){let{nouns:o,isLoading:d}=(0,n.useGameWords)("__all__"),[c,u]=(0,r.useState)(null),[h,m]=(0,r.useState)(0),[g,p]=(0,r.useState)([]),[f,y]=(0,r.useState)(null);if((0,r.useEffect)(()=>{c||o&&0!==o.length&&u((0,i.shuffleArray)(o).slice(0,e))},[o,e,c]),d||!c||0===c.length)return(0,t.jsx)(l.EmbedLoading,{});let x=h>=c.length,b=x?null:c[h],w=b?(0,a.extractArtikel)(b.singular):"der",k=b?(0,a.extractNounWithoutArticle)(b.singular):"";if(x){let r=g.filter(e=>e.correct).length;return(0,t.jsx)(l.EmbedResults,{accent:"blue",score:r,total:g.length,onReplay:()=>{o&&0!==o.length&&(u((0,i.shuffleArray)(o).slice(0,e)),m(0),p([]),y(null))},fullGameHref:"/games/guess-german-artikel-game",children:(0,t.jsx)("ul",{className:"space-y-1 text-sm",children:g.map((e,r)=>(0,t.jsxs)("li",{className:"flex items-center justify-between gap-3",children:[(0,t.jsxs)("span",{className:"font-semibold",children:[e.correctArticle," ",e.word]}),(0,t.jsx)("span",{className:"text-muted-foreground flex-1 truncate",children:e.english}),(0,t.jsx)(l.ResultMark,{correct:e.correct})]},r))})})}let v=g[g.length-1]?.userAnswer;return(0,t.jsx)(l.EmbedCard,{children:(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsx)(l.EmbedHeader,{accent:"blue",progress:`${h+1} / ${c.length}`}),(0,t.jsxs)("div",{className:"text-center py-2",children:[(0,t.jsx)("div",{className:"font-display text-4xl sm:text-5xl font-extrabold tracking-tight text-foreground min-h-[1.2em]",children:k}),(0,t.jsx)("div",{className:`text-sm mt-2 min-h-[1.2em] ${(0,l.feedbackTextClass)(f?f.correct:null)}`,children:f?f.correct?"Richtig!":`Correct article: ${f.article}`:"Choose the correct article"})]}),(0,t.jsx)("div",{className:"grid grid-cols-3 gap-2.5",children:a.GERMAN_ARTIKELS.map(e=>{let r=s.articleAccent[e],a=null!==f,n=a&&e===f.article,i=a&&!f.correct&&e===v;return(0,t.jsx)("button",{type:"button",disabled:a,onClick:()=>(e=>{if(!b||f)return;let t=e===w;y({correct:t,article:w}),p(r=>[...r,{word:k,english:b.english,correctArticle:w,userAnswer:e,correct:t}]),setTimeout(()=>{y(null),m(e=>e+1)},900)})(e),className:`h-16 rounded-2xl border px-3 font-display text-xl font-bold transition-all active:scale-95 disabled:cursor-default ${n?`${r.chipOn} ${r.glow}`:i?"border-cat-red bg-cat-red-tint text-cat-red-text dark:bg-cat-red/15 dark:text-cat-red-soft":`border-input bg-card ${r.text} ${a?"opacity-50":"hover:-translate-y-0.5 hover:shadow-card-hover"}`}`,children:e},e)})})]})})}e.s(["ArticleGameEmbed",()=>o])},401015,e=>{"use strict";let t=new Map([{id:"city-or-country-no-article",label:"City name / country without article",examples:"Berlin, Spanien",wohin:"nach",wo:"in",woher:"aus"},{id:"country-or-building",label:"Country with article, room, building, forest, park, mountains",examples:"die Schweiz, der Wald, das Zimmer, die Berge",wohin:"in",wo:"in",woher:"aus"},{id:"shop",label:"Shop (Geschäft)",examples:"die Apotheke, der Supermarkt",wohin:"zu",wo:"in",woher:"aus"},{id:"place-mountain-island",label:"Square, mountain, island",examples:"der Platz, die Insel",wohin:"auf",wo:"auf",woher:"von"},{id:"water",label:"Sea, river, lake",examples:"das Meer, der See",wohin:"an",wo:"an",woher:"von"},{id:"person-company-activity",label:"Person, company, activity",examples:"Tom, die Arbeit",wohin:"zu",wo:"bei",woher:"von"},{id:"station-airport",label:"Station, airport",examples:"der Bahnhof, der Flughafen",wohin:"zu",wo:"an",woher:"von"},{id:"hause",label:'"Hause" (home) — fixed expressions',examples:"nach Hause, zu Hause, von zu Hause",wohin:"nach",wo:"zu",woher:"von zu"}].map(e=>[e.id,e]));function r(e){let r=t.get(e);if(!r)throw Error(`Unknown category: ${e}`);return r}let a="Ich gehe",n="Ich bin",i="Ich komme";function s(e,t,r,s,l){return{id:e,category:t,display:r,english:s,sentences:{wohin:{prefix:a,prep:l.wohin,article:null,noun:r},wo:{prefix:n,prep:l.wo,article:null,noun:r},woher:{prefix:i,prep:l.woher,article:null,noun:r}}}}function l(e,t,r,s,l,o){let d="der"===l||"das"===l?"dem":"der";return{id:e,category:t,display:r,english:s,sentences:{wohin:{prefix:a,prep:"in",article:"der"===l?"den":"die"===l?"die":"das",noun:o},wo:{prefix:n,prep:"in",article:d,noun:o},woher:{prefix:i,prep:"aus",article:d,noun:o}}}}function o(e,t,r,s,l){let o="der"===s||"das"===s?"dem":"der";return{id:e,category:"shop",display:t,english:r,sentences:{wohin:{prefix:a,prep:"zu",article:o,noun:l},wo:{prefix:n,prep:"in",article:o,noun:l},woher:{prefix:i,prep:"aus",article:o,noun:l}}}}function d(e,t,r,s,l){let o="der"===s||"das"===s?"dem":"der";return{id:e,category:"place-mountain-island",display:t,english:r,sentences:{wohin:{prefix:a,prep:"auf",article:"der"===s?"den":"die"===s?"die":"das",noun:l},wo:{prefix:n,prep:"auf",article:o,noun:l},woher:{prefix:i,prep:"von",article:o,noun:l}}}}function c(e,t,r,s,l){let o="der"===s||"das"===s?"dem":"der";return{id:e,category:"water",display:t,english:r,sentences:{wohin:{prefix:a,prep:"an",article:"der"===s?"den":"die"===s?"die":"das",noun:l},wo:{prefix:n,prep:"an",article:o,noun:l},woher:{prefix:i,prep:"von",article:o,noun:l}}}}function u(e,t,r,s){return{id:e,category:"person-company-activity",display:t,english:r,sentences:{wohin:{prefix:a,prep:"zu",article:null,noun:s},wo:{prefix:n,prep:"bei",article:null,noun:s},woher:{prefix:i,prep:"von",article:null,noun:s}}}}function h(e,t,r,s,l){let o="der"===s||"das"===s?"dem":"der";return{id:e,category:"person-company-activity",display:t,english:r,sentences:{wohin:{prefix:a,prep:"zu",article:o,noun:l},wo:{prefix:n,prep:"bei",article:o,noun:l},woher:{prefix:i,prep:"von",article:o,noun:l}}}}
46function m(e,t,r,s){return{id:e,category:"station-airport",display:t,english:r,sentences:{wohin:{prefix:a,prep:"zu",article:"dem",noun:s},wo:{prefix:n,prep:"an",article:"dem",noun:s},woher:{prefix:i,prep:"von",article:"dem",noun:s}}}}let g=[s("berlin","city-or-country-no-article","Berlin","Berlin",{wohin:"nach",wo:"in",woher:"aus"}),s("muenchen","city-or-country-no-article","München","Munich",{wohin:"nach",wo:"in",woher:"aus"}),s("hamburg","city-or-country-no-article","Hamburg","Hamburg",{wohin:"nach",wo:"in",woher:"aus"}),s("paris","city-or-country-no-article","Paris","Paris",{wohin:"nach",wo:"in",woher:"aus"}),s("london","city-or-country-no-article","London","London",{wohin:"nach",wo:"in",woher:"aus"}),s("spanien","city-or-country-no-article","Spanien","Spain",{wohin:"nach",wo:"in",woher:"aus"}),s("italien","city-or-country-no-article","Italien","Italy",{wohin:"nach",wo:"in",woher:"aus"}),s("deutschland","city-or-country-no-article","Deutschland","Germany",{wohin:"nach",wo:"in",woher:"aus"}),s("frankreich","city-or-country-no-article","Frankreich","France",{wohin:"nach",wo:"in",woher:"aus"}),s("japan","city-or-country-no-article","Japan","Japan",{wohin:"nach",wo:"in",woher:"aus"}),s("oesterreich","city-or-country-no-article","Österreich","Austria",{wohin:"nach",wo:"in",woher:"aus"}),l("schweiz","country-or-building","die Schweiz","Switzerland","die","Schweiz"),l("tuerkei","country-or-building","die Türkei","Turkey","die","Türkei"),l("ukraine","country-or-building","die Ukraine","Ukraine","die","Ukraine"),l("iran","country-or-building","der Iran","Iran","der","Iran"),l("wald","country-or-building","der Wald","forest","der","Wald"),l("park","country-or-building","der Park","park","der","Park"),l("garten","country-or-building","der Garten","garden","der","Garten"),l("zimmer","country-or-building","das Zimmer","room","das","Zimmer"),l("kueche","country-or-building","die Küche","kitchen","die","Küche"),l("hotel","country-or-building","das Hotel","hotel","das","Hotel"),{id:"berge",category:"country-or-building",display:"die Berge",english:"the mountains",sentences:{wohin:{prefix:a,prep:"in",article:"die",noun:"Berge"},wo:{prefix:n,prep:"in",article:"den",noun:"Bergen"},woher:{prefix:i,prep:"aus",article:"den",noun:"Bergen"}}},o("apotheke","die Apotheke","pharmacy","die","Apotheke"),o("supermarkt","der Supermarkt","supermarket","der","Supermarkt"),o("baeckerei","die Bäckerei","bakery","die","Bäckerei"),o("cafe","das Café","café","das","Café"),o("bank","die Bank","bank","die","Bank"),o("restaurant","das Restaurant","restaurant","das","Restaurant"),d("platz","der Platz","square","der","Platz"),d("berg","der Berg","mountain","der","Berg"),d("insel","die Insel","island","die","Insel"),d("marktplatz","der Marktplatz","market square","der","Marktplatz"),c("meer","das Meer","sea","das","Meer"),c("see","der See","lake","der","See"),c("fluss","der Fluss","river","der","Fluss"),u("tom","Tom","Tom","Tom"),u("anna","Anna","Anna","Anna"),u("maria","Maria","Maria","Maria"),u("peter","Peter","Peter","Peter"),u("siemens","Siemens","Siemens","Siemens"),h("arbeit","die Arbeit","work","die","Arbeit"),h("training","das Training","training","das","Training"),h("sport","der Sport","sport","der","Sport"),m("bahnhof","der Bahnhof","train station","Bahnhof"),m("flughafen","der Flughafen","airport","Flughafen"),{id:"hause",category:"hause",display:"Hause",english:"home",sentences:{wohin:{prefix:a,prep:"nach",article:null,noun:"Hause"},wo:{prefix:n,prep:"zu",article:null,noun:"Hause"},woher:{prefix:i,prep:"von zu",article:null,noun:"Hause"}}}],p=["der","die","das","den","dem"],f=[...p,"—"];function y(e,t){let r=[e.prefix];return"prep"===t?(r.push("___"),e.article&&r.push(e.article)):(r.push(e.prep),r.push("___")),r.push(e.noun),r.join(" ")+"."}function x(e){return[e.prefix,"___ ___",e.noun].join(" ")+"."}function b(e){let t=[e.prefix,e.prep];return e.article&&t.push(e.article),t.push(e.noun),t.join(" ")+"."}let w=new Set(["nach","zu","bei","aus","von","von zu"]),k=new Set(["in","auf","an"]);function v(e,t){return w.has(e)?"Dativ":k.has(e)&&"wohin"===t?"Akkusativ":"Dativ"}function j(e){return e.startsWith("der ")?"masc":e.startsWith("das ")?"neu":e.startsWith("die ")?"die Berge"===e?"pl":"fem":"none"}e.s(["ARTICLE_CHOICES",0,f,"ARTICLE_POOL",0,p,"ARTICLE_TABLE",0,{masc:{Akkusativ:"den",Dativ:"dem"},fem:{Akkusativ:"die",Dativ:"der"},neu:{Akkusativ:"das",Dativ:"dem"},pl:{Akkusativ:"die",Dativ:"den"}},"CASE_HINT",0,{wohin:"Where to? (direction)",wo:"Where? (location)",woher:"Where from? (origin)"}
46,"CASE_LABEL",0,{wohin:"Wohin?",wo:"Wo?",woher:"Woher?"},"GENDER_LABEL",0,{masc:"masculine (der)",fem:"feminine (die)",neu:"neuter (das)",pl:"plural (die)",none:"no article"},"NOUN_ENTRIES",0,g,"NO_ARTICLE_VALUE",0,"—","PREPOSITION_POOL",0,["nach","in","zu","auf","an","bei","aus","von","von zu"],"getCategoryRule",()=>r,"getGrammarCase",()=>v,"getNounGender",()=>j,"renderFullSentence",()=>b,"renderSentenceWithBlank",()=>y,"renderSentenceWithBothBlanks",()=>x])},988554,930133,e=>{"use strict";var t=e.i(843476),r=e.i(271645),a=e.i(382373),n=e.i(475254);let i=(0,n.default)("Square",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]),s=(0,n.default)("Eraser",[["path",{d:"m7 21-4.3-4.3c-1-1-1-2.5 0-3.4l9.6-9.6c1-1 2.5-1 3.4 0l5.6 5.6c1 1 1 2.5 0 3.4L13 21",key:"182aya"}],["path",{d:"M22 21H7",key:"t4ddhn"}],["path",{d:"m5 11 9 9",key:"1mo9qw"}]]);var l=e.i(662349),o=e.i(647580);let d=[{letter:"A",file:"a",name:"A",ipa:"[aː]",soundsLike:'"ah"',example:{german:"Apfel",english:"apple"}},{letter:"B",file:"b",name:"Be",ipa:"[beː]",soundsLike:'"bay"',example:{german:"Buch",english:"book"}},{letter:"C",file:"c",name:"Ce",ipa:"[tseː]",soundsLike:'"tsay"',example:{german:"Computer",english:"computer"}},{letter:"D",file:"d",name:"De",ipa:"[deː]",soundsLike:'"day"',example:{german:"Danke",english:"thank you"}},{letter:"E",file:"e",name:"E",ipa:"[eː]",soundsLike:'"ay"',example:{german:"Essen",english:"food"}},{letter:"F",file:"f",name:"Ef",ipa:"[ɛf]",soundsLike:'"eff"',example:{german:"Freund",english:"friend"}},{letter:"G",file:"g",name:"Ge",ipa:"[geː]",soundsLike:'"gay"',example:{german:"Garten",english:"garden"}},{letter:"H",file:"h",name:"Ha",ipa:"[haː]",soundsLike:'"hah"',example:{german:"Haus",english:"house"}},{letter:"I",file:"i",name:"I",ipa:"[iː]",soundsLike:'"ee"',example:{german:"Insel",english:"island"}},{letter:"J",file:"j",name:"Jot",ipa:"[jɔt]",soundsLike:'"yot"',example:{german:"Jahr",english:"year"}},{letter:"K",file:"k",name:"Ka",ipa:"[kaː]",soundsLike:'"kah"',example:{german:"Kind",english:"child"}},{letter:"L",file:"l",name:"El",ipa:"[ɛl]",soundsLike:'"ell"',example:{german:"Lampe",english:"lamp"}},{letter:"M",file:"m",name:"Em",ipa:"[ɛm]",soundsLike:'"em"',example:{german:"Mutter",english:"mother"}},{letter:"N",file:"n",name:"En",ipa:"[ɛn]",soundsLike:'"en"',example:{german:"Nacht",english:"night"}},{letter:"O",file:"o",name:"O",ipa:"[oː]",soundsLike:'"oh"',example:{german:"Obst",english:"fruit"}},{letter:"P",file:"p",name:"Pe",ipa:"[peː]",soundsLike:'"pay"',example:{german:"Post",english:"mail"}},{letter:"Q",file:"q",name:"Ku",ipa:"[kuː]",soundsLike:'"koo"',example:{german:"Quelle",english:"source"}},{letter:"R",file:"r",name:"Er",ipa:"[ɛʁ]",soundsLike:'"air", with the r in the throat',example:{german:"Regen",english:"rain"}},{letter:"S",file:"s",name:"Es",ipa:"[ɛs]",soundsLike:'"ess"',example:{german:"Sonne",english:"sun"}},{letter:"T",file:"t",name:"Te",ipa:"[teː]",soundsLike:'"tay"',example:{german:"Tisch",english:"table"}},{letter:"U",file:"u",name:"U",ipa:"[uː]",soundsLike:'"oo"',example:{german:"Uhr",english:"clock"}},{letter:"V",file:"v",name:"Fau",ipa:"[faʊ]",soundsLike:'"fow", as in "fowl"',example:{german:"Vater",english:"father"}},{letter:"W",file:"w",name:"We",ipa:"[veː]",soundsLike:'"vay"',example:{german:"Wasser",english:"water"}},{letter:"X",file:"x",name:"Ix",ipa:"[ɪks]",soundsLike:'"iks"',example:{german:"Xylofon",english:"xylophone"}},{letter:"Y",file:"y",name:"Ypsilon",ipa:"[ˈʏpsilɔn]",soundsLike:'"üpsilon"',example:{german:"Yoga",english:"yoga"}},{letter:"Z",file:"z",name:"Zett",ipa:"[tsɛt]",soundsLike:'"tset"',example:{german:"Zeit",english:"time"}},{letter:"Ä",file:"ae",name:"Ä",ipa:"[ɛː]",soundsLike:'"eh", as in "bed" but longer',example:{german:"Äpfel",english:"apples"}},{letter:"Ö",file:"oe",name:"Ö",ipa:"[øː]",soundsLike:'"ay" with rounded lips',example:{german:"Öl",english:"oil"}},{letter:"Ü",file:"ue",name:"Ü",ipa:"[yː]",soundsLike:'"ee" with rounded lips',example:{german:"Übung",english:"exercise"}},{letter:"ß",file:"eszett",name:"Eszett (scharfes S)",ipa:"[ɛsˈtsɛt]",soundsLike:'"ess-tset"',example:{german:"Straße",english:"street"}}],c=d.filter(e=>["Ä","Ö","Ü","ß"].includes(e.letter)),u=[["Q","W","E","R","T","Z","U","I","O","P","Ü"],["A","S","D","F","G","H","J","K","L","Ö","Ä"],["Y","X","C","V","B","N","M","ß"]],h=new Map(d.map(e=>[e.letter,e])),m=null,g=new Map,p=new Map;function f(){if(!m){let e=window.AudioContext??window.webkitAudioContext;e&&(m=new e)}return m}function y(e){let t=g.get(e.file);if(t)return Promise.resolve(t);let r=p.get(e.file);if(r)return r;let a=f();if(!a)return Promise.resolve(null);let n=fetch(`/audio/alphabet/${e.file}.mp3`).then(e=>e.arrayBuffer()).then(e=>a.decodeAudioData(e)).then(t=>{let r={buffer:t,...function(e){let t=e.getChannelData(0),r=0;for(;r<t.length&&.01>Math.abs(t[r]);)r++;let a=t.length-1;for(;a>r&&.01>Math.abs(t[a]);)a--;let n=Math.max(0,r/e.sampleRate-.02);return{offset:n,duration:Math.max(.05,Math.min(e.duration,a/e.sampleRate+.02)-n)}}(t)};return g.set(e.file,r),r}).catch(()=>null).finally(()=>p.delete(e.file));return p.set(e.file,n),n}function x(){let e=(0,r.useRef)(null),t=(0,r.useRef)([]),a=(0,r.useRef)(!1),n=(0,r.useRef)(1),[i,s]=(0,r.useState)(null),[l,o]=(0,r.useState)(!1);(0,r.useEffect)(()=>{for(let e of d)y(e)},[]);let c=(0,r.useCallback)(async t=>{let r=f(),a=await y(t);if(r&&a)return"suspended"===r.state&&await r.resume(),new Promise(t=>{let n=r.createBufferSource();n.buffer=a.buffer,n.connect(r.destination),n.onended=()=>{e.current===n&&(e.current=null),t()},e.current=n,n.start(0,a.offset,a.duration)})},[]),u=(0,r.useCallback)(async()=>
46{if(!a.current){for(a.current=!0,o(!0);t.current.length>0;){let e=t.current.shift();s(e),await c(e.letter),t.current.length>0&&await new Promise(e=>setTimeout(e,40))}a.current=!1,o(!1)}},[c]);return{enqueue:(0,r.useCallback)((e,{force:r=!1}={})=>{if(!r&&t.current.length>=12)return null;let a=f();a?.state==="suspended"&&a.resume();let i={id:n.current++,letter:e};return t.current.push(i),u(),i},[u]),clear:(0,r.useCallback)(()=>{t.current=[];try{e.current?.stop()}catch{}e.current=null},[]),speaking:i,busy:l}}e.s(["useLetterAudio",()=>x],930133);let b="words",w=o.sections[b],k=new Set(c.map(e=>e.letter));function v(){let{enqueue:e,clear:n,speaking:o,busy:c}=x(),[m,g]=(0,r.useState)([]),[p,f]=(0,r.useState)(()=>new Set),[y,v]=(0,r.useState)(!1),j=y&&c,S=(0,r.useCallback)(t=>{let r=e(t);r&&(v(!1),g(e=>[...e,r].slice(-16)))},[e]);(0,r.useEffect)(()=>{if(!o)return;let e=o.id,t=setTimeout(()=>f(t=>new Set(t).add(e)),2500),r=setTimeout(()=>{g(t=>t.filter(t=>t.id!==e)),f(t=>{let r=new Set(t);return r.delete(e),r})},3100);return()=>{clearTimeout(t),clearTimeout(r)}},[o]);let N=(0,r.useCallback)(()=>{n(),g([]),f(new Set),v(!1)},[n]);(0,r.useEffect)(()=>{let e=e=>{if(e.metaKey||e.ctrlKey||e.altKey||e.repeat)return;let t=e.target;if(t&&("INPUT"===t.tagName||"TEXTAREA"===t.tagName||t.isContentEditable))return;if("Escape"===e.key)return void N();let r=h.get(e.key.toUpperCase());r&&(e.preventDefault(),S(r))};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[S,N]);let E=o?.letter??null,M=m.length>0;return(0,t.jsxs)("div",{className:"rounded-3xl border border-border bg-card p-5 shadow-widget sm:p-7",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,t.jsx)(l.EmbedEyebrow,{accent:b,children:"Tap the keys or type on your keyboard"}),(0,t.jsx)("span",{className:"hidden rounded-full bg-muted px-2.5 py-1 text-xs font-semibold text-muted-foreground sm:inline",children:"German QWERTZ layout"})]}),(0,t.jsxs)("div",{className:"mt-5 flex h-40 items-center justify-center gap-5 sm:h-44 sm:gap-7","aria-live":"polite",children:[(0,t.jsx)("div",{className:`flex h-24 w-24 shrink-0 items-center justify-center rounded-gg-panel font-display text-6xl font-extrabold leading-none tracking-tight sm:h-28 sm:w-28 sm:text-7xl ${E?`${w.gradient} ${w.glow} text-white motion-safe:animate-gg-pop`:`${w.tintBg} ${w.text}`}`,children:E?E.letter:"?"},o?.id??"idle"),(0,t.jsx)("div",{className:"min-w-0 max-w-xs text-left",children:E?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("p",{className:`font-display text-2xl font-extrabold tracking-tight sm:text-3xl ${w.text}`,children:E.name}),(0,t.jsxs)("p",{className:"mt-1 text-sm text-muted-foreground sm:text-base",children:[E.ipa," · sounds like ",E.soundsLike]}),(0,t.jsxs)("p",{className:"mt-1.5 text-sm text-muted-foreground",children:[(0,t.jsx)("span",{className:"font-semibold text-foreground",children:E.example.german})," (",E.example.english,")"]})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("p",{className:"font-display text-2xl font-extrabold tracking-tight text-foreground sm:text-3xl",children:"Press any key"}),(0,t.jsx)("p",{className:"mt-1 text-sm text-muted-foreground sm:text-base",children:"Hear the letter the way a German speaker says it. Type a whole word to hear it spelled out."})]})})]}),(0,t.jsx)("div",{className:"mt-5 flex h-12 flex-wrap items-center justify-center gap-1.5 overflow-hidden rounded-gg-card-sm bg-muted px-3","aria-label":"Letters you typed",children:0===m.length?(0,t.jsx)("span",{className:"text-sm text-muted-foreground/70",children:"Your letters show up here"}):m.map(e=>{let r=o?.id===e.id,a=null!==o&&e.id<o.id,n=p.has(e.id);return(0,t.jsx)("span",{style:{transitionDuration:"600ms"},className:`font-display text-lg font-bold transition-[opacity,color] motion-safe:animate-gg-drop-in ${n?"opacity-0":"opacity-100"} ${r?w.text:a?"text-foreground":"text-muted-foreground/60"}`,children:e.letter.letter},e.id)})}),(0,t.jsx)("div",{className:"mt-5 flex flex-col items-center gap-2",role:"group","aria-label":"German alphabet keyboard",children:u.map((e,r)=>(0,t.jsx)("div",{className:"flex w-full justify-center gap-1.5 sm:gap-2",children:e.map(e=>{let r=h.get(e),a=E?.letter===e;return(0,t.jsx)("button",{type:"button",onClick:()=>S(r),"aria-label":`Play letter ${e}`,"aria-pressed":a,className:`flex h-11 w-[8.2%] min-w-7 items-center justify-center rounded-gg-tile border font-display text-base font-bold transition-[transform,box-shadow,background-color,border-color] duration-150 sm:h-14 sm:w-14 sm:text-xl ${a?`scale-110 border-transparent text-white ${w.gradient} ${w.glow}
46 motion-safe:animate-gg-pop`:`border-b-[3px] border-input hover:-translate-y-0.5 hover:shadow-card-hover active:translate-y-[2px] active:border-b active:shadow-none ${k.has(e)?`${w.tintBg} ${w.text}`:"bg-card text-foreground"}`}`,children:e},e)})},r))}),(0,t.jsxs)("div",{className:"mt-6 flex flex-wrap items-center justify-center gap-3",children:[(0,t.jsxs)(l.EmbedActionButton,{onClick:()=>{if(j)return void N();for(let t of(n(),g([]),f(new Set),v(!0),d))e(t,{force:!0})},accent:b,children:[j?(0,t.jsx)(i,{className:"mr-2 h-4 w-4"}):(0,t.jsx)(a.Volume2,{className:"mr-2 h-4 w-4"}),j?"Stop":"Play the whole alphabet"]}),(0,t.jsxs)(l.EmbedGhostButton,{onClick:N,disabled:!M&&!j,children:[(0,t.jsx)(s,{className:"mr-2 h-4 w-4"}),"Clear"]})]}),(0,t.jsx)("p",{className:"mt-4 text-center text-gg-caption text-muted-foreground",children:"Native German voice. Tinted keys are the four letters English does not have. Z and Y are swapped compared to an English keyboard."})]})}function j({letter:e,onPlay:r}){return(0,t.jsx)("button",{type:"button",onClick:()=>r(e),"aria-label":`Play letter ${e.letter}`,className:`flex h-9 w-9 shrink-0 items-center justify-center rounded-full ${w.tintBg} ${w.text} transition-transform hover:-translate-y-0.5 active:scale-95`,children:(0,t.jsx)(a.Volume2,{className:"h-4 w-4"})})}e.s(["AlphabetKeyboard",()=>v,"LetterPlayButton",()=>j],988554)},622320,791354,e=>{"use strict";e.s(["TIME_ENTRIES",0,[{id:"ct-3uhr",category:"clock-time",prefix:"Ich komme",body:"3 Uhr",display:"3 Uhr",english:"I am coming at 3 o’clock."},{id:"ct-16uhr",category:"clock-time",prefix:"Wir treffen uns",body:"16 Uhr",display:"16 Uhr",english:"We meet at 4 p.m."},{id:"ct-halb7",category:"clock-time",prefix:"Das Meeting beginnt",body:"halb 7",display:"halb 7",english:"The meeting starts at half past six."},{id:"ct-viertelvor5",category:"clock-time",prefix:"Der Film startet",body:"Viertel vor 5",display:"Viertel vor 5",english:"The movie starts at quarter to five."},{id:"ct-mitternacht",category:"clock-time",prefix:"Sie kommt",body:"Mitternacht nach Hause",display:"Mitternacht",english:"She comes home at midnight."},{id:"ct-8uhr",category:"clock-time",prefix:"Die Schule beginnt",body:"8 Uhr",display:"8 Uhr",english:"School begins at 8 o’clock."},{id:"ct-7uhr",category:"clock-time",prefix:"Wir frühstücken",body:"7 Uhr",display:"7 Uhr",english:"We have breakfast at 7 o’clock."},{id:"ct-9uhr-bus",category:"clock-time",prefix:"Der Bus fährt",body:"9 Uhr",display:"9 Uhr",english:"The bus leaves at 9 o’clock."},{id:"ct-halb11",category:"clock-time",prefix:"Ich gehe",body:"halb 11 ins Bett",display:"halb 11",english:"I go to bed at half past ten."},{id:"ct-22uhr",category:"clock-time",prefix:"Das Konzert endet",body:"22 Uhr",display:"22 Uhr",english:"The concert ends at 10 p.m."},{id:"tod-morgen",category:"time-of-day",prefix:"Ich jogge",body:"Morgen",display:"Morgen",english:"I jog in the morning."},{id:"tod-vormittag",category:"time-of-day",prefix:"Wir arbeiten",body:"Vormittag",display:"Vormittag",english:"We work in the late morning."},{id:"tod-mittag",category:"time-of-day",prefix:"Wir essen",body:"Mittag",display:"Mittag",english:"We eat at noon."},{id:"tod-nachmittag",category:"time-of-day",prefix:"Ich trinke Kaffee",body:"Nac
46hmittag",display:"Nachmittag",english:"I drink coffee in the afternoon."},{id:"tod-abend",category:"time-of-day",prefix:"Ich lerne",body:"Abend Deutsch",display:"Abend",english:"I study German in the evening."},{id:"tod-morgen-zeitung",category:"time-of-day",prefix:"Sie liest",body:"Morgen Zeitung",display:"Morgen",english:"She reads the newspaper in the morning."},{id:"tod-nachmittag-spazieren",category:"time-of-day",prefix:"Ich gehe",body:"Nachmittag spazieren",display:"Nachmittag",english:"I go for a walk in the afternoon."},{id:"tod-abend-kochen",category:"time-of-day",prefix:"Wir kochen",body:"Abend",display:"Abend",english:"We cook in the evening."},{id:"night-schlafe",category:"night",prefix:"Ich schlafe",body:"Nacht",display:"Nacht",english:"I sleep at night."},{id:"night-stadt",category:"night",prefix:"Die Stadt ist schön",body:"Nacht",display:"Nacht",english:"The city is beautiful at night."},{id:"night-arbeite",category:"night",prefix:"Er arbeitet",body:"Nacht",display:"Nacht",english:"He works at night."},{id:"night-eulen",category:"night",prefix:"Eulen jagen",body:"Nacht",display:"Nacht",english:"Owls hunt at night."},{id:"night-musik",category:"night",prefix:"Ich höre Musik",body:"Nacht",display:"Nacht",english:"I listen to music at night."},{id:"night-regen",category:"night",prefix:"Es regnet",body:"Nacht",display:"Nacht",english:"It rains at night."},{id:"ctt-5morgens",category:"clock-time-with-tod",prefix:"Der Zug fährt",body:"fünf Uhr morgens",display:"fünf Uhr morgens",english:"The train leaves at five in the morning."},{id:"ctt-1nachts",category:"clock-time-with-tod",prefix:"Sie kommt",body:"ein Uhr nachts",display:"ein Uhr nachts",english:"She arrives at one in the morning."},{id:"ctt-9abends",category:"clock-time-with-tod",prefix:"Wir essen",body:"neun Uhr abends",display:"neun Uhr abends",english:"We eat at nine in the evening."},{id:"ctt-7morgens-fruehstueck",category:"clock-time-with-tod",prefix:"Wir frühstücken",body:"sieben Uhr morgens",display:"sieben Uhr morgens",english:"We have breakfast at seven in the morning."},{id:"ctt-10abends-schlaf",category:"clock-time-with-tod",prefix:"Sie schläft",body:"zehn Uhr abends",display:"zehn Uhr abends",english:"She sleeps at ten in the evening."},{id:"ctt-6morgens-wecker",category:"clock-time-with-tod",prefix:"Der Wecker klingelt",body:"sechs Uhr morgens",display:"sechs Uhr morgens",english:"The alarm rings at six in the morning."},{id:"ctt-8abends-spiel",category:"clock-time-with-tod",prefix:"Das Spiel beginnt",body:"acht Uhr abends",display:"acht Uhr abends",english:"The game starts at eight in the evening."},{id:"wd-montag",category:"weekday",prefix:"Ich arbeite",body:"Montag",display:"Montag",english:"I work on Monday."},{id:"wd-samstag",category:"weekday",prefix:"Wir spielen Fußball",body:"Samstag",display:"Samstag",english:"We play soccer on Saturday."},{id:"wd-mittwoch",category:"weekday",prefix:"Der Markt ist",body:"Mittwoch",display:"Mittwoch",english:"The market is on Wednesday."},{id:"wd-freitag",category:"weekday",prefix:"Ich habe",body:"Freitag frei",display:"Freitag",english:"I have Friday off."},{id:"wd-dienstag",category:"weekday",prefix:"Wir haben Sport",body:"Dienstag",display:"Dienstag",english:"We have sports on Tuesday."},{id:"wd-donnerstag",category:"weekday",prefix:"Der Kurs ist",body:"Donnerstag",display:"Donnerstag",english:"The course is on Thursday."},{id:"wd-sonntag",category:"weekday",prefix:"Ich koche",body:"Sonntag",display:"Sonntag",english:"I cook on Sunday."},{id:"wd-freitag-reise",category:"weekday",prefix:"Wir reisen",body:"Freitag",display:"Freitag",english:"We travel on Friday."},{id:"wd-mittwoch-zurueck",category:"weekday",prefix:"Sie kommt",body:"Mittwoch zurück",display:"Mittwoch",english:"She comes back on Wednesday."},{id:"wdt-sonntag",category:"weekday-with-tod",prefix:"Wir treffen uns",body:"Sonntagnachmittag",display:"Sonntagnachmittag",english:"We meet on Sunday afternoon."},{id:"wdt-freitag",category:"weekday-with-tod",prefix:"Wir gehen aus",body:"Freitagabend",display:"Freitagabend",english:"We go out on Friday evening."},{id:"wdt-samstag",category:"weekday-with-tod",prefix:"Sie kommt",body:"Samstagmorgen",display:"Samstagmorgen",english:"She is coming Saturday morning."},{id:"wdt-montag-morgen",category:"weekday-with-tod",prefix:"Ich arbeite",body:"Montagmorgen",display:"Montagmorgen",english:"I work on Monday morning."},{id:"wdt-dienstag-abend",category:"weekday-with-tod",prefix:"Wir essen",body:"Dienstagabend Pizza",display:"Dienstagabend",english:"We eat pizza on Tuesday evening."},{id:"wdt-samstag-vormittag",category:"weekday-with-tod",prefix:"Der Markt ist",body:"Samstagvormittag",display:"Samstagvormittag",english:"The market is on Saturday morning."},{id:"wdt-donnerstag-abend",category:"weekday-with-tod",prefix:"Wir treffen uns",body:"Donnerstagabend",display:"Donnerstagabend",english:"We meet on Thursday evening."},{id:"date-23aug",category:"date",prefix:"Ich habe",body:"23. August Geburtstag",display:"23. August",english:"My birthday is on August 23."},{id:"date-ersten-mai",category:"date",prefix:"Die Feier ist",body:"ersten Mai",display:"ersten Mai",english:"The celebration is on the first of May."},{id:"date-14feb",category:"date",prefix:"Wir feiern",body:"14. Februar",display:"14. Februar",english:"We celebrate on February 14."},{id:"date-25dez",category:"date",prefix:"Weihnachten ist",body:"25. Dezember",display:"25. Dezember",english:"Christmas is on December 25."},{id:"date-31dez",category:"date",prefix:"Wir feiern",body:"31. Dezember",display:"31. Dezember",english:"We celebrate on December 31."},{id:"date-7jul",category:"date",prefix:"Sie hat",body:"7. Juli Hochzeit",display:"7. Juli",english:"She is getting married on July 7."},{id:"date-1mai",category:"date",prefix:"Der Tag der Arbeit ist",body:"1. Mai",display:"1. Mai",english:"Labor Day is on May 1."},{id:"date-12maerz",category:"date",prefix:"Ich fliege",body:"12. März nach Berlin",display:"12. März",english:"I am flying to Berlin on March 12."},{id:"mo-juli",category:"month",prefix:"Ich fahre",body:"Juli nach Deutschland",display:"Juli",english:"I am going to Germany in July."},{id:"mo-maerz",category:"month",prefix:"Die Blumen blühen",body:"März",display:"März",english:"The flowers bloom in March."},{id:"mo-dezember",category:"month",prefix:"Wir haben Ferien",body:"Dezember",display:"Dezember",english:"We have a holiday in December."},{id:"mo-oktober",category:"month",prefix:"Das Oktoberfest ist",body:"Oktober",display:"Oktober",english:"Oktoberfest is in October."},{id:"mo-august",category:"month",prefix:"Wir machen Urlaub",body:"August",display:"August",english:"We are on vacation in August."},{id:"mo-september",category:"month",prefix:"Der Sprachkurs beginnt",body:"September",display:"September",english:"The language course starts in September."},{id:"mo-januar",category:"month",prefix:"Es schneit oft",body:"Januar",display:"Januar",english:"It often snows in January."},{id:"mo-februar",category:"month",prefix:"Wir feiern Karneval",body:"Februar",display:"Februar",english:"We celebrate Carnival in February."},{id:"mo-juni",category:"month",prefix:"Wir grillen oft",body:"Juni",display:"Juni",english:"We often grill in June."},{id:"se-fruehling",category:"season",prefix:"",body:"Frühling ist das Wetter schön",display:"Frühling",english:"In spring, the weather is nice."},{id:"se-sommer",category:"season",prefix:"Wir fahren",body:"Sommer ans Meer",display:"Sommer",english:"We go to the sea in summer."},{id:"se-herbst",category:"season",prefix:"Die Blätter fallen",body:"Herbst",display:"Herbst",english:"The leaves fall in autumn."},{id:"se-winter",category:"season",prefix:"Es schneit oft",body:"Winter",display:"Winter",english:"It often snows in winter."},{id:"se-winter-ski",category:"season",prefix:"",body:"Winter fahre ich Ski",display:"Winter",english:"In winter, I ski."},{id:"se-sommer-reisen",category:"season",prefix:"Wir reisen",body:"Sommer",display:"Sommer",english:"We travel in summer."},{id:"se-herbst-blaetter",category:"season",prefix:"Die Bäume verlieren ihre Blätter",body:"Herbst",display:"Herbst",english:"The trees lose their leaves in autumn."},{id:"se-fruehling-voegel",category:"season",prefix:"",body:"Frühling singen die Vögel",display:"Frühling",english:"In spring, the birds sing."},{id:"cent-21",category:"century",prefix:"Wir leben",body:"21. Jahrhun
46dert",display:"21. Jahrhundert",english:"We live in the 21st century."},{id:"cent-19",category:"century",prefix:"Das Buch wurde",body:"19. Jahrhundert geschrieben",display:"19. Jahrhundert",english:"The book was written in the 19th century."},{id:"cent-18-schloss",category:"century",prefix:"Das Schloss wurde",body:"18. Jahrhundert gebaut",display:"18. Jahrhundert",english:"The castle was built in the 18th century."},{id:"cent-20",category:"century",prefix:"",body:"20. Jahrhundert gab es viele Erfindungen",display:"20. Jahrhundert",english:"In the 20th century there were many inventions."},{id:"cent-18-mozart",category:"century",prefix:"Mozart lebte",body:"18. Jahrhundert",display:"18. Jahrhundert",english:"Mozart lived in the 18th century."},{id:"cent-17",category:"century",prefix:"",body:"17. Jahrhundert war Europa anders",display:"17. Jahrhundert",english:"In the 17th century, Europe was different."},{id:"yr-1985",category:"year",prefix:"Ich bin",body:"1985 geboren",display:"1985",english:"I was born in 1985."},{id:"yr-2017",category:"year",prefix:"Wir haben geheiratet",body:"2017",display:"2017",english:"We got married in 2017."},{id:"yr-2024",category:"year",prefix:"Der Film kam",body:"2024 ins Kino",display:"2024",english:"The movie came to theaters in 2024."},{id:"yr-2010",category:"year",prefix:"Sie hat",body:"2010 ihr Studium beendet",display:"2010",english:"She finished her studies in 2010."},{id:"yr-1989",category:"year",prefix:"Die Mauer fiel",body:"1989",display:"1989",english:"The wall fell in 1989."},{id:"yr-2003",category:"year",prefix:"Wir sind",body:"2003 nach Berlin gezogen",display:"2003",english:"We moved to Berlin in 2003."},{id:"yr-2019",category:"year",prefix:"Ich war",body:"2019 in Italien",display:"2019",english:"I was in Italy in 2019."},{id:"yr-1995",category:"year",prefix:"Der Roman erschien",body:"1995",display:"1995",english:"The novel was published in 1995."},{id:"adv-morgens",category:"time-adverb",prefix:"Ich trinke",body:"morgens Kaffee",display:"morgens",english:"I drink coffee in the mornings."},{id:"adv-abends",category:"time-adverb",prefix:"Wir lesen",body:"abends",display:"abends",english:"We read in the evenings."},{id:"adv-nachts",category:"time-adverb",prefix:"Er arbeitet",body:"nachts",display:"nachts",english:"He works at night (regularly)."},{id:"adv-mittags",category:"time-adverb",prefix:"Wir essen",body:"mittags zusammen",display:"mittags",english:"We eat together at midday."},{id:"adv-vormittags",category:"time-adverb",prefix:"Sie joggt",body:"vormittags",display:"vormittags",english:"She jogs in the late morning."},{id:"adv-montags",category:"time-adverb",prefix:"Der Laden ist",body:"montags geschlossen",display:"montags",english:"The shop is closed on Mondays."},{id:"adv-nachmittags",category:"time-adverb",prefix:"Ich höre",body:"nachmittags Podcasts",display:"nachmittags",english:"I listen to podcasts in the afternoons."},{id:"acc-naechste-woche",category:"accusative-time",prefix:"Ich habe",body:"nächste Woche Zeit",display:"nächste Woche",english:"I have time next week."},{id:"acc-diesen-winter",category:"accusative-time",prefix:"Ich fahre",body:"diesen Winter Ski",display:"diesen Winter",english:"I am skiing this winter."},{id:"acc-letztes-we",category:"accusative-time",prefix:"Ich war",body:"letztes Wochenende zu Hause",display:"letztes Wochenende",english:"I was at home last weekend."},{id:"acc-naechsten-monat",category:"accusative-time",prefix:"Wir ziehen um",body:"nächsten Monat",display:"nächsten Monat",english:"We are moving next month."},{id:"acc-naechsten-sonntag",category:"accusative-time",prefix:"Sie kommt",body:"nächsten Sonntag zu Besuch",display:"nächsten Sonntag",english:"She is visiting next Sunday."},{id:"acc-letzten-sommer",category:"accusative-time",prefix:"Wir hatten",body:"letzten Sommer viel Regen",display:"letzten Sommer",english:"We had a lot of rain last summer."},{id:"acc-naechsten-samstag",category:"accusative-time",prefix:"Ich gehe",body:"nächsten Samstag ins Kino",display:"nächsten Samstag",english:"I am going to the movies next Saturday."},{id:"acc-diesen-sommer",category:"accusative-time",prefix:"Wir machen Urlaub",body:"diesen Sommer",display:"diesen Sommer",english:"We are on vacation this summer."}]],791354);
46let t=new Map([{id:"clock-time",label:"Exact clock time",prep:"um",rule:"Use um for exact clock times.",examples:"um 3 Uhr, um halb 7, um Mitternacht"},{id:"time-of-day",label:"Part of the day",prep:"am",rule:"Use am with parts of the day: Morgen, Vormittag, Mittag, Nachmittag, Abend.",examples:"am Morgen, am Abend"},{id:"night",label:"Night (exception)",prep:"in der",rule:"Nacht is an exception. Use in der Nacht, not am Nacht.",examples:"in der Nacht"},{id:"clock-time-with-tod",label:"Clock time + part of day",prep:"um",rule:"When a clock time is combined with morgens/abends/nachts, use um.",examples:"um fünf Uhr morgens, um ein Uhr nachts"},{id:"weekday",label:"Day of the week",prep:"am",rule:"Use am with weekdays.",examples:"am Montag, am Samstag"},{id:"weekday-with-tod",label:"Weekday + part of day",prep:"am",rule:"A weekday joined with a part of the day uses am.",examples:"am Freitagabend, am Sonntagnachmittag"},{id:"date",label:"Specific calendar date",prep:"am",rule:"Use am with calendar dates.",examples:"am 23. August, am ersten Mai"},{id:"month",label:"Months",prep:"im",rule:"Use im with months.",examples:"im März, im Juli"},{id:"season",label:"Seasons",prep:"im",rule:"Use im with seasons.",examples:"im Frühling, im Herbst"},{id:"century",label:"Centuries",prep:"im",rule:"Use im with centuries.",examples:"im 19. Jahrhundert, im 21. Jahrhundert"},{id:"year",label:"Years",prep:"(none)",rule:"Years stand on their own. No preposition is needed.",examples:"1985, 2017"},{id:"time-adverb",label:"Time adverbs",prep:"(none)",rule:"Adverbs like morgens, abends, nachts are used without a preposition.",examples:"morgens, abends, nachts"},{id:"accusative-time",label:"Accusative time phrase",prep:"(none)",rule:"Phrases like nächste Woche, diesen Winter, letztes Wochenende use no preposition (they are Akkusativ).",examples:"nächste Woche, diesen Winter, letztes Wochenende"}].map(e=>[e.id,e]));function r(e){let r=t.get(e);if(!r)throw Error(`Unknown time category: ${e}`);return r}function a(e){return e.charAt(0).toUpperCase()+e.slice(1)}function n(e){return e.prefix?`${e.prefix} ___ ${e.body}.`:`___ ${e.body}.`}function i(e,t){let r="(none)"===t.prep?"":t.prep;if(e.prefix){let t=r?`${r} `:"";return`${e.prefix} ${t}${e.body}.`}return r?`${a(r)} ${e.body}.`:`${a(e.body)}.`}e.s(["PREPOSITION_POOL",0,["um","am","im","in der","(none)"],"PREP_LABEL",0,{um:"um",am:"am",im:"im","in der":"in der","(none)":"— (no preposition)"},"getCategoryRule",()=>r,"renderFullSentence",()=>i,"renderSentenceWithBlank",()=>n],622320)},341773,631638,e=>{"use strict";var t=e.i(843476),r=e.i(271645);e.i(924856);var a=e.i(743742),n=e.i(119485),i=e.i(152236),s=e.i(662349);let{run:l}=a.adjectiveComparison,o=["3","2","1","Los!"],d=["Meaning","Comparative","Superlative"],c=[27,73],u=e=>e.preventDefault();function h({word:e}){let r=e.failedRow??0,a=e.choices[r];return(0,t.jsxs)("div",{className:"absolute inset-x-3 top-1/2 z-30 -translate-y-1/2 rounded-gg-card border border-border bg-card p-4 shadow-widget sm:inset-x-8 sm:p-5",children:[(0,t.jsx)("div",{className:"text-center text-sm text-muted-foreground",children:n.vocabulary.toDisplayTranslation(e.adjective.english)}),(0,t.jsx)("div",{className:"mt-1 flex flex-wrap items-baseline justify-center gap-x-2 gap-y-1 font-display text-lg font-extrabold tracking-tight sm:text-xl",children:e.rows.map((e,a)=>(0,t.jsxs)("span",{className:"flex items-baseline gap-2",children:[a>0&&(0,t.jsx)("span",{"aria-hidden":"true",className:"text-muted-foreground",children:"→"}),(0,t.jsx)("span",{className:(0,i.cn)(a<r&&"text-cat-green-text dark:text-cat-green-soft",a===r&&"text-cat-red-text underline decoration-2 underline-offset-4 dark:text-cat-red-soft"),children:e.answer})]},e.kind))}),(0,t.jsx)("div",{className:"mt-2 text-center text-sm text-muted-foreground",children:a?(0,t.jsxs)(t.Fragment,{children:["Not ",(0,t.jsx)("span",{className:"line-through",children:a}),"."]}):"Too slow."})]})}function m({pool:e,onFinished:a,endless:m=!1,arrowKeys:g=!0,endLabel:p="End game early"}){let[f,y]=(0,r.useState)(0),[x,b]=(0,r.useState)(null),[w,k]=(0,r.useState)(0),[v,j]=(0,r.useState)(Math.ceil(l.DEFAULT_CONFIG.gameDurationMs/1e3)),[S,N]=(0,r.useState)(!1),[E,M]=(0,r.useState)(null),[C,T]=(0,r.useState)(!1),[z,A]=(0,r.useState)(520),[W,_]=(0,r.useState)(50),I=(0,r.useRef)(null),R=(0,r.useRef)(0),D=(0,r.useRef)(null),$=(0,r.useRef)(null),P=(0,r.useRef)([]),L=(0,r.useRef)(!1),O=(0,r.useCallback)((e,t)=>{P.current.push(window.setTimeout(e,t))},[]);(0,r.useEffect)(()=>()=>
46P.current.forEach(e=>window.clearTimeout(e)),[]),(0,r.useEffect)(()=>{let e=$.current;if(!e)return;let t=new ResizeObserver(()=>A(e.clientHeight));return t.observe(e),()=>t.disconnect()},[]);let F=(0,r.useCallback)(e=>{I.current=e,b(e)},[]),B=(0,r.useCallback)(e=>44+e*(z-42-44),[z]),U=(0,r.useCallback)(()=>{let e=I.current;if(!e||L.current)return;L.current=!0,P.current.forEach(e=>window.clearTimeout(e));let t=l.finish(e);F(t),a(t)},[F,a]),G=(0,r.useCallback)(()=>{let e=I.current;if(e&&!L.current){if(!m&&l.isTimeUp(e,Date.now()))return void U();R.current=0,_(50),N(!1),F(l.spawnWord(e,Date.now())),k(e=>e+1)}},[F,U,m]),H=(0,r.useCallback)(e=>{F(e),N(!1),T(!0),O(()=>T(!1),450),O(G,e.config.failHoldMs)},[F,O,G]),J=(0,r.useCallback)(e=>{let t=I.current;if(!t||L.current)return;let{run:r,outcome:a}=l.choose(t,e,R.current,Date.now());if("ignored"!==a){if("failed"===a)return void H(r);if(_(c[e]),F(r),"cleared"===a){let t=r.results[r.results.length-1];N(!1),M({id:Date.now(),text:`+${t.points}`,x:c[e]}),O(()=>M(null),900),O(G,r.config.clearGapMs+350)}}},[H,F,O,G]);(0,r.useEffect)(()=>{if(x)return;let t=f===o.length-1,r=window.setTimeout(()=>{t?(R.current=0,F(l.startRun(e,Date.now())),k(e=>e+1)):y(e=>e+1)},t?500:700);return()=>window.clearTimeout(r)},[x,f,e,F]);let q=x?.status==="playing";(0,r.useEffect)(()=>{let e;if(!q)return;let t=performance.now(),r=a=>{let n=Math.min(a-t,50);t=a;let i=I.current;if(!i||L.current)return;let s=i.word;if(!m){let e=l.timeLeftMs(i,Date.now());if(j(Math.ceil(e/1e3)),e<=0&&s?.status!=="failed")return void U()}if(s?.status==="falling"&&D.current){R.current+=n/s.fallMs;let e=Math.min(R.current,1);D.current.style.transform=`translate(-50%, calc(${B(e)}px - 50%))`,N(e>l.rowThreshold(i,s.activeRow)-.07);let{run:t,missed:r}=l.advanceFall(i,e,Date.now());r&&H(t)}e=requestAnimationFrame(r)};return e=requestAnimationFrame(r),()=>cancelAnimationFrame(e)},[q,m,B,U,H]),(0,r.useEffect)(()=>{if(!q)return;let e=e=>{var t;if(e.metaKey||e.ctrlKey||e.altKey||e.repeat)return;let r=(t=e.key,g&&"ArrowLeft"===t||"1"===t||"a"===t||"A"===t?0:g&&"ArrowRight"===t||"2"===t||"d"===t||"D"===t?1:null);null!==r&&(e.preventDefault(),J(r))};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[q,g,J]);let K=x?.word??null;(0,r.useEffect)(()=>{if(K?.status!=="cleared"||!D.current)return;let e=D.current;e.style.transition="transform 0.35s cubic-bezier(0.55, 0, 1, 1), opacity 0.35s ease-in, left 0.18s ease-out",e.style.transform=`translate(-50%, ${z+40}px)`,e.style.opacity="0"},[K?.status,z]);let V=K?function(e){let t=n.vocabulary.toDisplayTranslation(e.adjective.english),r="cleared"===e.status?e.rows.length:e.activeRow;if(0===r)return{main:t,trail:""};let a=e.rows.slice(0,r).map(e=>e.answer);return{main:a[a.length-1],trail:[t,...a.slice(0,-1)].join(" · ")}}(K):null;return(0,t.jsxs)("div",{className:"rounded-3xl border border-border bg-card p-3 shadow-widget sm:p-5",children:[(0,t.jsxs)("div",{className:"mb-3 flex items-center justify-between gap-3 px-1",children:[(0,t.jsx)("div",{className:"font-display text-gg-eyebrow font-bold uppercase text-cat-gold-text dark:text-cat-gold-soft",children:m?`${x?l.clearedCount(x):0} cleared`:`${Math.max(v,0)}s`}),(0,t.jsxs)("div",{className:"font-display text-gg-eyebrow font-bold uppercase text-muted-foreground",children:[x?.score??0," points",(x?.streak??0)>=2&&(0,t.jsxs)("span",{className:"ml-2 text-cat-gold-text dark:text-cat-gold-soft",children:["🔥 ",x?.streak]})]})]}),(0,t.jsxs)("div",{ref:$,className:(0,i.cn)("relative h-[min(68vh,560px)] min-h-[460px] overflow-hidden rounded-gg-card bg-sunk",C&&"animate-gg-shake"),children:[[0,1,2].map(e=>{let r=K?.rows[e],a=K?.status==="falling"&&K.activeRow===e,n=!!K&&(e<=K.activeRow||"cleared"===K.status)&&!("failed"===K.status&&e>(K.failedRow??0));return(0,t.jsxs)("div",{className:"absolute inset-x-2 -translate-y-1/2 sm:inset-x-4",style:{top:B(l.DEFAULT_CONFIG.rowProgress[e])},children:[(0,t.jsx)("div",{className:(0,i.cn)("mb-1 text-center font-display text-gg-eyebrow font-bold uppercase",a?"text-cat-gold-text dark:text-cat-gold-soft":"text-muted-foreground
46/70"),children:d[e]}),(0,t.jsx)("div",{className:"grid grid-cols-2 gap-[8%]",children:[0,1].map(l=>{var o,c,h,m;let g,p,f=r?.options[l]??"";return(0,t.jsx)("button",{type:"button",onMouseDown:u,onClick:()=>a&&J(l),disabled:!a,"aria-label":n?f:`${d[e]} gate, hidden`,className:(0,i.cn)(n&&K?(0,s.optionButtonClass)((c=K,h=e,m=f,g=c.rows[h],p=c.choices[h],"failed"===c.status&&h===c.failedRow?m===g.answer?"correct":m===p?"wrong":"dimmed":h<c.activeRow||"cleared"===c.status?m===g.answer?"correct":"dimmed":"idle")):"rounded-2xl border-2 border-dashed border-border bg-card/60 font-display font-bold text-muted-foreground/50","min-h-12 px-2 py-2 leading-tight",(o=f.length)<=9?"text-base sm:text-lg":o<=15?"text-sm sm:text-base":"text-xs sm:text-sm",a&&"ring-2 ring-cat-gold/60 ring-offset-2 ring-offset-sunk"),children:n?f:"?"},l)})})]},e)}),K&&V&&(0,t.jsx)("div",{ref:D,className:"pointer-events-none absolute z-20 will-change-transform",style:{left:`${W}%`,top:0,transform:`translate(-50%, calc(${B(0)}px - 50%))`,transition:"left 0.18s ease-out"},children:(0,t.jsxs)("div",{className:(0,i.cn)("animate-gg-drop-in whitespace-nowrap rounded-2xl border-2 bg-card px-4 py-2 text-center shadow-widget","cleared"===K.status&&"border-cat-green","failed"===K.status&&"border-cat-red bg-cat-red-tint animate-gg-shake dark:bg-cat-red/15","falling"===K.status&&(S?"border-cat-red":"border-cat-gold")),children:[V.trail&&(0,t.jsx)("div",{className:"text-xs text-muted-foreground",children:V.trail}),(0,t.jsx)("div",{className:(0,i.cn)("font-display text-xl font-extrabold tracking-tight sm:text-2xl",0===K.activeRow&&"falling"===K.status?"italic text-foreground":"text-cat-gold-text dark:text-cat-gold-soft"),children:V.main})]})},w),K?.status==="failed"&&(0,t.jsx)(h,{word:K}),E&&(0,t.jsx)("div",{className:"pointer-events-none absolute bottom-16 z-30 -translate-x-1/2 animate-gg-float-points font-display text-2xl font-extrabold text-cat-green-text dark:text-cat-green-soft",style:{left:`${E.x}%`},children:E.text},E.id),!x&&f<o.length&&(0,t.jsx)("div",{className:"absolute inset-0 z-30 flex items-center justify-center",children:(0,t.jsx)("span",{className:"animate-gg-pop font-display text-7xl font-extrabold text-cat-gold-text",children:o[f]},f)})]}),(0,t.jsxs)("div",{className:"mt-3 flex items-center justify-between gap-3 px-1",children:[(0,t.jsx)("p",{className:"hidden text-gg-body-sm text-muted-foreground sm:block",children:g?"← left gate · → right gate":"1 or A: left gate · 2 or D: right gate"}),(0,t.jsx)("button",{type:"button",onClick:U,disabled:!x,className:"ml-auto text-sm text-muted-foreground underline-offset-4 hover:text-foreground hover:underline disabled:opacity-50",children:p})]})]})}e.s(["ComparisonDropPlay",()=>m],341773);let g=[["a1","goethe-a1"],["a2","goethe-a2"],["b1","goethe-b1"]];function p(e){let t={a1:[],a2:[],b1:[],tricky:[]};for(let r of e){if("adjective"!==r.word_type)continue;let e=r.data,n={id:r.id,positive:e.positive??"",comparative:e.comparative??"",superlative:e.superlative??"",english:e.english??"",synonyms:e.synonyms,antonyms:e.antonyms};if(!a.adjectiveComparison.core.isPlayable(n))continue;let i=g.filter(([,t])=>e.collections?.includes(t));for(let[e]of i)t[e].push(n);i.length>0&&a.adjectiveComparison.core.isTricky(n)&&t.tricky.push(n)}return t}e.s(["DEFAULT_POOL",0,"a1","EMPTY_POOLS",0,{a1:[],a2:[],b1:[],tricky:[]},"POOL_OPTIONS",0,[{value:"a1",label:"A1",hint:"Beginner adjectives like alt, groß and gut"},{value:"a2",label:"A2",hint:"Elementary adjectives like dunkel, teuer and hoch"},{value:"b1",label:"B1",hint:"Intermediate adjectives like gründlich and optimistisch"},{value:"tricky",label:"Tricky forms",hint:"Only umlauts, the extra e, dropped e and irregular forms"}],"buildPools",()=>p],631638)}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.