:root{color-scheme:light;font-family:SF Pro Text,-apple-system,PingFang SC,Hiragino Sans GB,Noto Sans CJK SC,system-ui,sans-serif;letter-spacing:.01em;background:linear-gradient(160deg,#f5f7f2,#eef3ea,#f2f5ef 60%,#f0f4ec);color:#1c1c1e;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--accent: #3a6b4a;--accent-light: rgba(58, 107, 74, .06);--accent-medium: rgba(58, 107, 74, .12);--text-secondary: #6b7c6e;--text-tertiary: #8e9a8f;--border: rgba(60, 60, 67, .06);--card-bg: rgba(255, 255, 255, .8);--card-shadow: 0 1px 8px rgba(0, 0, 0, .04);--red: #c94040;--red-bg: rgba(201, 64, 64, .06);--red-border: rgba(201, 64, 64, .15);--radius: 14px;--radius-sm: 10px;--radius-xs: 8px;--tab-height: 60px}*,*:before,*:after{box-sizing:border-box}html,body,#root{min-height:100%;margin:0}body{min-height:100vh;background:linear-gradient(160deg,#f5f7f2,#eef3ea,#f2f5ef 60%,#f0f4ec);background-attachment:fixed}button,input,select,textarea{font:inherit}button{border:0;cursor:pointer;transition:all .2s ease}h1,h2,h3,p{margin:0}.app-shell{min-height:100vh;display:flex;flex-direction:column}.app-content{flex:1;padding:16px 16px calc(var(--tab-height) + 16px);overflow-y:auto}.site-footer{position:fixed;bottom:calc(var(--tab-height) + 4px);left:0;right:0;text-align:center;color:var(--text-tertiary);font-size:.72rem;letter-spacing:.06em;pointer-events:none;opacity:.6}.tab-bar{position:fixed;bottom:0;left:0;right:0;height:var(--tab-height);display:flex;justify-content:space-around;align-items:flex-start;padding-top:8px;background:#f2f5efd1;backdrop-filter:saturate(180%) blur(24px);-webkit-backdrop-filter:saturate(180%) blur(24px);border-top:.5px solid rgba(60,60,67,.08);z-index:100}.tab-item{display:flex;flex-direction:column;align-items:center;gap:2px;padding:4px 20px;background:none;color:var(--text-tertiary);font-size:.68rem;font-weight:500;letter-spacing:.02em;transition:color .2s}.tab-item svg{width:24px;height:24px;fill:currentColor}.tab-item.active{color:var(--accent)}.page{width:min(100%,600px);margin:0 auto;display:flex;flex-direction:column;gap:16px}.page-header-center{text-align:center;padding:8px 0 4px}.page-header-center h1{font-family:"Noto Serif SC",Songti SC,serif;font-size:1.6rem;font-weight:600;color:var(--accent);letter-spacing:.08em}.subtitle{color:var(--text-secondary);font-size:.88rem;margin-top:2px}.page-header-row{display:flex;align-items:center;justify-content:space-between;padding:8px 0 0}.page-header-row h1{font-size:1.6rem;font-weight:700}.header-actions{display:flex;align-items:center;gap:10px}.toast{padding:10px 16px;border-radius:var(--radius-sm);background:var(--accent-light);color:var(--accent);font-size:.88rem;text-align:center}.option-row{display:flex;justify-content:center;gap:8px}.option-pill{padding:7px 16px;border-radius:999px;background:#fff6;color:var(--text-tertiary);font-size:.84rem;font-weight:500}.option-pill:active{transform:scale(.96)}.option-pill.active{background:var(--accent-medium);color:var(--accent);font-weight:600}.category-grid{display:grid;gap:10px}.cat-card{background:#ffffff8c;border-radius:var(--radius);padding:16px;display:flex;flex-direction:column;gap:10px;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}.cat-card:active{transform:scale(.99)}.cat-card-all{background:linear-gradient(135deg,#fff9,#3a6b4a0a)}.cat-card-active{background:#ffffffa6}.cat-card-main{flex:1;display:flex;justify-content:space-between;align-items:center;gap:12px;padding:0;background:transparent;color:inherit;text-align:left}.cat-card-text{display:flex;flex-direction:column;gap:2px}.cat-card-text h2{font-family:"Noto Serif SC",Songti SC,serif;font-size:1.2rem;font-weight:600}.cat-kicker{font-size:.72rem;color:var(--text-tertiary);letter-spacing:.04em;text-transform:uppercase}.cat-meta{font-size:.84rem;color:var(--text-secondary)}.cat-badge{padding:4px 10px;border-radius:999px;background:var(--accent-light);color:var(--accent);font-size:.78rem;font-weight:500;white-space:nowrap}.cat-progress{display:flex;flex-direction:column;gap:6px}.cat-progress-header{display:flex;justify-content:space-between;align-items:center}.round-chip{padding:3px 8px;border-radius:999px;background:var(--accent-light);color:var(--accent);font-size:.74rem;font-weight:600}.cat-progress-text{font-size:.82rem;color:var(--text-secondary)}.progress-track{width:100%;height:4px;border-radius:999px;background:#2d5a3f14;overflow:hidden}.progress-track span{display:block;height:100%;border-radius:inherit;background:var(--accent);transition:width .4s cubic-bezier(.22,1,.36,1)}.cat-card-actions{display:flex;gap:6px;justify-content:flex-end}.study-session{min-height:100vh;max-width:640px;margin:0 auto;display:flex;flex-direction:column;gap:14px;padding:16px;background:linear-gradient(160deg,#f5f7f2,#eef3ea,#f2f5ef 60%,#f0f4ec);background-attachment:fixed}.session-header{display:flex;align-items:center;gap:12px}.back-btn{width:36px;height:36px;display:grid;place-items:center;border-radius:50%;background:#ffffff80;color:var(--accent);flex-shrink:0}.back-btn svg{width:20px;height:20px;fill:currentColor}.session-title{flex:1;min-width:0}.session-title h1{font-family:"Noto Serif SC",Songti SC,serif;font-size:1.3rem;font-weight:600}.session-meta{font-size:.82rem;color:var(--text-secondary)}.session-progress-row{display:flex;align-items:center;gap:8px;width:min(100%,600px);align-self:center}.prev-btn{width:28px;height:28px;display:grid;place-items:center;border-radius:50%;background:#ffffff80;color:var(--accent);flex-shrink:0;padding:0}.prev-btn:active{transform:scale(.9)}.prev-btn-spacer{width:28px;flex-shrink:0}.session-progress-bar{flex:1;height:4px;border-radius:999px;background:#2d5a3f14;overflow:hidden}.session-progress-bar span{display:block;height:100%;border-radius:inherit;background:var(--accent);transition:width .4s cubic-bezier(.22,1,.36,1)}.flashcard-shell{width:min(100%,600px);align-self:center;position:relative;display:flex;align-items:center}.flashcard{width:100%;min-height:200px;display:grid;align-content:center;justify-items:center;gap:12px;padding:28px 24px;border-radius:var(--radius);background:#ffffff73;cursor:pointer;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);transition:background .3s}.flashcard.revealed{background:#ffffffa6;cursor:default}.flashcard-pinyin{font-family:"Noto Serif SC",Songti SC,serif;font-size:clamp(2.2rem,7vw,4.5rem);color:#1c1c1e;text-align:center;line-height:1.3;word-break:break-word;font-weight:600}.flashcard-hanzi{font-family:"Noto Serif SC",Songti SC,serif;font-size:clamp(1.8rem,5vw,3.4rem);color:var(--accent);text-align:center;word-break:break-word;min-height:2.8rem}.flashcard-tap-hint{color:var(--text-tertiary)!important;font-size:.94rem!important;font-weight:400;letter-spacing:.02em}.flashcard-cat-link{padding:4px 12px;border-radius:999px;background:var(--accent-light);color:var(--accent);font-size:.78rem;font-weight:500}.flashcard-prev{position:absolute;top:12px;left:12px;z-index:1}.flashcard-delete{position:absolute;top:12px;right:12px;z-index:1;transition:opacity .2s}.answer-row{width:min(100%,600px);align-self:center;display:grid;grid-template-columns:1fr 1fr;gap:10px}.answer-btn{height:46px;border-radius:999px;font-size:1.3rem;font-weight:400;letter-spacing:.02em}.answer-btn:active{transform:scale(.96)}.answer-wrong{background:#fff9;color:var(--text-secondary);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.answer-wrong:hover{background:#ffffffd9}.answer-right{background:var(--accent);color:#fff}.answer-right:hover{opacity:.88}.shortcut-bar{width:min(100%,600px);align-self:center;display:flex;justify-content:center;flex-wrap:wrap;gap:8px 12px;color:var(--text-secondary);font-size:.78rem;opacity:1;transition:opacity 1.5s ease;margin-top:auto;padding-bottom:16px}.shortcut-bar.faded{opacity:0;pointer-events:none}.shortcut-bar span{display:inline-flex;align-items:center;gap:4px}.shortcut-bar kbd{padding:3px 7px;border-radius:6px;border:1px solid var(--border);background:var(--card-bg);font-size:.8rem;font-family:inherit}.round-done-panel{width:min(100%,400px);align-self:center;padding:24px;border-radius:var(--radius);background:#ffffff73;text-align:center;display:grid;gap:12px;justify-items:center;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}.round-done-panel h2{font-size:1.3rem}.round-done-panel p{color:var(--text-secondary)}.round-done-actions{display:flex;gap:10px;align-items:center}.search-bar input{width:100%;padding:12px 16px;border-radius:var(--radius-sm);border:none;background:#fff9;font-size:.94rem;outline:none;transition:background .2s}.search-bar input:focus{background:#ffffffd9}.filter-pills{display:flex;gap:6px;overflow-x:auto;padding-bottom:4px;-webkit-overflow-scrolling:touch;scrollbar-width:none}.filter-pills::-webkit-scrollbar{display:none}.pill{padding:6px 14px;border-radius:999px;background:#fff6;color:var(--text-secondary);font-size:.82rem;white-space:nowrap;flex-shrink:0}.pill.active{background:var(--accent);color:#fff;font-weight:600}.select-bar{display:flex;align-items:center;justify-content:space-between;padding:6px 0}.select-all-label{display:flex;align-items:center;gap:6px;cursor:pointer;font-size:.78rem;color:var(--text-tertiary);-webkit-user-select:none;user-select:none}.select-all-label input{width:18px;height:18px;accent-color:var(--accent);opacity:.4}.select-all-label input:checked{opacity:1}.card-list{display:flex;flex-direction:column;gap:2px}.card-row{display:flex;align-items:center;gap:12px;padding:10px 8px;border-radius:var(--radius-xs);transition:background .2s}.card-row:hover{background:#ffffff4d}.card-row.selected{background:var(--accent-light)}.card-row.editing{flex-direction:column;align-items:stretch;gap:10px;padding:14px 8px;background:#fff6}.card-check{width:18px;height:18px;flex-shrink:0;accent-color:var(--accent);cursor:pointer;opacity:.4}.card-row.selected .card-check,.card-check:hover{opacity:1}.card-row-content{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px;padding:0;background:none;color:inherit;text-align:left}.card-row-cat{font-size:.68rem;color:var(--text-tertiary);font-weight:500;letter-spacing:.04em;text-transform:uppercase}.card-row-hanzi{font-family:"Noto Serif SC",Songti SC,serif;font-size:1rem;font-weight:600}.card-row-pinyin{font-size:.84rem;color:var(--text-secondary);letter-spacing:.01em}.card-row-actions{display:flex;gap:8px}.empty-msg{padding:32px 0;text-align:center;color:var(--text-tertiary)}.btn-primary{padding:10px 20px;border-radius:999px;background:var(--accent);color:#fff;font-weight:500;font-size:.9rem;letter-spacing:.01em}.btn-primary:hover{opacity:.88}.btn-primary:active{transform:scale(.97)}.btn-secondary{padding:9px 16px;border-radius:999px;background:#fff9;color:var(--accent);font-size:.86rem;font-weight:500;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.btn-secondary:hover{background:#ffffffd9}.btn-secondary:active{transform:scale(.97)}.btn-danger{padding:9px 16px;border-radius:999px;background:var(--red);color:#fff;font-weight:500;font-size:.86rem}.btn-danger:active{transform:scale(.97)}.btn-danger-sm{padding:5px 12px;border-radius:999px;border:1px solid var(--red-border);background:var(--red-bg);color:var(--red);font-size:.78rem;font-weight:500}.btn-text{padding:6px 12px;background:none;color:var(--accent);font-weight:500;font-size:.9rem}.btn-text:hover{opacity:.7}.btn-add{width:34px;height:34px;display:grid;place-items:center;border-radius:50%;background:var(--accent);color:#fff;font-size:1.3rem;line-height:1;font-weight:300}.btn-add:hover{opacity:.88}.btn-add:active{transform:scale(.94)}.full-width{width:100%}.icon-btn{width:30px;min-width:30px;height:30px;display:grid;place-items:center;border-radius:50%;background:#ffffff80;color:var(--accent)}.icon-btn:hover{background:#fffc}.icon-btn:active{transform:scale(.93)}.icon-btn svg{width:15px;height:15px;fill:currentColor}.icon-btn-danger{width:30px;min-width:30px;height:30px;display:grid;place-items:center;border-radius:50%;background:var(--red-bg);color:var(--red)}.icon-btn-danger:hover{background:#c940401f}.icon-btn-danger:active{transform:scale(.93)}.icon-btn-danger svg{width:13px;height:13px;fill:currentColor}input,select,textarea{width:100%;padding:12px 14px;border-radius:var(--radius-sm);border:none;background:#fff9;color:#1c1c1e;font-size:.94rem;outline:none;transition:background .2s}input:focus,select:focus,textarea:focus{background:#ffffffd9}textarea{resize:vertical;min-height:100px}label{display:grid;gap:6px;color:var(--text-secondary);font-size:.84rem;font-weight:500}.settings-card{background:#ffffff73;border-radius:var(--radius);padding:20px;display:flex;flex-direction:column;gap:14px;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}.settings-card h2{font-size:1.1rem;font-weight:700}.cat-list{display:flex;flex-direction:column}.cat-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 0}.cat-row-info{display:flex;flex-direction:column;gap:2px;min-width:60px}.cat-row-info strong{font-size:.94rem}.cat-row-info span{font-size:.78rem;color:var(--text-tertiary)}.cat-row-actions{display:flex;gap:6px;align-items:center}.cat-row-actions input{width:120px;flex:1;padding:8px 10px;font-size:.88rem}.inline-form{display:flex;gap:8px;align-items:flex-end}.inline-form input{flex:1}.import-form{display:flex;flex-direction:column;gap:12px}.drop-zone{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:24px;border:2px dashed rgba(45,90,63,.2);border-radius:var(--radius-sm);background:var(--accent-light);cursor:pointer;transition:border-color .2s,background .2s}.drop-zone.drag-over{border-color:var(--accent);background:var(--accent-medium)}.drop-zone p{color:var(--accent);font-weight:600;font-size:.94rem}.drop-zone-hint{color:var(--text-tertiary);font-size:.78rem}.preview-box{padding:12px 14px;border-radius:var(--radius-sm);background:#f5f7f2eb;max-height:200px;overflow-y:auto}.preview-row{display:flex;justify-content:space-between;align-items:center;padding:6px 0;font-size:.9rem}.chooser{display:flex;flex-direction:column;gap:10px}.sheet-backdrop{position:fixed;inset:0;background:#0000004d;display:flex;align-items:flex-end;justify-content:center;z-index:200;animation:fadeIn .2s}.sheet{width:min(100%,500px);max-height:85vh;overflow-y:auto;background:#fff;border-radius:20px 20px 0 0;padding:20px 20px 40px;display:flex;flex-direction:column;gap:14px;animation:slideUp .3s cubic-bezier(.22,1,.36,1)}.sheet-header{display:flex;justify-content:space-between;align-items:center}.sheet-header h2{font-size:1.2rem;font-weight:700}.sheet-form{display:flex;flex-direction:column;gap:12px}.modal-card{width:min(100%,380px);margin:auto;padding:24px;border-radius:var(--radius);background:#fff;box-shadow:0 20px 60px #0003;display:grid;gap:12px;animation:scaleIn .2s cubic-bezier(.22,1,.36,1)}.modal-card h2{font-size:1.1rem}.modal-card p{color:var(--text-secondary);font-size:.94rem}.modal-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:4px}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes scaleIn{0%{transform:scale(.95);opacity:0}to{transform:scale(1);opacity:1}}@media(max-width:720px){.app-content{padding:12px 12px calc(var(--tab-height) + 12px)}.page-header-center h1{font-size:1.5rem}.flashcard{padding:24px 16px}.cat-row{flex-direction:column;align-items:stretch;gap:8px}.cat-row-actions{flex-wrap:wrap}.cat-row-actions input{width:100%}}@media(min-width:721px){.category-grid{grid-template-columns:repeat(2,1fr)}.cat-card-all{grid-column:1 / -1}.flashcard-shell{max-width:540px;margin:0 auto}.study-session{padding:24px 32px}.drawing-panel{max-width:540px;margin:0 auto}.answer-row{max-width:400px;margin:0 auto}}.drawing-panel{width:min(100%,600px);align-self:center;display:flex;flex-direction:column;gap:14px;padding:0;animation:fadeIn .2s}.drawing-header{display:flex;justify-content:space-between;align-items:center;padding:0 4px}.drawing-label{font-size:.84rem;color:var(--text-tertiary);font-weight:500}.drawing-close{padding:4px 12px;border-radius:999px;background:none;color:var(--text-tertiary);font-size:.82rem;font-weight:500}.drawing-close:hover{color:var(--accent)}.drawing-multi-wrap{display:flex;justify-content:center;gap:6px;flex-wrap:wrap}.drawing-char-col{display:flex;flex-direction:column;align-items:center;gap:6px}.drawing-char-pinyin{font-family:"Noto Serif SC",Songti SC,serif;font-size:1.3rem;color:#1c1c1e;font-weight:600;text-align:center;min-height:1.4em}.drawing-single-canvas{border-radius:var(--radius-sm);background:#fff;cursor:crosshair;touch-action:none;box-shadow:0 1px 6px #0000000a}.drawing-score{font-size:1.1rem;font-weight:700}.drawing-actions{display:flex;gap:8px;justify-content:center}.drawing-btn{padding:9px 22px;border-radius:999px;background:#ffffff80;color:var(--text-secondary);font-size:.84rem;font-weight:500}.drawing-btn:hover{background:#fffc}.drawing-btn:active{transform:scale(.96)}.drawing-btn:disabled{opacity:.35;cursor:default}.drawing-btn.primary{background:var(--accent);color:#fff}.drawing-btn.primary:hover{opacity:.88}.drawing-canvas-area{transition:transform .5s cubic-bezier(.22,1,.36,1),opacity .5s ease;transform-origin:top center}.drawing-canvas-area.shrunk{transform:scale(.55);opacity:.7;margin-bottom:-20%}.drawing-correct-char{display:grid;place-items:center;animation:fadeIn .4s ease .2s both}.drawing-correct-char span{font-family:"Noto Serif SC",Songti SC,serif;font-size:clamp(2rem,8vw,3.4rem);font-weight:700;color:var(--accent);line-height:1}.drawing-undo-btn{width:36px;height:36px;display:grid;place-items:center;border-radius:50%;background:#ffffff80;color:var(--text-secondary);padding:0}.drawing-undo-btn:hover{background:#fffc}.drawing-undo-btn:active{transform:scale(.93)}.drawing-undo-btn:disabled{opacity:.25;cursor:default}.drawing-result-banner{width:min(100%,600px);align-self:center;display:flex;align-items:center;justify-content:center;gap:8px;padding:10px 16px;border-radius:999px;font-size:.88rem;font-weight:500;animation:scaleIn .2s cubic-bezier(.22,1,.36,1)}.drawing-result-banner.good{background:var(--accent-light);color:var(--accent)}.drawing-result-banner.retry{background:var(--red-bg);color:var(--red)}.drawing-auto-hint{font-size:.76rem;opacity:.6;font-weight:400}.write-toggle{align-self:center;padding:8px 20px;border-radius:999px;background:#ffffff80;color:var(--text-secondary);font-size:.82rem;font-weight:500;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.write-toggle:hover{background:#fffc}.write-toggle:active{transform:scale(.96)}.write-toggle.active{background:var(--accent-medium);color:var(--accent)}.cli-backdrop{position:fixed;inset:0;background:#0006;display:flex;justify-content:center;align-items:flex-start;padding-top:min(20vh,120px);z-index:300;animation:fadeIn .15s}.cli-panel{width:min(100%,520px);max-height:60vh;background:#1a1e1b;border-radius:16px;box-shadow:0 24px 80px #0006,0 0 0 1px #ffffff0f;overflow:hidden;display:flex;flex-direction:column;animation:scaleIn .2s cubic-bezier(.22,1,.36,1);font-family:SF Mono,Fira Code,JetBrains Mono,monospace}.cli-header{display:flex;align-items:center;gap:8px;padding:14px 16px;border-bottom:1px solid rgba(255,255,255,.06)}.cli-prompt{color:#5fa87a;font-size:1rem;font-weight:700;flex-shrink:0}.cli-input{flex:1;background:transparent!important;border:none!important;color:#e4e8e5;font-size:.94rem;font-family:inherit;padding:0!important;outline:none;caret-color:#5fa87a}.cli-input::placeholder{color:#e4e8e54d}.cli-close{background:none;color:#e4e8e54d;padding:0}.cli-close kbd{padding:3px 7px;border-radius:5px;border:1px solid rgba(255,255,255,.1);background:#ffffff0a;font-size:.72rem;font-family:inherit;color:#e4e8e566}.cli-suggestions{overflow-y:auto;padding:4px 0}.cli-suggestion{display:flex;align-items:center;gap:10px;width:100%;padding:10px 16px;background:transparent;color:#c8cec9;font-size:.88rem;text-align:left;transition:background .1s}.cli-suggestion:hover,.cli-suggestion.active{background:#5fa87a1a}.cli-cmd{color:#5fa87a;font-weight:600;min-width:70px}.cli-args{color:#e4e8e566;font-size:.82rem;min-width:80px}.cli-desc{color:#e4e8e580;font-size:.82rem;margin-left:auto}.cli-output{overflow-y:auto;padding:8px 0;flex:1;min-height:0}.cli-line{padding:4px 16px}.cli-line pre{margin:0;font-family:inherit;font-size:.84rem;line-height:1.5;white-space:pre-wrap;word-break:break-word}.cli-input-line{color:#e4e8e566}.cli-ok pre{color:#5fa87a}.cli-error pre{color:#e05858}.cli-info pre{color:#c8cec9}.cli-input pre{color:#e4e8e559;font-style:italic}.cli-trigger-hint{position:fixed;bottom:calc(var(--tab-height) + 12px);right:16px;z-index:90;display:flex;align-items:center;gap:6px;padding:8px 14px;border-radius:999px;background:var(--accent);color:#fff;font-size:.78rem;font-weight:600;box-shadow:0 4px 16px #2d5a3f4d;cursor:pointer;transition:transform .2s,opacity .2s}.cli-trigger-hint:hover{transform:scale(1.05)}.cli-trigger-hint.cli-trigger-faded{opacity:0;pointer-events:none;transition:opacity 1.5s ease}.cli-trigger-hint kbd{padding:2px 6px;border-radius:4px;background:#fff3;font-size:.72rem;font-family:-apple-system,system-ui,sans-serif}
