:root{--primary:#2d6be4;--primary-dark:#1a4baa;--primary-soft:#eef2ff;--ink:#1a1a2e;--paper:#fafaf5;--surface:#fff;--muted:#6b7280;--divider:#e5e7eb;--success:#16a34a;--close:#f7c948;--danger:#dc2626;--fs-base:17px;--fs-large:21px;--fs-xl:25px;--reading-size:var(--fs-base);--reading-spacing:0em;--reading-leading:1.75;--radius:12px;--radius-sm:8px;--shell-h:56px;--sidebar-w:92px;--font:"Inter", system-ui, sans-serif;--font-dys:"OpenDyslexic", "Comic Sans MS", var(--font)}*{box-sizing:border-box;margin:0;padding:0}html{font-size:var(--fs-base)}html[data-font-size=base]{--reading-size:var(--fs-base)}html[data-font-size=large]{--reading-size:var(--fs-large)}html[data-font-size=xl]{--reading-size:var(--fs-xl)}html[data-spacing=normal]{--reading-spacing:0em}html[data-spacing=medium]{--reading-spacing:.05em}html[data-spacing=high]{--reading-spacing:.12em}html[data-line-height=normal]{--reading-leading:1.75}html[data-line-height=relaxed]{--reading-leading:2.2}html.font-dyslexic .reading{font-family:var(--font-dys)}body{font-family:var(--font);background:var(--paper);color:var(--ink);-webkit-font-smoothing:antialiased;line-height:1.6}button{cursor:pointer;font-family:inherit}:focus-visible{outline:3px solid var(--primary);outline-offset:2px;border-radius:4px}.sidebar{width:var(--sidebar-w);z-index:60;background:var(--surface);border-right:1px solid var(--divider);flex-direction:column;align-items:center;gap:10px;padding:14px 8px;display:flex;position:fixed;top:0;bottom:0;left:0;overflow-y:auto}.sidebar__group{background:#eff1f6;border-radius:26px;flex-direction:column;align-items:center;gap:2px;width:100%;padding:8px 6px;display:flex}.sidebar__item{width:100%;color:var(--muted);border-radius:14px;flex-direction:column;align-items:center;gap:4px;padding:6px 2px;text-decoration:none;display:flex}.sidebar__icon{background:var(--surface);border:1.5px solid var(--divider);width:44px;height:44px;color:var(--ink);border-radius:50%;justify-content:center;align-items:center;transition:background .15s,border-color .15s,color .15s;display:flex}.sidebar__icon svg{width:22px;height:22px}.sidebar__label{text-align:center;font-size:11px;font-weight:700;line-height:1.05}.sidebar__item:hover{color:var(--ink)}.sidebar__item:hover .sidebar__icon{border-color:var(--primary);color:var(--primary)}.sidebar__item.is-active{color:var(--primary)}.sidebar__item.is-active .sidebar__icon{background:var(--primary);border-color:var(--primary);color:#fff}.sidebar__spacer{flex:1}.sidebar__item--plain .sidebar__icon{background:0 0;border-color:#0000}.sidebar-backdrop{z-index:55;opacity:0;pointer-events:none;background:#1a1a2e80;transition:opacity .25s;position:fixed;top:0;bottom:0;left:0;right:0}.sidebar-backdrop.is-open{opacity:1;pointer-events:auto}@media (min-width:768px){.shell-body{padding-left:var(--sidebar-w)}.sidebar-backdrop{display:none}}@media (max-width:767px){.sidebar{transition:transform .25s;transform:translate(-100%);box-shadow:6px 0 30px #0000002e}.sidebar.is-open{transform:translate(0)}}.appbar__burger{color:var(--ink);background:0 0;border:none;border-radius:10px;flex-shrink:0;justify-content:center;align-items:center;width:40px;height:40px;font-size:20px;transition:background .15s,color .15s;display:none}.appbar__burger:hover{background:var(--primary-soft);color:var(--primary)}@media (max-width:767px){.appbar__burger{display:inline-flex}}.appbar{z-index:50;height:var(--shell-h);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--divider);background:#fffffff2;align-items:center;gap:12px;padding:0 16px;display:flex;position:-webkit-sticky;position:sticky;top:0}.appbar__title{align-items:center;min-width:0;margin-left:4px;display:flex}.appbar__name{text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:700;overflow:hidden}.appbar__actions{align-items:center;gap:8px;margin-left:auto;display:flex}.langtoggle{background:var(--primary-soft);border-radius:999px;align-items:center;padding:3px;display:inline-flex}.langtoggle__icon{padding:0 4px 0 6px;font-size:14px;line-height:1}.field-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin-bottom:6px;display:flex}.field-head .field-label{margin-bottom:0}.lang-select{align-items:center;gap:8px;display:inline-flex}.lang-select__label{text-transform:uppercase;letter-spacing:.04em;color:var(--muted);font-size:11px;font-weight:700}.lang-select__input{color:var(--ink);background:var(--surface);border:1px solid var(--divider);cursor:pointer;border-radius:10px;min-height:40px;padding:8px 12px;font-size:14px;font-weight:600}.lang-select__input:focus-visible{outline:2px solid var(--primary);outline-offset:1px}.langtoggle__btn{color:var(--muted);background:0 0;border:none;border-radius:999px;min-height:32px;padding:5px 12px;font-size:12px;font-weight:700;transition:background .15s,color .15s}.langtoggle__btn[aria-pressed=true]{background:var(--surface);color:var(--primary);box-shadow:0 1px 3px #0000001f}.iconbtn{border:1px solid var(--divider);background:var(--surface);color:var(--ink);border-radius:10px;justify-content:center;align-items:center;width:40px;height:40px;font-size:15px;font-weight:800;transition:border-color .15s,background .15s;display:inline-flex}.iconbtn:hover,.iconbtn--active{border-color:var(--primary);color:var(--primary)}.a11y-panel{top:var(--shell-h);z-index:40;background:var(--surface);border-bottom:1px solid var(--divider);position:-webkit-sticky;position:sticky;box-shadow:0 6px 16px -10px #0003}.a11y-panel__inner{grid-template-columns:1fr;gap:14px;max-width:880px;margin:0 auto;padding:16px;display:grid}@media (min-width:640px){.a11y-panel__inner{grid-template-columns:1fr 1fr}}.a11y-group{flex-direction:column;gap:6px;display:flex}.a11y-group--row{flex-direction:row;justify-content:space-between;align-items:center}.a11y-group__label{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;font-size:12px;font-weight:700}.segmented{background:#efefef;border-radius:10px;gap:3px;padding:3px;display:inline-flex}.segmented__btn{color:var(--muted);background:0 0;border:none;border-radius:8px;min-width:44px;min-height:38px;padding:8px 14px;font-size:13px;font-weight:600;transition:background .15s,color .15s}.segmented__btn:hover{color:var(--ink)}.segmented__btn[aria-pressed=true]{background:var(--surface);color:var(--ink);box-shadow:0 1px 4px #0000001f}.switch{background:#d1d5db;border:none;border-radius:999px;flex-shrink:0;width:52px;height:30px;transition:background .2s;position:relative}.switch[aria-checked=true]{background:var(--primary)}.switch__knob{background:#fff;border-radius:50%;width:24px;height:24px;transition:transform .2s;position:absolute;top:3px;left:3px;box-shadow:0 1px 3px #0000004d}.switch[aria-checked=true] .switch__knob{transform:translate(22px)}.app-main{padding:20px 16px 64px}.container{max-width:880px;margin:0 auto}.tool-subtitle{color:var(--muted);max-width:640px;margin-bottom:18px;font-size:15px}.panel{background:var(--surface);border:1.5px solid var(--divider);border-radius:var(--radius);padding:18px}.panel+.panel{margin-top:16px}.panel.drag-over{border-color:var(--primary);outline:2px dashed var(--primary);outline-offset:-3px;background:var(--primary-soft)}.panel.drag-over .textbox{background:var(--primary-soft)}.field-label{color:var(--muted);margin-bottom:6px;font-size:13px;font-weight:700;display:block}.textbox{border:1.5px solid var(--divider);border-radius:var(--radius-sm);background:var(--surface);width:100%;color:var(--ink);resize:vertical;min-height:120px;padding:14px;font-family:inherit;font-size:15px;line-height:1.6}.textbox:focus{border-color:var(--primary);outline:none;box-shadow:0 0 0 3px #2d6be426}.input{border:1.5px solid var(--divider);border-radius:var(--radius-sm);background:var(--surface);width:100%;color:var(--ink);padding:14px 16px;font-family:inherit;font-size:17px}.input:focus{border-color:var(--primary);outline:none;box-shadow:0 0 0 3px #2d6be426}.btn{border:none;border-radius:999px;justify-content:center;align-items:center;gap:8px;min-height:46px;padding:12px 22px;font-size:15px;font-weight:700;transition:background .15s,transform .1s,opacity .15s;display:inline-flex}.btn:active{transform:scale(.97)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn--primary{background:var(--primary);color:#fff}.btn--primary:hover:not(:disabled){background:var(--primary-dark)}.btn--ghost{background:var(--surface);color:var(--ink);border:1.5px solid var(--divider)}.btn--ghost:hover:not(:disabled){border-color:var(--primary);color:var(--primary)}.btn--dark{background:var(--ink);color:#fff}.btn--dark:hover:not(:disabled){background:#2c2c44}.btn--icon{border-radius:50%;width:56px;height:56px;padding:0;font-size:22px}.btn-row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.reading{font-size:var(--reading-size);letter-spacing:var(--reading-spacing);line-height:var(--reading-leading)}.slider-row{align-items:center;gap:12px;display:flex}.slider-row label{color:var(--muted);white-space:nowrap;font-size:13px;font-weight:700}input[type=range]{accent-color:var(--primary);flex:1;height:28px}.slider-value{color:var(--primary);text-align:right;min-width:42px;font-size:13px;font-weight:700}.status{color:var(--muted);margin-top:12px;font-size:14px}.status[data-kind=error]{color:var(--danger)}.status[data-kind=success]{color:var(--success)}.status[data-kind=warn]{color:#b45309}.banner{border-left:4px solid var(--close);border-radius:0 var(--radius-sm) var(--radius-sm) 0;color:#92610a;background:#fffbeb;align-items:flex-start;gap:10px;margin-bottom:16px;padding:12px 14px;font-size:14px;display:flex}.banner--info{border-left-color:var(--primary);background:var(--primary-soft);color:var(--primary-dark)}.sentences{margin-top:4px}.sentence{cursor:pointer;border-radius:6px;padding:2px 1px;transition:background .15s,color .15s;display:inline}.sentence:hover{background:var(--primary-soft)}.sentence.is-active{background:var(--primary);color:#fff;padding:3px 6px;box-shadow:0 2px 8px -2px #2d6be499}.sentence.is-done{color:var(--muted)}.words{margin-top:4px}.word{cursor:pointer;border-radius:6px;margin:2px 1px;padding:3px 8px;transition:background .15s,color .15s,box-shadow .15s,outline-color .15s;display:inline-block}.word:hover{background:var(--primary-soft)}.word.is-current{background:var(--primary);color:#fff}.word.state-correct{background:var(--success);color:#fff}.word.state-close{background:var(--close);color:var(--ink)}.word.state-wrong{background:var(--danger);color:#fff}.word.is-active{outline:3px solid var(--primary);outline-offset:1px;font-weight:800;box-shadow:0 2px 10px -3px #2d6be48c}.word.is-listening{animation:1.3s infinite wordlisten}@keyframes wordlisten{0%,to{box-shadow:0 0 #f7c9488c}50%{box-shadow:0 0 0 10px #f7c94800}}.word-nav{justify-content:space-between;align-items:center;gap:8px;margin-top:16px;display:flex}.word-nav__btn{color:var(--muted);letter-spacing:.1em;text-transform:uppercase;background:0 0;border:none;border-radius:8px;min-height:40px;padding:8px 10px;font-size:12px;font-weight:700;transition:color .15s,background .15s}.word-nav__btn:hover{color:var(--primary);background:var(--primary-soft)}.word-nav__btn--replay{letter-spacing:.04em}.coreader-progress{color:var(--muted);align-items:center;gap:10px;margin-top:16px;font-size:13px;display:flex}.coreader-track{background:var(--divider);border-radius:999px;flex:1;height:8px;overflow:hidden}.coreader-fill{background:var(--primary);width:0;height:100%;transition:width .2s}.legend{flex-wrap:wrap;gap:14px;margin-top:14px;display:flex}.legend span{color:var(--muted);align-items:center;gap:6px;font-size:13px;display:inline-flex}.legend i{border-radius:4px;width:14px;height:14px;display:inline-block}.word-card{border:1.5px solid var(--divider);border-radius:var(--radius);background:var(--surface);padding:16px 18px;transition:border-color .15s,transform .15s}.word-card:hover{border-color:var(--primary);transform:translateY(-2px)}.word-card__head{flex-wrap:wrap;align-items:baseline;gap:10px;display:flex}.word-card__word{font-size:22px;font-weight:800}.word-card__phon{font-family:var(--font);color:var(--primary);font-size:14px}.word-card__pos{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;font-size:12px;font-weight:700}.word-card__def{color:var(--ink);margin-top:6px;font-size:15px;line-height:1.6}.word-card__speak{margin-left:auto}.suggestions{gap:12px;margin-top:16px;display:grid}.summary-out{border-radius:var(--radius);background:var(--primary-soft);font-size:var(--reading-size);line-height:var(--reading-leading);white-space:pre-wrap;border:1.5px solid #dce6fb;margin-top:16px;padding:18px}.summary-out:empty{display:none}.char-counter{color:var(--muted);font-variant-numeric:tabular-nums;font-size:13px}.char-counter.is-over{color:var(--danger)}.spinner{border:2.5px solid #fff6;border-top-color:#fff;border-radius:50%;width:18px;height:18px;animation:.7s linear infinite spin;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.duo-completion{text-align:center;padding:24px;animation:.4s ease-out duoFadeUp}@keyframes duoFadeUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.duo-header h2{color:var(--ink);margin-bottom:6px;font-size:24px;font-weight:800}.duo-header p{color:var(--muted);margin-bottom:20px;font-size:15px}.duo-stats-grid{grid-template-columns:repeat(3,1fr);gap:16px;margin:20px 0 28px;display:grid}@media (max-width:550px){.duo-stats-grid{grid-template-columns:1fr;gap:12px}}.duo-stat-card{background:var(--surface);border:2px solid var(--divider);box-shadow:0 4px 0 var(--divider);border-radius:16px;flex-direction:column;align-items:center;padding:16px 8px;transition:transform .15s,box-shadow .15s;display:flex}.duo-stat-card:hover{box-shadow:0 6px 0 var(--divider);transform:translateY(-2px)}.duo-stat-card__icon{margin-bottom:6px;font-size:26px}.duo-stat-card__val{color:var(--ink);font-size:22px;font-weight:800;line-height:1.2}.duo-stat-card__val--xp{color:#ff9600}.duo-stat-card__val--acc{color:var(--success)}.duo-stat-card__val--time{color:var(--primary)}.duo-stat-card__label{color:var(--muted);text-transform:uppercase;letter-spacing:.05em;margin-top:4px;font-size:11px;font-weight:700}.duo-review{text-align:left;border-top:1.5px solid var(--divider);margin-top:24px;padding-top:24px}.duo-review__title{color:var(--ink);margin-bottom:4px;font-size:18px;font-weight:800}.duo-review__subtitle{color:var(--muted);margin-bottom:16px;font-size:13px}.duo-word-list{flex-direction:column;gap:10px;margin-bottom:24px;display:flex}.duo-word-item{background:var(--surface);border:2px solid var(--divider);box-shadow:0 3px 0 var(--divider);border-radius:14px;align-items:center;gap:12px;padding:10px 16px;transition:all .2s;display:flex}.duo-word-item:hover{border-color:var(--primary);box-shadow:0 3px 0 var(--primary-soft)}.duo-word-item__text{color:var(--ink);font-size:17px;font-weight:700}.duo-word-item__status{align-items:center;gap:8px;margin-left:auto;display:inline-flex}.duo-word-item__status-pill{text-transform:uppercase;letter-spacing:.05em;border-radius:999px;padding:3px 8px;font-size:11px;font-weight:700}.duo-word-item__status-pill--wrong{color:var(--danger);background:#fee2e2}.duo-word-item__status-pill--close{color:#b45309;background:#fef3c7}.duo-word-item__status-pill--correct{color:var(--success);background:#dcfce7}.duo-word-item__btn{background:var(--surface);border:none;border:1.5px solid var(--divider);cursor:pointer;border-radius:50%;justify-content:center;align-items:center;width:36px;height:36px;font-size:15px;transition:all .15s;display:inline-flex}.duo-word-item__btn:hover:not(:disabled){border-color:var(--primary);color:var(--primary);background:var(--primary-soft)}.duo-word-item__btn--mic:hover:not(:disabled){color:#ff9600;background:#fffbeb;border-color:#ff9600}.duo-word-item__btn--active{color:#ff9600;background:#fffbeb;border-color:#ff9600;animation:1.2s infinite duoPulse}@keyframes duoPulse{0%{transform:scale(1);box-shadow:0 0 #ff960066}70%{transform:scale(1.05);box-shadow:0 0 0 8px #ff960000}to{transform:scale(1);box-shadow:0 0 #ff960000}}.duo-btn-row{flex-wrap:wrap;justify-content:center;gap:12px;margin-top:24px;display:flex}.duo-btn-row .btn{flex:1;min-width:140px}.btn--duo-primary{color:#fff;background:#58cc02;border-bottom:4px solid #46a302}.btn--duo-primary:hover:not(:disabled){background:#61e002}.btn--duo-primary:active:not(:disabled){border-bottom-width:2px;transform:translateY(2px)}.btn--duo-secondary{background:var(--surface);color:var(--primary);border:2px solid var(--divider);border-bottom:4px solid var(--divider)}.btn--duo-secondary:hover:not(:disabled){border-color:var(--primary)}.btn--duo-secondary:active:not(:disabled){border-bottom-width:2px;transform:translateY(2px)}#confetti-canvas{pointer-events:none;z-index:100;width:100vw;height:100vh;position:fixed;top:0;bottom:0;left:0;right:0}.comp-challenge{text-align:center;padding:24px;animation:.4s ease-out duoFadeUp}.comp-header{margin-bottom:24px}.comp-header h2{color:var(--ink);margin-bottom:4px;font-size:22px;font-weight:800}.comp-header p{color:var(--muted);font-size:14px}.comp-progress{color:var(--muted);align-items:center;gap:10px;margin-bottom:20px;font-size:13px;font-weight:700;display:flex}.comp-progress-track{background:var(--divider);border-radius:999px;flex:1;height:8px;overflow:hidden}.comp-progress-fill{background:#58cc02;border-radius:999px;width:0;height:100%;transition:width .3s}.comp-prompt{color:var(--ink);text-align:left;margin-bottom:16px;font-size:15px;font-weight:700}.comp-answer-zone{border:2.5px dashed var(--divider);border-radius:var(--radius);background:var(--primary-soft);flex-wrap:wrap;justify-content:center;align-items:center;gap:8px;min-height:64px;margin-bottom:20px;padding:12px;transition:border-color .2s,background .2s,min-height .2s;display:flex}.comp-answer-zone:empty:after{content:"Tap words below to build the sentence";color:var(--muted);font-size:14px;font-style:italic}.comp-answer-zone.is-correct{border-color:var(--success);background:#dcfce7}.comp-answer-zone.is-wrong{border-color:var(--danger);background:#fee2e2;animation:.4s ease-in-out zoneShake}.comp-tile-bank{flex-wrap:wrap;justify-content:center;gap:8px;min-height:52px;margin-bottom:24px;padding:8px 0;display:flex}.comp-tile{background:var(--surface);border:2px solid var(--divider);border-bottom:4px solid var(--divider);min-width:44px;min-height:46px;color:var(--ink);cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border-radius:14px;justify-content:center;align-items:center;padding:8px 16px;font-weight:700;transition:transform .15s,background .15s,border-color .15s,opacity .15s,box-shadow .15s;animation:.25s ease-out tilePop;display:inline-flex}.comp-tile:hover{border-color:var(--primary);color:var(--primary);transform:translateY(-2px);box-shadow:0 4px 12px -4px #2d6be44d}.comp-tile:active{border-bottom-width:2px;transform:translateY(2px)}.comp-tile--placed{background:var(--primary-soft);border-color:var(--primary);color:var(--primary);border-bottom-width:2px}.comp-tile--placed:hover{border-color:var(--danger);color:var(--danger);background:#fee2e2}.comp-tile--ghost{visibility:hidden;pointer-events:none;background:0 0;border-color:#0000;border-bottom-width:2px}.comp-tile--correct{border-color:var(--success);color:var(--success);background:#dcfce7;animation:.35s ease-out tileCorrectPop}.comp-tile--wrong{animation:.4s ease-in-out tileShake}.comp-blank-sentence{color:var(--ink);text-align:center;background:var(--primary-soft);border-radius:var(--radius);margin-bottom:20px;padding:18px 16px;font-size:18px;font-weight:700;line-height:1.6}.comp-blank-sentence--revealed{color:var(--success);background:#dcfce7;transition:background .2s,color .2s}.comp-blank-sentence--wrong{color:var(--danger);background:#fee2e2;transition:background .2s,color .2s}.comp-sentence-preview{text-align:left;border:2px solid var(--success);border-radius:var(--radius);color:var(--success);background:#dcfce7;margin-bottom:20px;padding:14px 18px;font-weight:600;animation:.3s ease-out duoFadeUp}.comp-btn-row{flex-wrap:wrap;justify-content:center;gap:12px;display:flex}.comp-btn-row .btn{min-width:120px}@keyframes tilePop{0%{opacity:0;transform:scale(.8)}60%{transform:scale(1.05)}to{opacity:1;transform:scale(1)}}@keyframes tileCorrectPop{0%{transform:scale(1)}40%{transform:scale(1.15)}to{transform:scale(1)}}@keyframes tileShake{0%,to{transform:translate(0)}20%{transform:translate(-8px)}40%{transform:translate(8px)}60%{transform:translate(-6px)}80%{transform:translate(4px)}}@keyframes zoneShake{0%,to{transform:translate(0)}20%{transform:translate(-6px)}40%{transform:translate(6px)}60%{transform:translate(-4px)}80%{transform:translate(3px)}}
