:root{color-scheme:light;--bg: #f6f7f3;--surface: #ffffff;--surface-muted: #eef0e9;--border: #d7dbcf;--text: #202821;--text-dim: #57604f;--accent: #2f6f4e;--accent-dark: #234f38;--accent-contrast: #ffffff;--danger: #9c2f28;--danger-bg: #fbebe9;--focus: #1a5fb4;--radius-s: 8px;--radius-m: 12px;--radius-l: 18px;--space-1: 4px;--space-2: 8px;--space-3: 16px;--space-4: 24px;--space-5: 32px;--font-body: "Segoe UI", "Noto Sans", system-ui, -apple-system, sans-serif;--font-size-base: 18px;--max-width: 720px}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;min-height:100%;background:var(--bg);color:var(--text);font-family:var(--font-body);font-size:var(--font-size-base);line-height:1.6}#root{min-height:100vh;display:flex;flex-direction:column}img,video,audio{max-width:100%}a{color:var(--accent-dark)}:focus-visible{outline:3px solid var(--focus);outline-offset:2px}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.boot-screen{flex:1;display:grid;place-items:center;gap:var(--space-3);padding:var(--space-5);text-align:center;color:var(--text-dim);font-size:1.1em}.boot-screen--error{color:var(--danger)}.page{width:100%;max-width:var(--max-width);margin:0 auto;padding:var(--space-4) var(--space-3) var(--space-5);flex:1}.page--center{text-align:center;padding-top:var(--space-5)}.page__title{font-size:1.6em;line-height:1.3;margin:0 0 var(--space-3)}.page-fallback{padding:var(--space-5);text-align:center;color:var(--text-dim)}.back-link{display:inline-block;margin-bottom:var(--space-3);color:var(--text-dim);text-decoration:none}.back-link:hover,.back-link:focus-visible{text-decoration:underline}.section{margin-top:var(--space-5)}.section__title{font-size:1.2em;margin:0 0 var(--space-2)}.empty-state{color:var(--text-dim)}.error-banner{background:var(--danger-bg);color:var(--danger);border-radius:var(--radius-s);padding:var(--space-2) var(--space-3);margin:var(--space-2) 0}.field{display:block;margin-bottom:var(--space-3)}.field__label{display:block;margin-bottom:var(--space-1);font-weight:600;color:var(--text-dim)}.field__input{width:100%;padding:var(--space-2) var(--space-3);font-size:1em;border:1px solid var(--border);border-radius:var(--radius-s);background:var(--surface);color:var(--text);min-height:44px}.field__input:focus-visible{border-color:var(--focus)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-1);min-height:44px;padding:var(--space-2) var(--space-4);font-size:1em;font-family:inherit;border-radius:var(--radius-s);border:1px solid var(--border);background:var(--surface);color:var(--text);cursor:pointer;text-decoration:none}.btn:hover{background:var(--surface-muted)}.btn:disabled{opacity:.6;cursor:not-allowed}.btn--primary{background:var(--accent);border-color:var(--accent-dark);color:var(--accent-contrast)}.btn--primary:hover{background:var(--accent-dark)}.btn--danger{background:var(--danger);border-color:var(--danger);color:#fff}.btn--ghost{background:transparent;border-color:transparent;color:var(--text-dim)}.btn-group{display:flex;gap:var(--space-2)}.login-screen{flex:1;display:grid;place-items:center;padding:var(--space-4)}.login-form{width:100%;max-width:360px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-l);padding:var(--space-5) var(--space-4)}.login-form__title{font-size:1.3em;margin:0 0 var(--space-4);text-align:center}.login-form__hint{color:var(--text-dim);margin-bottom:var(--space-3)}.login-form__error{color:var(--danger)}.student-list,.lesson-list,.topic-list,.mistake-list,.assignment-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-2)}.student-card,.lesson-list__item{display:flex;justify-content:space-between;align-items:center;gap:var(--space-2);padding:var(--space-3);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-m);text-decoration:none;color:var(--text)}.student-card:hover,.lesson-list__item:hover{border-color:var(--accent)}.student-card__name{font-weight:600}.student-card__meta,.lesson-list__date{color:var(--text-dim);font-size:.9em}.fact-list{margin:var(--space-3) 0}.fact-list__row{display:flex;gap:var(--space-2);padding:var(--space-1) 0;border-bottom:1px solid var(--border)}.fact-list__row dt{width:140px;color:var(--text-dim);flex-shrink:0}.fact-list__row dd{margin:0}.topic-list__item{display:flex;justify-content:space-between;padding:var(--space-2) var(--space-3);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-s)}.topic-list__status{font-size:.85em;color:var(--text-dim)}.mistake-list__item{padding:var(--space-2) var(--space-3);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-s)}.mistake-list__row{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--space-2)}.mistake-list__tag{font-weight:600}.mistake-list__source,.mistake-list__date{color:var(--text-dim);font-size:.85em}.mistake-list__detail{display:block;margin-top:var(--space-1);color:var(--text-dim)}.assignment-list__item{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2);padding:var(--space-3);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-m)}.assignment-list__main{display:flex;gap:var(--space-2);align-items:baseline;flex:1;min-width:160px}.assignment-list__title{font-weight:600}.assignment-list__status{font-size:.85em;color:var(--text-dim)}.assignment-list__due{color:var(--text-dim);font-size:.9em}.result-list{list-style:none;margin:var(--space-3) 0 0;padding:0;display:flex;flex-direction:column;gap:var(--space-2)}.result-item{padding:var(--space-3);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-m)}.result-item__row{display:flex;align-items:flex-start;gap:var(--space-2)}.result-item__mark{flex-shrink:0;width:28px;height:28px;display:grid;place-items:center;border-radius:50%;font-weight:700;background:var(--surface-muted);color:var(--text-dim)}.result-item__mark--correct{background:var(--accent);color:var(--accent-contrast)}.result-item__mark--wrong{background:var(--danger-bg);color:var(--danger)}.result-item__mark--pending{background:var(--surface-muted);color:var(--text-dim)}.result-item__question{font-weight:600}.result-item__answer{margin:var(--space-1) 0 0 36px;color:var(--text-dim)}.result-item__expected{margin:var(--space-1) 0 0 36px;color:var(--danger)}.result-item__pending{margin:var(--space-1) 0 0 36px;color:var(--text-dim);font-style:italic}.result-item__feedback{margin:var(--space-1) 0 0 36px;color:var(--accent-dark)}.result-item__graded{margin-left:36px}.lesson-run__result{margin-top:var(--space-4)}.lesson-run__score{color:var(--text-dim);margin:var(--space-1) 0 0}.grade-form{margin:var(--space-2) 0 0 36px;display:flex;flex-direction:column;gap:var(--space-2);align-items:flex-start}.grade-form__marks{display:flex;gap:var(--space-3)}.grade-form__mark{display:flex;align-items:center;gap:var(--space-1);min-height:44px}.grade-form__comment{width:100%;resize:vertical}@media (max-width: 480px){:root{--font-size-base: 17px}.page{padding:var(--space-3) var(--space-2) var(--space-4)}.fact-list__row{flex-direction:column;gap:var(--space-1)}.fact-list__row dt{width:auto}.assignment-list__item{flex-direction:column;align-items:stretch}.result-item__answer,.result-item__expected,.result-item__pending,.result-item__feedback,.result-item__graded,.grade-form{margin-left:0}.app-header__inner{padding:var(--space-2)}.app-header__user{width:100%;margin-right:0}.page__head{align-items:flex-start}.page__head .btn-group{flex-wrap:wrap}.topic-list__item{flex-direction:column;align-items:flex-start;gap:var(--space-1)}.assign-panel{max-width:none}}.page__actions{margin:0 0 var(--space-3)}.page__actions .btn{display:inline-block;text-decoration:none}.app-header{position:sticky;top:0;z-index:10;background:var(--surface);border-bottom:1px solid var(--border)}.app-header__inner{max-width:var(--max-width);margin:0 auto;padding:var(--space-2) var(--space-3);display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap}.app-header__user{font-weight:600;margin-right:auto}.app-header__nav{display:flex;gap:var(--space-3)}.app-header__link{color:var(--text-dim);text-decoration:none;padding:var(--space-1) 0;border-bottom:2px solid transparent}.app-header__link:hover{color:var(--text)}.app-header__link--active{color:var(--text);border-bottom-color:var(--accent);font-weight:600}.app-header__logout{flex-shrink:0}.page__head{display:flex;justify-content:space-between;align-items:center;gap:var(--space-2);flex-wrap:wrap;margin-bottom:var(--space-3)}.page__head .page__title{margin-bottom:0}.section--first{margin-top:0}.entity-form{margin-top:var(--space-2)}.field__hint{color:var(--text-dim);font-size:.9em;margin:var(--space-1) 0 0}fieldset.field{border:none;padding:0;margin:0 0 var(--space-3)}fieldset.field legend.field__label{padding:0;margin-bottom:var(--space-1)}.topic-list__item{flex-wrap:wrap;align-items:center}.topic-list__title{font-weight:600}.topic-list__kind,.topic-list__source{color:var(--text-dim);font-weight:400;font-size:.9em}.topic-list__actions{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap}.topic-form{margin-top:var(--space-3);padding-top:var(--space-3);border-top:1px solid var(--border)}.topics-page__summary{color:var(--text-dim);margin:0 0 var(--space-3)}.topic-row{align-items:center}.topic-row__status{font-size:.9em;color:var(--text-dim);white-space:nowrap}.topic-row--done{border-color:var(--accent)}.topic-row--done .topic-row__status{color:var(--accent-dark);font-weight:600}.topic-row--current .topic-row__status{color:var(--accent-dark)}.topics-page--young{font-size:1.15em}.topics-page--young .page__title{font-size:1.7em}.topics-page--young .section__title{font-size:1.25em}.topics-page--young .topic-list__item{min-height:64px;padding:var(--space-3) var(--space-4);align-items:center}.topics-page--young .topic-row__status{font-size:1em}.generate-panel{margin-top:var(--space-2)}.generate-panel__topics{display:flex;flex-direction:column;gap:var(--space-1);margin:var(--space-1) 0}.job-status{margin-top:var(--space-2);display:flex;flex-direction:column;align-items:flex-start;gap:var(--space-2)}.job-status__line{font-weight:600;margin:0}.job-status__line--done{color:var(--accent-dark)}.job-status__line--failed{color:var(--danger)}.job-status__hint{color:var(--text-dim);margin:0}.lesson-page__assign{margin-bottom:var(--space-4)}.assign-panel{max-width:320px}.install-banner{position:fixed;left:50%;transform:translate(-50%);bottom:calc(var(--space-3) + env(safe-area-inset-bottom,0px));z-index:50;width:min(23rem,calc(100% - var(--space-3) * 2));background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-l);box-shadow:0 8px 28px #20282129;padding:var(--space-3)}.install-banner__row{display:flex;align-items:flex-start;gap:var(--space-2)}.install-banner__body{min-width:0;flex:1}.install-banner__title{margin:0;font-weight:600;font-size:1em}.install-banner__hint{margin:var(--space-1) 0 0;color:var(--text-dim);font-size:.82em;line-height:1.4}.install-banner__close{flex-shrink:0;margin:-4px -4px 0 0;min-height:32px;min-width:32px;display:grid;place-items:center;border:none;background:transparent;color:var(--text-dim);font-size:1.4em;line-height:1;cursor:pointer;border-radius:var(--radius-s)}.install-banner__close:hover{background:var(--surface-muted);color:var(--text)}.install-banner__action{margin-top:var(--space-2)}.install-banner__btn{width:100%}.install-banner__manual{margin:0;padding:var(--space-2);background:var(--surface-muted);border-radius:var(--radius-s);color:var(--text-dim);font-size:.82em}.install-banner__steps{margin:var(--space-2) 0 0;padding:0;list-style:none;display:flex;flex-direction:column;gap:var(--space-1);font-size:.85em;color:var(--text-dim)}.install-banner__steps li{display:flex;align-items:center;gap:var(--space-2)}.install-banner__step-num{flex-shrink:0;width:20px;height:20px;display:grid;place-items:center;border-radius:50%;background:var(--surface-muted);color:var(--text-dim);font-size:.8em;font-weight:700}@media (max-width: 480px){.install-banner{width:calc(100% - var(--space-3) * 2)}}.lesson-page__toolbar{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:var(--space-2);margin-bottom:var(--space-3)}.lesson-goals{margin:0 0 var(--space-4);padding-left:1.2em;color:var(--text-dim)}.lesson-blocks{display:flex;flex-direction:column;gap:var(--space-4)}.block{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-l);padding:var(--space-4)}.block-inner--placeholder{color:var(--text-dim);font-style:italic}.block__title{font-size:1.15em;margin:0 0 var(--space-2)}.block__text{margin:0 0 var(--space-2)}.block__teacher-note{display:block;margin-top:var(--space-3);padding:var(--space-2) var(--space-3);background:var(--surface-muted);border-radius:var(--radius-s);color:var(--text-dim);font-size:.9em}.explanation-examples{margin:0;padding-left:1.2em;color:var(--text-dim)}.vocabulary-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-3)}.vocabulary-list__item{padding-bottom:var(--space-2);border-bottom:1px solid var(--border)}.vocabulary-list__item:last-child{border-bottom:none}.vocabulary-list__words{display:flex;gap:var(--space-2);flex-wrap:wrap;align-items:baseline}.vocabulary-list__term{font-weight:600}.vocabulary-list__translation{color:var(--text-dim)}.vocabulary-list__example{color:var(--text-dim);font-style:italic;margin:var(--space-1) 0}.vocabulary-list__audio{display:block;margin-top:var(--space-1);width:100%}.vocabulary-list__item .media-placeholder{margin-top:var(--space-2)}.gap-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-3)}.gap-list__sentence{line-height:2.4}.gap-list__input{display:inline-block;min-width:120px;padding:var(--space-1) var(--space-2);font-size:1em;font-family:inherit;border:1px solid var(--border);border-bottom:2px solid var(--accent);border-radius:var(--radius-s);margin:0 var(--space-1)}.gap-list__blank{border-bottom:2px solid var(--text-dim);padding:0 var(--space-2)}.gap-list__hint{color:var(--text-dim);font-size:.9em;margin:var(--space-1) 0 0}.choice-item{border:none;padding:0;margin:0 0 var(--space-3)}.choice-item:last-child{margin-bottom:0}.choice-item__question{font-weight:600;padding:0;margin-bottom:var(--space-2)}.choice-item__options{display:flex;flex-direction:column;gap:var(--space-1)}.choice-option{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-1) 0;min-height:44px}.choice-option input{width:22px;height:22px;flex-shrink:0}.choice-item__hint{color:var(--text-dim);font-size:.9em;margin-top:var(--space-1)}.question-list{list-style:decimal;margin:0;padding-left:1.3em}.question-list__item{margin-bottom:var(--space-3)}.question-list__text{font-weight:600;margin:0 0 var(--space-2)}.match-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-2)}.match-list__row{display:flex;align-items:center;gap:var(--space-2)}.match-list--static .match-list__row{color:var(--text-dim)}.match-list__left{flex:1;font-weight:600}.match-list__select{flex:1;min-height:44px;padding:var(--space-1) var(--space-2);border:1px solid var(--border);border-radius:var(--radius-s);font-size:1em;font-family:inherit}.order-item{margin-bottom:var(--space-3)}.order-item__sentence{min-height:44px;display:flex;flex-wrap:wrap;gap:var(--space-1);padding:var(--space-2);border:1px dashed var(--border);border-radius:var(--radius-s);margin-bottom:var(--space-2)}.order-item__placeholder{color:var(--text-dim)}.order-item__bank{display:flex;flex-wrap:wrap;gap:var(--space-1)}.word-chip{min-height:44px;padding:var(--space-1) var(--space-3);border:1px solid var(--border);border-radius:var(--radius-l);background:var(--surface-muted);cursor:pointer;font-size:1em;font-family:inherit}.word-chip--picked{background:var(--accent);border-color:var(--accent-dark);color:var(--accent-contrast)}.order-item__reset{margin-top:var(--space-2)}.order-item--static{color:var(--text-dim)}.writing-block__textarea{width:100%;padding:var(--space-2) var(--space-3);font-size:1em;font-family:inherit;border:1px solid var(--border);border-radius:var(--radius-s);resize:vertical}.writing-block__count{color:var(--text-dim);margin-top:var(--space-1)}.writing-block__count--low{color:var(--danger)}.writing-block__hint{color:var(--text-dim)}.speaking-block__reference{color:var(--text-dim);font-style:italic}.speaking-block__controls{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2);margin-top:var(--space-2)}.speaking-block__playback{flex-basis:100%}.speaking-block__saved{color:var(--accent-dark);margin-top:var(--space-2)}.listening-block__audio{width:100%;margin-bottom:var(--space-3)}.reading-block__text{white-space:pre-wrap;margin-bottom:var(--space-3)}.image-block,.video-block{margin:0}.image-block__img{border-radius:var(--radius-m);display:block}.image-block__caption,.video-block__caption{color:var(--text-dim);font-size:.9em;margin-top:var(--space-1)}.video-block__player{width:100%;border-radius:var(--radius-m)}.media-placeholder{border:1px dashed var(--border);border-radius:var(--radius-m);padding:var(--space-3);background:var(--surface-muted)}.media-placeholder__hint{margin:0 0 var(--space-2);font-weight:600}.media-placeholder__note{margin:0 0 var(--space-2);color:var(--text-dim);font-size:.9em}.media-placeholder__error{margin-top:var(--space-2)}.media-pending{margin:0;padding:var(--space-3);background:var(--surface-muted);border-radius:var(--radius-m);color:var(--text-dim);font-style:italic}.lesson-page--present{font-size:22px}.lesson-page--present .block{padding:var(--space-5)}.lesson-page--present .page__title{font-size:1.9em}.lesson-page__exit{margin-bottom:var(--space-3)}.lesson-run__footer{margin-top:var(--space-4);display:flex;flex-direction:column;gap:var(--space-2);align-items:flex-start}.lesson-run__done{color:var(--accent-dark);font-weight:600}.lesson-preview__debug{margin-top:var(--space-4);color:var(--text-dim)}.lesson-preview__debug pre{white-space:pre-wrap;word-break:break-word}@media (max-width: 480px){.block{padding:var(--space-3);border-radius:var(--radius-m)}.lesson-page--present .block{padding:var(--space-4)}.lesson-page--present{font-size:20px}.match-list__row{flex-direction:column;align-items:stretch}}
