:root{--bg:#faf8f3;--card:#fff;--line:#e7e2d8;--line-strong:#9a9488;--wash:#f4f1e9;--text:#1f2a2e;--muted:#6b7478;--accent:#1f6f5f;--accent-strong:#185a4d;--accent-soft:#e4f0ed;--amber:#b7791f;--amber-text:#855510;--amber-soft:#fbf1df;--red:#b42318;--red-soft:#fbeae8;--green:#1b7f4b;--green-soft:#e4f3ea;--radius:12px;--radius-sm:8px;--font:-apple-system, "PingFang TC", "Noto Sans TC", "Microsoft JhengHei", system-ui, sans-serif;--mono:ui-monospace, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;--shadow:0 1px 2px #1f2a2e0a;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;accent-color:var(--accent)}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}body{background:var(--bg);color:var(--text);font-family:var(--font);overflow-wrap:anywhere;margin:0;font-size:16px;line-height:1.6}h1,h2,h3,p,ul,ol,dl,dd,fieldset,legend{margin:0;padding:0}ul,ol{list-style:none}fieldset{border:0;min-width:0}h1{font-size:1.5rem;font-weight:700;line-height:1.3}h2{font-size:1.0625rem;font-weight:700;line-height:1.4}h3{font-size:1rem;font-weight:700;line-height:1.4}a{color:var(--accent);text-underline-offset:3px}button,input,select,textarea{font:inherit;color:inherit}img{max-width:100%}[hidden]{display:none!important}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.visually-hidden{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.muted{color:var(--muted)}.mono{font-family:var(--mono);font-size:.875em}.text-red{color:var(--red)}.text-amber{color:var(--amber-text)}.page{max-width:1200px;margin:0 auto;padding:24px 20px 72px}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.pad{padding:18px 20px}.card.pad>*+*{margin-top:12px}.card__title{font-size:1rem;font-weight:700;display:block}.stack{flex-direction:column;gap:16px;display:flex}.list-plain{list-style:none}.row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.grid-2{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 16px;display:grid}.section-title{color:var(--muted);margin-top:8px}.btn{border:1px solid var(--line-strong);border-radius:var(--radius-sm);background:var(--card);min-height:44px;color:var(--text);cursor:pointer;white-space:nowrap;justify-content:center;align-items:center;gap:6px;padding:8px 16px;font-weight:600;line-height:1.3;text-decoration:none;transition:background-color .12s,border-color .12s;display:inline-flex}.btn:hover:not(:disabled){background:var(--wash)}.btn:disabled{cursor:not-allowed;color:#9aa1a4;border-color:var(--line);background:#f6f4ef}.btn--small{min-height:40px;padding:6px 12px;font-size:.9375rem}.btn--wide{width:100%}.btn--primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn--primary:hover:not(:disabled){background:var(--accent-strong);border-color:var(--accent-strong)}.btn--primary:disabled{color:#fff;background:#c9d5d1;border-color:#c9d5d1}.btn--danger{background:var(--red);border-color:var(--red);color:#fff}.btn--danger:hover:not(:disabled){background:#8f1b12;border-color:#8f1b12}.btn--danger:disabled{color:#fff;background:#e3bdb9;border-color:#e3bdb9}.btn--quiet{color:var(--accent);background:0 0;border-color:#0000}.btn--quiet-danger{color:var(--red);background:0 0;border-color:#0000}.btn--quiet-danger:hover:not(:disabled){background:var(--red-soft)}.btn--pass{border-color:var(--green);color:var(--green)}.btn--pass:hover:not(:disabled){background:var(--green-soft)}.btn--reject{border-color:var(--red);color:var(--red)}.btn--reject:hover:not(:disabled){background:var(--red-soft)}.chip{white-space:nowrap;border:1px solid #0000;border-radius:999px;align-items:center;min-height:24px;padding:1px 10px;font-size:.8125rem;font-weight:600;line-height:1.5;display:inline-flex}.chip--neutral{background:var(--wash);border-color:var(--line);color:#46514f}.chip--muted{border-color:var(--line);color:var(--muted);background:0 0}.chip--green{background:var(--green-soft);color:#14613a}.chip--amber{background:var(--amber-soft);color:var(--amber-text)}.chip--red{background:var(--red-soft);color:var(--red)}.chip--accent{background:var(--accent);color:#fff}.tag{background:var(--wash);color:#4d5856;white-space:nowrap;border-radius:6px;padding:0 8px;font-size:.8125rem;font-weight:600;line-height:1.7;display:inline-block}.env{white-space:nowrap;border:1px solid #0000;border-radius:6px;align-items:center;padding:2px 10px;font-size:.8125rem;font-weight:700;display:inline-flex}.env--staging{background:var(--amber-soft);color:var(--amber-text);border-color:#e3c283}.env--production{background:var(--red);color:#fff}.env--local{color:#4b5559;background:#eceae4;border-color:#d8d3c8}.state{color:var(--muted);text-align:center;flex-direction:column;align-items:center;gap:10px;padding:40px 20px;display:flex}.state--error{border-radius:var(--radius);background:var(--red-soft);color:var(--text);border:1px solid #efc9c4}.state--empty{border:1px dashed var(--line-strong);border-radius:var(--radius)}.state__title{color:var(--text);font-weight:700}.state--error .state__title{color:var(--red)}.state__text{max-width:60ch}.spinner{border:3px solid var(--line);border-top-color:var(--accent);border-radius:50%;width:22px;height:22px;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.notice{border-left:3px solid var(--muted);background:var(--wash);border-radius:6px;padding:10px 12px;font-size:.9375rem}.notice--error{border-color:var(--red);background:var(--red-soft);color:#7a1810}.notice--warn{border-color:var(--amber);background:var(--amber-soft);color:#6b440c}.notice--ok{border-color:var(--green);background:var(--green-soft);color:#14613a}.notice--info{margin-bottom:16px}.notice>*+*{margin-top:6px}.notice__small{font-size:.875rem}.notice__action{margin-top:8px;display:flex}.hint{color:var(--muted);font-size:.875rem}.hint--warn{color:var(--amber-text)}.field{flex-direction:column;gap:4px;min-width:0;display:flex}.field__label{color:#46514f;font-size:.875rem;font-weight:600}.field__hint{color:var(--muted);font-size:.8125rem}.input{border:1px solid var(--line-strong);border-radius:var(--radius-sm);background:#fff;width:100%;min-height:44px;padding:8px 12px;font-size:16px;line-height:1.5}.input::placeholder{color:#9aa1a4}.input:focus-visible{border-color:var(--accent);outline:2px solid var(--accent);outline-offset:0}.input:disabled{border-color:var(--line);color:#4d5856;-webkit-text-fill-color:#4d5856;opacity:1;background:#f6f4ef}.input--area{resize:vertical;field-sizing:content;min-height:calc(2lh + 18px);display:block}.input--mono{font-family:var(--mono)}.input--select{appearance:none;text-overflow:ellipsis;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5l5 5 5-5' fill='none' stroke='%236B7478' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-position:right 12px center;background-repeat:no-repeat;padding-right:32px}.input.is-bad{border-color:var(--red)}.topbar{background:var(--card);border-bottom:1px solid var(--line)}.topbar__inner{flex-wrap:wrap;align-items:center;gap:6px 12px;max-width:1200px;min-height:56px;margin:0 auto;padding:6px 20px;display:flex}.topbar__brand{min-height:40px;color:var(--text);white-space:nowrap;align-items:center;font-size:1.0625rem;font-weight:700;text-decoration:none;display:inline-flex}.topbar__space{flex:1 1 0}.topbar__account{max-width:260px;color:var(--muted);text-overflow:ellipsis;white-space:nowrap;font-size:.875rem;overflow:hidden}.signin{place-items:center;min-height:100dvh;padding:24px 16px;display:grid}.signin__card{width:min(100%,440px);padding:28px 24px}.signin__brand{flex-wrap:wrap;align-items:center;gap:8px 12px;margin-bottom:20px;display:flex}.signin__brand h1{font-size:1.375rem}.signin__block{flex-direction:column;align-items:stretch;gap:14px;display:flex}.signin__heading{font-size:1.125rem}.signin__unset{border:1px dashed var(--line-strong);border-radius:var(--radius-sm);color:var(--muted);text-align:center;padding:12px}.signin__test{border-top:1px solid var(--line);padding-top:8px}.signin__test summary{min-height:40px;color:var(--muted);cursor:pointer;align-items:center;font-size:.875rem;list-style-position:inside;display:flex}.signin__test summary:before{content:"▸";margin-right:6px}.signin__test[open] summary:before{content:"▾"}.signin__test summary::-webkit-details-marker{display:none}.signin__form{flex-direction:column;align-items:flex-start;gap:6px;padding-top:4px;display:flex}.account-card{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--bg);gap:10px;padding:12px 14px;display:grid}.account-card dt{color:var(--muted);font-size:.8125rem}.account-card dd{-webkit-user-select:all;user-select:all;font-weight:600}.course+.course{margin-top:48px}.course__head{gap:8px;margin-bottom:8px;display:grid}.course__count{font-size:1.0625rem}.course__count strong{color:var(--accent);font-size:1.1875rem}.course__about{max-width:78ch;color:var(--muted);font-size:.9375rem}.theme{margin-top:28px}.theme__title{flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin-bottom:10px;display:flex}.theme__no{color:var(--accent);font-size:.875rem}.theme__en{color:var(--muted);font-size:.9375rem;font-weight:400}.units{overflow:hidden}.units>li+li{border-top:1px solid var(--line)}.unit{color:inherit;grid-template-columns:88px minmax(0,1fr) minmax(0,300px);align-items:start;gap:6px 16px;padding:14px 18px;text-decoration:none;display:grid}a.unit--open:hover{background:#fcfbf8}a.unit--open:focus-visible{outline-offset:-2px}.unit__no{color:var(--muted);white-space:nowrap;font-size:.875rem;font-weight:600;line-height:1.8}.unit__titles{flex-wrap:wrap;align-items:baseline;gap:2px 10px;display:flex}.unit__en{font-weight:700}a.unit--open .unit__en{color:var(--accent-strong)}.unit__zh{color:#3b4648}.unit__goal{color:var(--muted);-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;margin-top:2px;font-size:.875rem;display:-webkit-box;overflow:hidden}.unit__state{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:6px;display:flex}.unit__when{color:var(--muted);text-align:right;flex-basis:100%;font-size:.8125rem}.unit--planned .unit__en,.unit--planned .unit__zh{color:var(--muted);font-weight:600}.crumbs{color:var(--muted);flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:10px;font-size:.9375rem;display:flex}.crumbs a{align-items:center;min-height:40px;display:inline-flex}.lesson-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:12px 24px;margin-bottom:20px;display:flex}.lesson-head__unit{color:var(--muted);font-size:.875rem;font-weight:600}.lesson-head__zh{color:#3b4648;font-size:1.0625rem}.lesson-head__meta{flex-wrap:wrap;align-items:center;gap:6px 8px;display:flex}.lesson-head__when{color:var(--muted);font-size:.8125rem}.lesson-layout{grid-template-columns:minmax(0,1fr) 340px;align-items:start;gap:24px;display:grid}.lesson-main{min-width:0}.tabs{border-bottom:1px solid var(--line);scrollbar-width:none;overscroll-behavior-x:contain;gap:2px;margin-bottom:16px;display:flex;overflow-x:auto}.tabs::-webkit-scrollbar{display:none}.tab{min-height:44px;color:var(--muted);white-space:nowrap;cursor:pointer;background:0 0;border:0;border-bottom:3px solid #0000;flex:none;align-items:center;gap:6px;padding:0 14px;font-weight:600;display:inline-flex}.tab:hover{color:var(--text)}.tab[aria-selected=true]{border-bottom-color:var(--accent);color:var(--accent)}.tab:focus-visible{outline-offset:-3px}.tab__count{background:var(--amber-soft);min-width:20px;color:var(--amber-text);text-align:center;border-radius:999px;padding:0 6px;font-size:.75rem;line-height:20px}.side{overscroll-behavior:contain;flex-direction:column;gap:16px;max-height:calc(100dvh - 32px);scroll-margin-top:16px;display:flex;position:sticky;top:16px;overflow-y:auto}.side__head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;display:flex}.side__later{border-top:1px solid var(--line);color:var(--muted);padding-top:12px;font-size:.875rem}.checks__counts{gap:16px;font-size:.9375rem;display:flex}.checks__counts strong{font-size:1.25rem}.checks__facts,.checks__version{color:var(--muted);font-size:.8125rem}.checks__pass{background:var(--green-soft);color:#14613a;border-radius:6px;padding:10px 12px;font-weight:700}.faults{gap:6px;display:grid}.faults li{border-left:3px solid;border-radius:6px;padding:8px 10px;font-size:.9375rem;line-height:1.5}.faults--error li{border-color:var(--red);background:var(--red-soft);color:#7a1810}.faults--warn li{border-color:var(--amber);background:var(--amber-soft);color:#6b440c}.faults code{font-family:var(--mono);opacity:.8;word-break:break-all;margin-top:2px;font-size:.75rem;display:block}.unsaved-mark{color:var(--amber-text);align-items:center;gap:6px;font-size:.875rem;font-weight:700;display:inline-flex}.unsaved-mark:before{background:var(--amber);content:"";border-radius:50%;width:8px;height:8px}.unsaved-bar{display:none}.story-count{color:#3b4648}.story-count strong{color:var(--accent);font-size:1.125rem}.panel{padding:16px 20px 18px}.panel__head{align-items:center;gap:10px;margin-bottom:12px;display:flex}.panel__grid{grid-template-columns:232px minmax(0,1fr);align-items:start;gap:20px;display:grid}.panel__content{flex-direction:column;gap:12px;min-width:0;display:flex}.sentences{flex-direction:column;display:flex}.sentence{border-top:1px solid var(--line);gap:6px;padding:12px 0;display:grid}.sentence:last-child{padding-bottom:0}.sentence__head{align-items:center;gap:10px;display:flex}.sentence__no{background:var(--accent-soft);min-width:28px;height:28px;color:var(--accent-strong);border-radius:999px;flex:none;place-items:center;padding:0 6px;font-size:.875rem;font-weight:700;display:inline-grid}.sentence__speaker{flex:0 150px}.sentence__speaker .input{min-height:40px;padding-top:5px;padding-bottom:5px}.sentence__count{color:var(--muted);white-space:nowrap;margin-left:auto;font-size:.8125rem}.parts{border-radius:var(--radius-sm);background:var(--bg);gap:6px;padding:10px 12px;display:grid}.parts__title{color:var(--muted);font-size:.8125rem}.parts__row{grid-template-columns:auto minmax(0,1fr);align-items:center;gap:8px;display:grid}.picture{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--wash);width:100%;padding:0;display:block;overflow:hidden}.picture img{object-fit:cover;width:100%;height:100%;display:block}.picture--button{cursor:zoom-in}.picture--none{border-style:dashed;border-color:var(--line-strong);color:var(--muted);text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:6px;padding:12px;font-size:.875rem;display:flex}.picture__why{font-size:.8125rem}.picture--loading{animation:1.4s ease-in-out infinite pulse}@keyframes pulse{50%{opacity:.55}}.modal{border:1px solid var(--line);border-radius:var(--radius);background:var(--card);width:min(480px,100vw - 32px);max-height:calc(100dvh - 32px);color:var(--text);padding:20px;box-shadow:0 18px 48px #1f2a2e3d}.modal:modal{overscroll-behavior:contain}.modal::backdrop{overscroll-behavior:contain;background:#1f2a2e80;overflow:hidden}.modal__title{margin-bottom:10px;font-size:1.125rem}.modal__body{gap:8px;display:grid}.modal__actions{flex-wrap:wrap;justify-content:flex-end;gap:8px;margin-top:18px;display:flex}.lightbox{width:auto;max-width:min(1100px,100vw - 24px);padding:10px}.lightbox__image{object-fit:contain;border-radius:6px;max-width:100%;max-height:calc(100dvh - 140px);margin:0 auto;display:block}.lightbox__wait{aspect-ratio:4/3;width:min(70vw,640px);color:var(--muted);place-items:center;display:grid}.lightbox__bar{flex-wrap:wrap;justify-content:center;align-items:center;gap:8px;margin-top:10px;display:flex}.lightbox__label{text-align:center;flex:auto;min-width:120px;font-size:.9375rem;font-weight:600}.keylines{display:grid}.keyline{border-top:1px solid var(--line);grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:8px 12px;padding:14px 0;display:grid}.keyline__fields{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 12px;display:grid}.keyline__fields>:first-child,.keyline__fields>.hint{grid-column:1/-1}.items{grid-template-columns:repeat(auto-fill,minmax(min(100%,360px),1fr));align-items:start;gap:16px;display:grid}.item__head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 12px;display:flex}.item__term{font-size:1.25rem}.segmented{border:1px solid var(--line-strong);border-radius:var(--radius-sm);display:inline-flex;overflow:hidden}.segmented label{min-height:40px;color:var(--muted);cursor:pointer;background:#fff;align-items:center;padding:0 16px;font-size:.9375rem;font-weight:600;display:inline-flex}.segmented label+label{border-left:1px solid var(--line-strong)}.segmented label.is-on{background:var(--accent);color:#fff}.segmented input{opacity:0;pointer-events:none;position:absolute}.segmented label:focus-within{outline:2px solid var(--accent);outline-offset:-4px}.segmented label.is-on:focus-within{outline-color:#fff}.segmented:disabled label{cursor:not-allowed;opacity:.7}.question__head{flex-wrap:wrap;align-items:center;gap:6px 10px;display:flex}.question__from{font-size:.875rem}.choices{gap:8px;display:grid}.choices legend{margin-bottom:6px}.choice{border:1px solid var(--line);border-radius:var(--radius-sm);grid-template-columns:112px minmax(0,1fr);align-items:center;gap:8px 10px;padding:8px 10px;display:grid}.choice.is-right{border-color:var(--green);background:var(--green-soft)}.choice__pick{min-height:40px;color:var(--muted);cursor:pointer;align-items:center;gap:8px;font-size:.875rem;font-weight:600;display:inline-flex}.choice.is-right .choice__pick{color:#14613a}.choice__pick input{width:20px;height:20px;margin:0}.choice__fields{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.reminder ul{flex-wrap:wrap;gap:8px 12px;display:flex}.reminder li{background:var(--amber-soft);color:#6b440c;border:1px solid #e3c283;border-radius:999px;padding:4px 14px;font-weight:700}.reminder__title{font-weight:600}.shots{grid-template-columns:repeat(auto-fill,minmax(min(100%,250px),1fr));align-items:start;gap:16px;display:grid}.shot{overflow:hidden}.shot .picture{border-width:0 0 1px;border-radius:0}.shot .picture--none{border-style:dashed}.shot__body{gap:8px;padding:12px 14px 14px;display:grid}.shot__head{justify-content:space-between;align-items:center;gap:8px;display:flex}.shot__facts{color:var(--muted);font-size:.8125rem}.shot__note{background:var(--red-soft);color:#7a1810;border-radius:6px;padding:6px 10px;font-size:.875rem}.shot__actions{flex-wrap:wrap;gap:8px;display:flex}.json{white-space:pre;tab-size:2;field-sizing:fixed;min-height:62vh;font-size:14px;line-height:1.55;overflow:auto}@media (pointer:coarse){.json{font-size:16px}}.rows>li+li{border-top:1px solid var(--line)}.rev{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px 16px;padding:14px 18px;display:flex}.rev__main{flex:280px;gap:2px;min-width:0;display:grid}.rev__line{flex-wrap:wrap;align-items:center;gap:6px 8px;display:flex}.rev__meta{color:var(--muted);font-size:.8125rem}.log{grid-template-columns:132px minmax(0,1fr) auto;align-items:baseline;gap:4px 16px;padding:12px 18px;display:grid}.log__when,.log__who{color:var(--muted);white-space:nowrap;font-size:.875rem}.log__what{flex-wrap:wrap;align-items:baseline;gap:2px 10px;display:flex}.log__kind{color:var(--muted);font-size:.75rem}.log__reason{color:#3b4648;font-size:.9375rem}@media (max-width:960px){.lesson-layout{grid-template-columns:minmax(0,1fr)}.side{max-height:none;position:static;overflow:visible}.unsaved-bar{z-index:5;padding:8px 16px calc(8px + env(safe-area-inset-bottom));border-top:1px solid var(--line);background:var(--card);color:var(--amber-text);justify-content:space-between;align-items:center;gap:12px;font-size:.9375rem;font-weight:700;display:flex;position:fixed;bottom:0;left:0;right:0;box-shadow:0 -4px 16px #1f2a2e14}.page--bar{padding-bottom:120px}}@media (max-width:720px){.page{padding:16px 16px 64px}h1{font-size:1.3125rem}.topbar__inner{padding:6px 16px}.pad{padding:16px}.grid-2,.keyline__fields,.choice__fields{grid-template-columns:minmax(0,1fr)}.unit{grid-template-columns:minmax(0,1fr);padding:14px 16px}.unit__state{justify-content:flex-start;margin-top:4px}.unit__when{text-align:left;flex-basis:auto}.panel{padding:14px 16px 16px}.panel__grid{grid-template-columns:minmax(0,1fr);gap:14px}.panel__picture{max-width:440px}.keyline{grid-template-columns:minmax(0,1fr)}.keyline>.btn{justify-self:start}.choice{grid-template-columns:minmax(0,1fr)}.log{grid-template-columns:minmax(0,1fr) auto}.log__when{grid-column:1/-1}.rev,.log{padding:12px 16px}}@media (max-width:560px){.topbar__inner{gap:0 10px}.topbar__account{flex-basis:100%;order:10;max-width:none;padding-bottom:6px;font-size:.8125rem}.topbar .btn--quiet{padding-left:8px;padding-right:8px}}@media (prefers-reduced-motion:reduce){.spinner,.picture--loading{animation:none}.btn{transition:none}}
