:root{color:#17211b;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;--ink:#17211b;--muted:#657069;--line:#dce2dd;--surface:#fff;--surface-soft:#eef2ee;--green:#246b4a;--green-dark:#165337;--green-soft:#e5f1e9;--orange:#bb6428;--red:#a6423a;--shadow:0 12px 32px #1a332512;background:#f4f6f3;font-family:PingFang SC,Microsoft YaHei,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}*{box-sizing:border-box}html{background:#f4f6f3}body{min-width:320px;min-height:100svh;margin:0}button,input,textarea,select{font:inherit}button,a{-webkit-tap-highlight-color:transparent}button{touch-action:manipulation}a{color:inherit;text-decoration:none}img{max-width:100%;display:block}.app-shell{min-height:100svh;padding-bottom:calc(88px + env(safe-area-inset-bottom))}.page{width:min(100%,980px);margin:0 auto;padding:28px clamp(18px,4vw,40px) 36px}.page.narrow{max-width:760px}.topbar{justify-content:space-between;align-items:center;gap:16px;margin-bottom:24px;display:flex}.topbar h1,.topbar h2,.section-title{margin:0}.eyebrow{color:var(--green);letter-spacing:.06em;margin:0 0 5px;font-size:.86rem;font-weight:700}h1{letter-spacing:-.035em;font-size:clamp(1.75rem,4vw,2.35rem);line-height:1.18}h2{font-size:1.25rem}p{line-height:1.55}.muted{color:var(--muted)}.tiny{color:var(--muted);font-size:.82rem}.card{background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:22px}.primary-button,.secondary-button,.ghost-button,.danger-button{cursor:pointer;border:0;border-radius:15px;justify-content:center;align-items:center;gap:9px;min-height:52px;padding:0 20px;font-weight:700;display:inline-flex}.primary-button{color:#fff;background:var(--green);box-shadow:0 8px 18px #246b4a33}.primary-button:hover{background:var(--green-dark)}.secondary-button{color:var(--green-dark);background:var(--green-soft)}.ghost-button{color:var(--ink);border:1px solid var(--line);background:0 0}.danger-button{color:var(--red);background:#fbeae8}button:disabled{opacity:.55;cursor:not-allowed}button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline-offset:2px;outline:3px solid #246b4a40}.icon-button{border:1px solid var(--line);cursor:pointer;background:#fff;border-radius:14px;place-items:center;width:48px;height:48px;padding:0;display:grid}.bottom-nav{z-index:50;padding:8px 14px calc(8px + env(safe-area-inset-bottom));border-top:1px solid var(--line);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);background:#fffffff0;position:fixed;bottom:0;left:0;right:0}.bottom-nav-inner{grid-template-columns:repeat(4,1fr);gap:4px;max-width:680px;margin:0 auto;display:grid}.nav-item{min-height:58px;color:var(--muted);border-radius:14px;flex-direction:column;justify-content:center;align-items:center;gap:3px;font-size:.78rem;font-weight:600;display:flex}.nav-item.active{color:var(--green);background:var(--green-soft)}.hero-card{color:#fff;background:linear-gradient(145deg,#1c5d3e,#2d7955);padding:clamp(24px,5vw,42px);position:relative;overflow:hidden}.hero-card:after{content:"";border:38px solid #ffffff14;border-radius:50%;width:230px;height:230px;position:absolute;top:-120px;right:-70px}.due-number{letter-spacing:-.07em;margin:8px 0 20px;font-size:clamp(3.7rem,10vw,5.7rem);font-weight:800;line-height:.95}.due-number span{letter-spacing:0;margin-left:9px;font-size:1.2rem}.hero-card .primary-button{color:var(--green-dark);background:#fff;min-width:210px}.quick-entry{justify-content:space-between;align-items:center;gap:16px;margin-top:16px;padding:20px 22px;display:flex}.quick-entry strong{margin-bottom:4px;font-size:1.1rem;display:block}.round-arrow{background:var(--green-soft);width:48px;height:48px;color:var(--green);border-radius:50%;flex:none;place-items:center;display:grid}.stat-strip{grid-template-columns:repeat(3,1fr);margin-top:16px;padding:18px 8px;display:grid}.mini-stat{text-align:center;border-right:1px solid var(--line);padding:7px}.mini-stat:last-child{border-right:0}.mini-stat strong{margin-bottom:4px;font-size:1.45rem;display:block}.mini-stat span{color:var(--muted);font-size:.85rem}.section{margin-top:28px}.section-heading{justify-content:space-between;align-items:center;margin-bottom:12px;display:flex}.weak-list{gap:10px;display:grid}.weak-item{align-items:center;gap:14px;padding:17px 18px;display:flex}.weak-rank{background:var(--surface-soft);width:34px;height:34px;color:var(--green);border-radius:11px;place-items:center;font-weight:800;display:grid}.weak-item strong{margin-bottom:3px;display:block}.field{margin-bottom:24px}.field-label{justify-content:space-between;gap:12px;margin:0 0 10px;font-weight:700;display:flex}.required:after{content:"必填";color:var(--orange);margin-left:7px;font-size:.72rem;font-weight:700}.input,.textarea,.select{border:1px solid var(--line);width:100%;min-height:52px;color:var(--ink);background:#fff;border-radius:14px;padding:13px 15px}.textarea{resize:vertical;min-height:92px}.chip-grid{flex-wrap:wrap;gap:10px;display:flex}.chip{border:1px solid var(--line);min-height:44px;color:var(--ink);cursor:pointer;background:#fff;border-radius:13px;padding:9px 15px}.chip.selected{background:var(--green);border-color:var(--green);color:#fff}.upload-zone{background:var(--surface-soft);text-align:center;cursor:pointer;border:2px dashed #b6c5ba;border-radius:20px;justify-content:center;align-items:center;min-height:150px;padding:24px;display:flex}.upload-zone input{opacity:0;pointer-events:none;position:absolute}.upload-zone strong{margin:9px 0 3px;display:block}.preview-grid{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:12px;margin-top:14px;display:grid}.image-preview{aspect-ratio:4/3;border:1px solid var(--line);background:#eef0ed;border-radius:16px;position:relative;overflow:hidden}.image-preview img{object-fit:contain;width:100%;height:100%}.remove-image{color:#fff;background:#17211bc7;border:0;border-radius:50%;place-items:center;width:38px;height:38px;display:grid;position:absolute;top:7px;right:7px}.form-actions{bottom:calc(78px + env(safe-area-inset-bottom));background:linear-gradient(#0000,#f4f6f3 22%);padding:14px 0 5px;position:sticky}.form-actions .primary-button{width:100%;min-height:58px}.form-note{text-align:center;color:var(--muted);margin:9px 0 0;font-size:.82rem}.advanced{margin-top:5px}.advanced summary{cursor:pointer;justify-content:space-between;align-items:center;min-height:50px;font-weight:700;list-style:none;display:flex}.advanced summary::-webkit-details-marker{display:none}.filters{scrollbar-width:none;gap:10px;padding:2px 1px 12px;display:flex;overflow-x:auto}.filters::-webkit-scrollbar{display:none}.filter-select{border:1px solid var(--line);background:#fff;border-radius:13px;flex:none;min-height:46px;padding:0 34px 0 13px}.search-box{margin-bottom:12px;position:relative}.search-box svg{color:var(--muted);position:absolute;top:15px;left:15px}.search-box .input{padding-left:46px}.library-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;display:grid}.mistake-card{transition:border-color .15s;overflow:hidden}.mistake-card:hover{border-color:#b6c5ba}.thumb{aspect-ratio:16/9;background:#eef0ed;overflow:hidden}.thumb img{object-fit:cover;width:100%;height:100%}.thumb-placeholder{height:100%;color:var(--muted);place-items:center;display:grid}.mistake-card-body{padding:16px}.badges{flex-wrap:wrap;gap:7px;margin:10px 0 13px;display:flex}.badge{background:var(--surface-soft);color:var(--muted);border-radius:999px;padding:5px 9px;font-size:.75rem}.status{color:var(--orange);align-items:center;gap:5px;font-size:.78rem;font-weight:700;display:inline-flex}.status.mastered{color:var(--green)}.card-meta{color:var(--muted);justify-content:space-between;font-size:.78rem;display:flex}.empty-state{text-align:center;padding:48px 24px}.empty-icon{width:58px;height:58px;color:var(--green);background:var(--green-soft);border-radius:18px;place-items:center;margin:0 auto 15px;display:grid}.empty-state h2{margin:0 0 7px}.empty-state p{max-width:380px;color:var(--muted);margin:0 auto 18px}.notice{color:#744014;background:#fff4df;border-radius:13px;margin-bottom:18px;padding:13px 16px;font-size:.9rem}.error{color:#7d302b;background:#fbeae8;border-radius:13px;margin-bottom:18px;padding:13px 16px}.success{background:var(--green-soft);color:var(--green-dark);border-radius:13px;margin-bottom:18px;padding:13px 16px}.spinner{border:3px solid #fff6;border-top-color:#fff;border-radius:50%;width:24px;height:24px;animation:.7s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.review-shell{max-width:860px}.review-progress{background:#dfe5e0;border-radius:999px;height:8px;margin:16px 0 20px;overflow:hidden}.review-progress>div{background:var(--green);border-radius:inherit;height:100%;transition:width .2s}.question-stage{padding:clamp(16px,4vw,28px)}.question-images{gap:14px;display:grid}.question-images img{object-fit:contain;background:#f4f5f3;border-radius:14px;width:100%;max-height:58svh}.reveal-button{width:100%;margin-top:18px}.answer-panel{background:var(--surface-soft);border-radius:17px;margin-top:18px;padding:20px}.answer-row{margin-bottom:16px}.answer-row:last-child{margin-bottom:0}.answer-row span{color:var(--muted);margin-bottom:4px;font-size:.8rem;display:block}.rating-grid{grid-template-columns:repeat(3,1fr);gap:10px;margin-top:16px;display:grid}.rating-button{border:1px solid var(--line);cursor:pointer;background:#fff;border-radius:15px;min-height:64px;font-weight:700}.rating-button.mastered{color:var(--green);background:var(--green-soft)}.rating-button.fuzzy{color:#9a571d;background:#fff4df}.rating-button.again{color:var(--red);background:#fbeae8}.stat-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;display:grid}.stat-card{padding:20px}.stat-card span{color:var(--muted);margin-bottom:7px;font-size:.82rem;display:block}.stat-card strong{font-size:1.75rem}.rank-list{overflow:hidden}.rank-row{border-bottom:1px solid var(--line);grid-template-columns:34px minmax(0,1fr) auto;align-items:center;gap:12px;padding:15px 18px;display:grid}.rank-row:last-child{border-bottom:0}.bar-list{gap:16px;padding:18px;display:grid}.bar-heading{justify-content:space-between;margin-bottom:7px;font-size:.9rem;display:flex}.bar-track{background:var(--surface-soft);border-radius:999px;height:9px;overflow:hidden}.bar-fill{border-radius:inherit;background:var(--green);height:100%}.week-chart{align-items:end;gap:10px;min-height:220px;padding:20px;display:flex}.day-column{flex-direction:column;flex:1;justify-content:end;align-items:center;gap:8px;height:160px;display:flex}.day-bar{background:var(--green);border-radius:9px 9px 4px 4px;width:min(36px,80%);min-height:5px}.day-label{color:var(--muted);font-size:.75rem}.settings-list{overflow:hidden}.settings-row{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:16px;padding:18px;display:flex}.settings-row:last-child{border-bottom:0}.settings-row strong{margin-bottom:3px;display:block}.settings-row .secondary-button,.settings-row .ghost-button{flex:none}.login-page{background:linear-gradient(145deg,#ecf2ed,#f7f8f6);place-items:center;min-height:100svh;padding:24px;display:grid}.login-card{width:min(100%,440px);padding:30px}.brand-mark{color:#fff;background:var(--green);border-radius:17px;place-items:center;width:54px;height:54px;margin-bottom:22px;display:grid}.login-card h1{margin:0 0 8px}.login-card>p{color:var(--muted);margin:0 0 26px}.login-card .primary-button{width:100%}.loading-screen{min-height:100svh;color:var(--green);place-items:center;display:grid}.detail-images{gap:12px;margin-bottom:24px;display:grid}.detail-images img{border:1px solid var(--line);border-radius:16px;width:100%}@media (width<=700px){.page{padding-top:20px}.library-grid{grid-template-columns:1fr}.stat-grid{grid-template-columns:repeat(2,1fr)}.rating-grid{grid-template-columns:1fr}.settings-row{flex-direction:column;align-items:flex-start}.settings-row button{width:100%}}@media (width>=900px) and (orientation:landscape){.home-layout{grid-template-columns:1.15fr .85fr;align-items:start;gap:20px;display:grid}.home-layout .section{margin-top:0}.capture-layout{grid-template-columns:1fr 1fr;align-items:start;gap:28px;display:grid}.capture-layout .form-actions{grid-column:1/-1}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;animation-duration:.01ms!important}}
