:root{--kj-color-paper:#f7f3e8;--kj-color-text:#26332f;--kj-color-text-muted:#5b6862;--kj-color-primary:#285d55;--kj-color-primary-fg:#fff;--kj-color-accent:#a83f32;--kj-color-silk:#c6a66a;--kj-color-surface:#fff;--kj-color-border:#8a7a5a;--kj-color-border-strong:#7a6a4a;--kj-color-disabled:#e3dfd5;--kj-color-disabled-text:#5f5f5f;--kj-color-banner-bg:#c6a66a47;--kj-color-node-bg:#e4efe6;--kj-color-path:#9fb5a8;--kj-color-progress-bg:#e4efe6;--kj-color-tab-active-bg:#285d551f;--kj-color-oauth:#0b6b3a;--kj-color-oauth-fg:#fff;--kj-color-switch-off:#6f6f6f;--kj-color-switch-knob:#fff;--kj-color-focus:#a83f32;--kj-color-overlay:#26332f6b;--kj-space-page-x:16px;--kj-space-page-y:12px;--kj-space-card-padding:14px;--kj-radius-card:14px;--kj-radius-button:24px;--kj-radius-chip:8px;--kj-font-sans:system-ui, "PingFang SC", "Microsoft YaHei", sans-serif;--kj-font-serif:"Noto Serif SC", "Source Han Serif SC", "Songti SC", serif;--kj-text-title:18px;--kj-text-body:15px;--kj-text-caption:12px;--kj-shadow-card:0 2px 8px #26332f14;--kj-layout-max:480px;--kj-touch-min:44px}html[data-skin=leaf]{--kj-color-paper:#e7f2ea;--kj-color-surface:#fbfdfb;--kj-color-text:#1f332b;--kj-color-text-muted:#4e625a;--kj-color-primary:#1f6b4a;--kj-color-border:#6f8a78;--kj-color-border-strong:#5d7a66;--kj-color-disabled:#dbe7df;--kj-color-disabled-text:#4f5f56;--kj-color-banner-bg:#1f6b4a29;--kj-color-node-bg:#d6eadf;--kj-color-path:#9fc3ae;--kj-color-progress-bg:#d6eadf;--kj-color-tab-active-bg:#1f6b4a24;--kj-color-oauth:#0b6b3a;--kj-color-overlay:#162c2273}html[data-skin=sea]{--kj-color-paper:#e6f0fa;--kj-color-surface:#fbfdff;--kj-color-text:#1e2f42;--kj-color-text-muted:#4e6075;--kj-color-primary:#1d4e89;--kj-color-border:#7488a1;--kj-color-border-strong:#5f7390;--kj-color-disabled:#dbe4ee;--kj-color-disabled-text:#4b5d72;--kj-color-banner-bg:#1d4e8924;--kj-color-node-bg:#d9e7f6;--kj-color-path:#a7c1dd;--kj-color-progress-bg:#d9e7f6;--kj-color-tab-active-bg:#1d4e891f;--kj-color-oauth:#0b5a8a;--kj-color-overlay:#14263a73}html[data-text=large]{--kj-text-title:21px;--kj-text-body:17px;--kj-text-caption:13px}*{box-sizing:border-box}html{background:var(--kj-color-paper);-webkit-text-size-adjust:100%}body{background:radial-gradient(circle at 100% 0, #c6a66a1f, transparent 42%), var(--kj-color-paper);min-height:100vh;color:var(--kj-color-text);font-family:var(--kj-font-sans);font-size:var(--kj-text-body);-webkit-font-smoothing:antialiased;margin:0;line-height:1.62}button,input,select,textarea{font:inherit;color:inherit}a{color:var(--kj-color-primary);text-underline-offset:3px}:focus-visible{outline:3px solid var(--kj-color-focus);outline-offset:2px}.app{width:100%;max-width:var(--kj-layout-max);padding:var(--kj-space-page-y) var(--kj-space-page-x) calc(78px + env(safe-area-inset-bottom));margin:0 auto}.app.no-tab{padding-bottom:calc(28px + env(safe-area-inset-bottom))}@media (min-width:768px){.app{max-width:560px;padding:24px 24px calc(92px + env(safe-area-inset-bottom))}.app.no-tab{padding-bottom:40px}}.app-bar{min-height:var(--kj-touch-min);align-items:center;gap:8px;margin-bottom:8px;display:flex}.app-bar h1{font-size:var(--kj-text-title);letter-spacing:.01em;flex:1;margin:0;font-weight:650}.app-bar.center{justify-content:center}.app-bar.center h1{flex:none}.app-bar h1.review{font-family:var(--kj-font-serif)}.back{width:var(--kj-touch-min);height:var(--kj-touch-min);color:var(--kj-color-text);cursor:pointer;background:0 0;border:0;border-radius:50%;flex:none;place-items:center;margin-left:-10px;font-size:30px;line-height:1;text-decoration:none;display:grid}.back:hover{background:var(--kj-color-tab-active-bg)}.prototype-tag{border:1px solid var(--kj-color-border);background:var(--kj-color-surface);color:var(--kj-color-text-muted);font-size:var(--kj-text-caption);white-space:nowrap;border-radius:999px;flex:none;padding:2px 8px}.hero-mark{background:var(--kj-color-primary);width:76px;height:76px;color:var(--kj-color-primary-fg);font-family:var(--kj-font-serif);border-radius:24px;place-items:center;margin:36px auto 16px;font-size:42px;display:grid;box-shadow:0 8px 24px #285d553d}.lead{color:var(--kj-color-text-muted);margin:0 0 14px}.lead.center,.hint.center{text-align:center}.eyebrow{color:var(--kj-color-accent);font-size:var(--kj-text-caption);letter-spacing:.08em;margin:0;font-weight:700}.notice{border-left:3px solid var(--kj-color-silk);background:var(--kj-color-banner-bg);border-radius:0 8px 8px 0;margin:10px 0 14px;padding:10px 12px;font-size:14px}.error-text{color:var(--kj-color-accent);font-weight:600}.hint{color:var(--kj-color-text-muted);font-size:var(--kj-text-caption);margin:8px 0;line-height:1.55}.demo-code{background:var(--kj-color-disabled);letter-spacing:.08em;border-radius:4px;padding:1px 6px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:700}.btn{width:100%;min-height:var(--kj-touch-min);border-radius:var(--kj-radius-button);text-align:center;cursor:pointer;border:1px solid #0000;justify-content:center;align-items:center;margin-top:10px;padding:10px 18px;font-weight:650;text-decoration:none;transition:background-color .16s,border-color .16s,transform .16s;display:flex}.btn:active:not(:disabled){transform:translateY(1px)}.btn-primary{background:var(--kj-color-primary);color:var(--kj-color-primary-fg)}.btn-primary:hover{filter:brightness(1.08)}.btn-secondary{border-color:var(--kj-color-border);background:var(--kj-color-surface);color:var(--kj-color-text)}.btn-secondary:hover:not(:disabled){border-color:var(--kj-color-primary);background:var(--kj-color-node-bg)}.btn:disabled{background:var(--kj-color-disabled);color:var(--kj-color-disabled-text);cursor:not-allowed;border-color:#0000}.cta-main{margin-top:18px}.oauth{min-height:var(--kj-touch-min);border:1px dashed var(--kj-color-border);border-radius:var(--kj-radius-button);color:var(--kj-color-text-muted);text-align:center;justify-content:center;align-items:center;margin-top:10px;padding:8px 14px;font-size:13px;display:flex}.oauth.soon{opacity:.72;cursor:not-allowed}.card{padding:var(--kj-space-card-padding);border-radius:var(--kj-radius-card);background:var(--kj-color-surface);box-shadow:var(--kj-shadow-card);border:1px solid #8a7a5a6b;margin:12px 0}.card.compact{padding:12px 14px}.card h2{margin:0 0 6px;font-size:16px}.card p:last-child{margin-bottom:0}.card-head{justify-content:space-between;align-items:center;gap:8px;margin-bottom:4px;display:flex}.card-head h2{margin:0}.inline-link{color:var(--kj-color-primary);white-space:nowrap;font-size:13px;font-weight:650;text-decoration:none}.inline-link:hover{text-decoration:underline}.count-tag{background:var(--kj-color-node-bg);color:var(--kj-color-primary);font-size:var(--kj-text-caption);border-radius:999px;flex:none;padding:2px 8px;font-weight:700}.section-title{margin:18px 0 8px;font-size:16px}.chip-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.dim-chip{border:1px solid var(--kj-color-border);border-radius:var(--kj-radius-chip);background:var(--kj-color-surface);min-height:64px;color:var(--kj-color-text);flex-direction:column;justify-content:center;gap:2px;padding:10px 12px;text-decoration:none;display:flex}.dim-chip>span:first-child{font-weight:650}.chip-state{color:var(--kj-color-text-muted);font-size:var(--kj-text-caption)}.dim-chip.is-available{border-color:var(--kj-color-primary);background:var(--kj-color-node-bg)}.dim-chip.is-available:hover{box-shadow:inset 0 0 0 1px var(--kj-color-primary)}.dim-chip.is-coming{background:var(--kj-color-disabled);border-style:dashed}.dim-chip.is-empty{background:0 0}.dim-chip.is-error{border-color:var(--kj-color-accent);color:var(--kj-color-accent)}.home-hero{border:1px solid var(--kj-color-border);background:linear-gradient(145deg, var(--kj-color-node-bg), var(--kj-color-surface) 68%);box-shadow:var(--kj-shadow-card);border-radius:18px;margin:6px 0 12px;padding:18px 16px 16px}.home-hero h2{font-family:var(--kj-font-serif);margin:4px 0 8px;font-size:24px;line-height:1.35}.home-hero .lead{margin-bottom:0;font-size:14px}.hero-actions{flex-wrap:wrap;gap:8px;margin-top:14px;display:flex}.hero-actions .btn{flex:1;width:auto;min-width:140px;margin-top:0}.stat-row{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:12px 0;display:grid}.stat{background:var(--kj-color-surface);border:1px solid #8a7a5a4d;border-radius:12px;flex-direction:column;justify-content:center;align-items:center;padding:10px 6px;display:flex}.stat strong{font-variant-numeric:tabular-nums;font-size:21px;line-height:1.3}.stat span{color:var(--kj-color-text-muted);font-size:var(--kj-text-caption)}.stat-row.inline{margin:14px 0 0}.module-block{margin:20px 0}.module-head{justify-content:space-between;align-items:flex-end;gap:8px;margin-bottom:8px;display:flex}.module-head h2{font-family:var(--kj-font-serif);margin:0;font-size:19px}.module-note{color:var(--kj-color-text-muted);font-size:var(--kj-text-caption);margin:0}.module-detail .lead{margin-bottom:10px;font-size:14px}.sample-note{box-shadow:none;background:0 0;border-style:dashed}.grade-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:14px 0;display:grid}.grade-card{border:1px solid var(--kj-color-border);background:var(--kj-color-surface);text-align:left;cursor:pointer;border-radius:14px;flex-direction:column;gap:2px;min-height:108px;padding:14px;display:flex}.grade-card strong{font-family:var(--kj-font-serif);font-size:21px}.grade-card>span{color:var(--kj-color-text-muted);font-size:var(--kj-text-caption)}.grade-card .grade-state{color:var(--kj-color-primary);margin-top:auto;padding-top:10px;font-weight:650}.grade-card.on{border-color:var(--kj-color-primary);background:var(--kj-color-node-bg);box-shadow:inset 0 0 0 1px var(--kj-color-primary)}.session-meta{color:var(--kj-color-text-muted);font-size:var(--kj-text-caption);justify-content:space-between;gap:10px;margin-bottom:6px;display:flex}.session-progress{background:var(--kj-color-progress-bg);border-radius:999px;height:6px;margin-bottom:18px;overflow:hidden}.session-progress span{border-radius:inherit;background:var(--kj-color-primary);height:100%;transition:width .2s;display:block}.stem{font-family:var(--kj-font-serif);font-size:calc(var(--kj-text-body) + 5px);margin:0 0 14px;font-weight:600;line-height:1.6}.option-list{flex-direction:column;gap:10px;display:flex}.option{border:1px solid var(--kj-color-border);background:var(--kj-color-surface);min-height:52px;color:var(--kj-color-text);font-size:calc(var(--kj-text-body) + 1px);text-align:left;cursor:pointer;border-radius:12px;padding:12px 14px;transition:background-color .15s,border-color .15s}.option:hover:not(:disabled){border-color:var(--kj-color-primary);background:var(--kj-color-node-bg)}.option:disabled{cursor:default;opacity:1}.option.correct{color:#1f4d33;background:#e7f4ea;border-color:#2f7d4f}.option.wrong{border-color:var(--kj-color-accent);color:#7a2a20;background:#f8e6e3}.feedback{border:1px solid var(--kj-color-border);background:var(--kj-color-surface);border-radius:14px;margin-top:16px;padding:14px}.feedback h2{margin:0 0 6px;font-size:16px}.feedback p{margin:6px 0}.feedback.ok{background:#eef7f0;border-color:#2f7d4f}.feedback.bad{border-color:var(--kj-color-accent);background:#fbf0ee}.source-box{border-top:1px dashed var(--kj-color-border);color:var(--kj-color-text-muted);font-size:var(--kj-text-caption);flex-direction:column;gap:2px;margin-top:10px;padding-top:8px;display:flex}.session-actions{gap:8px;margin-top:14px;display:flex}.session-actions .btn{flex:1;margin-top:0}.dialog-backdrop{z-index:60;background:var(--kj-color-overlay);place-items:center;padding:20px;display:grid;position:fixed;inset:0}.dialog{background:var(--kj-color-surface);border-radius:16px;width:100%;max-width:360px;padding:20px;box-shadow:0 18px 50px #141e1a3d}.dialog h2{font-family:var(--kj-font-serif);margin:0 0 8px;font-size:20px}.dialog p{color:var(--kj-color-text-muted);margin:0}.dialog-actions{gap:8px;margin-top:16px;display:flex}.dialog-actions .btn{flex:1;margin-top:0}.result-hero{border:1px solid var(--kj-color-border);background:var(--kj-color-surface);box-shadow:var(--kj-shadow-card);border-radius:16px;margin-bottom:14px;padding:18px}.result-hero h2{font-family:var(--kj-font-serif);margin:2px 0 6px;font-size:26px;line-height:1.3}.result-hero>.lead{margin-bottom:0;font-size:14px}.review-list,.wrong-list{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.review-item,.wrong-item{border:1px solid var(--kj-color-border);background:var(--kj-color-surface);border-radius:12px;overflow:hidden}.review-item summary,.wrong-item summary{cursor:pointer;align-items:center;gap:8px;min-height:52px;padding:10px 12px;list-style:none;display:flex}.review-item summary::-webkit-details-marker{display:none}.wrong-item summary::-webkit-details-marker{display:none}.review-index{background:var(--kj-color-node-bg);min-width:30px;height:30px;color:var(--kj-color-primary);font-size:var(--kj-text-caption);border-radius:999px;flex:none;place-items:center;padding:0 6px;font-weight:700;display:grid}.review-stem{flex:1;min-width:0;font-size:14px;line-height:1.45}.review-state{font-size:var(--kj-text-caption);flex:none;font-weight:700}.review-state.ok{color:#2f7d4f}.review-state.bad{color:var(--kj-color-accent)}.review-body{border-top:1px dashed var(--kj-color-border);padding:0 12px 12px;font-size:14px}.review-body p{margin:8px 0}.review-item.ok{border-left:3px solid #2f7d4f}.review-item.bad,.wrong-item.due{border-left:3px solid var(--kj-color-accent)}.wrong-item.mastered{border-left:3px solid #2f7d4f}.segmented{background:var(--kj-color-disabled);border-radius:12px;gap:4px;margin:12px 0;padding:4px;display:flex}.segmented button{min-height:40px;color:var(--kj-color-text-muted);cursor:pointer;background:0 0;border:0;border-radius:9px;flex:1;padding:6px 8px;font-size:13px;font-weight:650}.segmented button.on{background:var(--kj-color-surface);color:var(--kj-color-text);box-shadow:0 1px 4px #26332f24}.field{border:0;flex-direction:column;gap:6px;margin:12px 0;padding:0;display:flex}.field>label,.field>legend{font-size:13px;font-weight:650}.field input,.field select,.field textarea{border:1px solid var(--kj-color-border);background:var(--kj-color-surface);width:100%;min-height:48px;color:var(--kj-color-text);border-radius:10px;padding:10px 12px}.field textarea{resize:vertical;min-height:128px;line-height:1.55}.field input::placeholder,.field textarea::placeholder{color:var(--kj-color-text-muted);opacity:.75}.field input[aria-invalid=true],.field select[aria-invalid=true],.field textarea[aria-invalid=true]{border-color:var(--kj-color-accent);box-shadow:0 0 0 2px #a83f3224}.check-row{align-items:flex-start;gap:10px;margin:10px 0;font-size:14px;line-height:1.5;display:flex}.check-row input{width:20px;height:20px;accent-color:var(--kj-color-primary);flex:none;margin-top:2px}.check-row a{margin-left:2px}.radio-list{flex-direction:column;gap:2px;display:flex}.step-head{align-items:center;gap:10px;margin:4px 0 14px;display:flex}.step-text{color:var(--kj-color-text-muted);font-size:var(--kj-text-caption);white-space:nowrap;flex:none}.step-bar{background:var(--kj-color-progress-bg);border-radius:999px;flex:1;height:6px;overflow:hidden}.step-bar span{border-radius:inherit;background:var(--kj-color-primary);height:100%;transition:width .2s;display:block}.step-title{font-family:var(--kj-font-serif);margin:4px 0 8px;font-size:21px;line-height:1.4}.step-title:focus-visible{outline-offset:4px}.step-note{color:var(--kj-color-text-muted);margin:0 0 12px}.step-actions{gap:8px;margin-top:18px;display:flex}.step-actions .btn{flex:1;margin-top:0}.switch{background:var(--kj-color-switch-off);color:#fff;min-height:34px;font-size:var(--kj-text-caption);cursor:pointer;border:1px solid #0000;border-radius:999px;flex:none;align-items:center;gap:7px;padding:4px 11px;font-weight:700;display:inline-flex}.switch:before{content:"";background:var(--kj-color-switch-knob);border-radius:50%;width:12px;height:12px}.switch.on{background:var(--kj-color-primary)}.confirm-box{border:1px solid var(--kj-color-accent);background:#fbf0ee;border-radius:10px;margin:10px 0;padding:12px}.confirm-box p{margin:0}.kv{gap:6px;margin:8px 0;display:grid}.kv>div{border-bottom:1px solid var(--kj-color-disabled);justify-content:space-between;gap:12px;padding-bottom:6px;display:flex}.kv dt{color:var(--kj-color-text-muted);font-size:13px}.kv dd{text-align:right;margin:0;font-size:13px;font-weight:650}.profile-head{align-items:center;gap:12px;padding:10px 0 14px;display:flex}.avatar{background:var(--kj-color-primary);width:58px;height:58px;color:var(--kj-color-primary-fg);font-family:var(--kj-font-serif);border-radius:50%;flex:none;place-items:center;font-size:25px;display:grid}.profile-head h2{margin:0;font-size:20px}.profile-head .lead{margin:2px 0 0;font-size:13px}.list-menu{border:1px solid var(--kj-color-border);background:var(--kj-color-surface);border-radius:14px;margin:12px 0;overflow:hidden}.list-menu .section-title{color:var(--kj-color-text-muted);font-size:var(--kj-text-caption);letter-spacing:.06em;margin:0;padding:12px 14px 6px}.list-menu a{border-bottom:1px solid var(--kj-color-disabled);min-height:48px;color:var(--kj-color-text);justify-content:space-between;align-items:center;gap:8px;padding:12px 14px;text-decoration:none;display:flex}.list-menu a:last-child{border-bottom:0}.list-menu a:hover{background:var(--kj-color-node-bg)}.menu-note{color:var(--kj-color-text-muted);font-size:var(--kj-text-caption)}.soon-row{opacity:.76}.skin-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;display:grid}.skin-card{border:1px solid var(--kj-color-border);background:var(--kj-color-surface);text-align:left;cursor:pointer;border-radius:12px;flex-direction:column;gap:3px;padding:8px;display:flex}.skin-card.on{outline:2px solid var(--kj-color-primary);outline-offset:1px}.skin-card strong{font-size:13px}.skin-card>span:last-child{color:var(--kj-color-text-muted);font-size:11px;line-height:1.4}.skin-preview{border-radius:8px;flex-direction:column;gap:4px;height:54px;margin-bottom:3px;padding:9px;display:flex}.skin-preview span{border-radius:3px;height:6px;display:block}.skin-preview span:first-child{width:80%}.skin-preview span:last-child{width:55%}.skin-paper .skin-preview{background:#f7f3e8;border:1px solid #8a7a5a}.skin-paper .skin-preview span{background:#285d55}.skin-leaf .skin-preview{background:#e7f2ea;border:1px solid #6f8a78}.skin-leaf .skin-preview span{background:#1f6b4a}.skin-sea .skin-preview{background:#e6f0fa;border:1px solid #7488a1}.skin-sea .skin-preview span{background:#1d4e89}.preview-box .stem{font-size:calc(var(--kj-text-body) + 3px);margin-bottom:12px}.preview-box .option{min-height:46px}.prose ul{margin:8px 0;padding-left:20px}.prose li{margin:5px 0}.plain-list{gap:10px;margin:8px 0;padding:0;list-style:none;display:grid}.plain-list li{border-bottom:1px dashed var(--kj-color-disabled);flex-direction:column;gap:2px;padding-bottom:8px;display:flex}.plain-list li:last-child{border-bottom:0;padding-bottom:0}.plain-list span{color:var(--kj-color-text-muted);font-size:13px}.empty-state{text-align:center;padding:38px 12px}.empty-state h2{font-family:var(--kj-font-serif);margin:0 0 8px;font-size:22px}.empty-state .lead{max-width:340px;margin:0 auto}.link-home{margin-top:12px;font-size:14px;font-weight:650;display:inline-block}.tabs{z-index:40;width:100%;max-width:var(--kj-layout-max);padding:4px 8px calc(4px + env(safe-area-inset-bottom));background:color-mix(in srgb, var(--kj-color-surface) 94%, transparent);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-top:1px solid #8a7a5a66;grid-template-columns:repeat(4,1fr);display:grid;position:fixed;bottom:0;left:50%;transform:translate(-50%)}@media (min-width:768px){.tabs{max-width:560px}}.tabs a{min-height:48px;color:var(--kj-color-text-muted);font-size:var(--kj-text-caption);border-radius:10px;justify-content:center;align-items:center;font-weight:650;text-decoration:none;display:flex}.tabs a.on{background:var(--kj-color-tab-active-bg);color:var(--kj-color-primary)}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}
