:root{--bg:#f6f7f9;--ink:#202a3a;--muted:#7d8797;--line:#e9edf2;--green:#347761;--light:#edf5f0;--orange:#c28c4d}*{box-sizing:border-box}body{margin:0;font:14px/1.65 -apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC",sans-serif;color:var(--ink);background:var(--bg)}button,input,select,textarea{font:inherit}button,a,select{touch-action:manipulation}button{cursor:pointer;border:0}a{color:inherit;text-decoration:none}aside{position:fixed;inset:0 auto 0 0;width:230px;background:#fff;border-right:1px solid var(--line);padding:36px 24px;display:flex;flex-direction:column}.brand{display:flex;align-items:center;gap:12px;font-size:25px;font-weight:700;letter-spacing:1px}.logo{display:grid;place-items:center;background:var(--green);color:white;width:43px;height:43px;border-radius:14px;font-size:23px}.brand small{display:block;font-size:10px;letter-spacing:4px;color:#98a19c;line-height:1.2}.side-label{margin:42px 12px 14px;color:#a0a8b2;font-size:11px;letter-spacing:2px}nav a{display:flex;gap:14px;align-items:center;margin:6px 0;padding:12px 16px;color:#718091;border-radius:9px;font-size:14px}nav a.active{background:var(--light);color:var(--green);font-weight:600}nav a:hover{background:#f3f6f4}.ico{font-size:20px;width:22px;text-align:center}.side-bottom{margin-top:auto;font-size:12px;color:#83948c;padding:18px 8px}.side-bottom p{font-size:11px;color:#a1a9b3}.tiny-dot{display:inline-block;width:6px;height:6px;background:#5d9d80;border-radius:50%;margin-right:6px}.shell{margin-left:230px}header{height:84px;background:#ffffffc9;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 42px;gap:20px}.breadcrumb{color:#a2a9b3;margin-right:18px}.header-right{display:flex;align-items:center;gap:20px}select,input,textarea{border:1px solid #dfe5e8;border-radius:8px;padding:10px 12px;background:white;color:var(--ink)}select{padding:8px 12px}.local-badge{font-size:11px;color:var(--green);background:var(--light);padding:4px 10px;border-radius:20px}.avatar{width:34px;height:34px;border-radius:50%;background:#efe8de;color:#a28b6b;display:grid;place-items:center;font-size:12px}main{max-width:1400px;margin:auto;padding:35px 42px 50px;min-height:calc(100vh - 150px)}h1{font-size:27px;font-weight:650;margin:0 0 6px;letter-spacing:-.6px}h2{font-size:18px;margin:0 0 16px;font-weight:650}h3{font-size:15px;margin:0 0 6px}p{margin:0 0 12px}.muted{color:var(--muted)}.eyebrow{font-size:11px;font-weight:600;letter-spacing:2px;color:var(--green);margin-bottom:10px}.page-title{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:27px}.page-title p{color:var(--muted);font-size:13px;margin:0}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:1px solid #dfe6e3;background:white;border-radius:8px;padding:10px 17px;color:#465b50;font-weight:550;white-space:nowrap}.btn.primary{background:var(--green);border-color:var(--green);color:#fff}.btn:hover{filter:brightness(.96)}.btn.small{padding:6px 12px;font-size:12px}.btn.danger{color:#ad4f45}.btn:disabled{opacity:.4;cursor:default}.hero{background:#e9f1ec;border:1px solid #dce9df;border-radius:15px;padding:30px 32px;position:relative;overflow:hidden;display:flex;justify-content:space-between;gap:26px;margin-bottom:25px}.hero h2{font-size:25px;font-weight:600;margin-bottom:10px}.hero p{max-width:580px;color:#6d8377;font-size:13px}.hero-art{width:190px;min-width:150px;display:grid;place-items:center;position:relative}.orbit{width:140px;height:140px;border:1px solid #b4cbbd;border-radius:50%;display:grid;place-items:center;transform:rotate(-12deg)}.book{background:#fffcf6;padding:18px 27px;border-radius:4px 12px 12px 4px;border-left:7px solid #80a58f;box-shadow:8px 10px 0 #cadbcf;font-family:Georgia,serif;font-size:34px;color:#62856e;transform:rotate(20deg)}.orbit:after{content:'✦';position:absolute;right:-5px;top:9px;color:#aa946f;font-size:30px}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:17px;margin-bottom:28px}.card{background:white;border:1px solid var(--line);border-radius:12px;padding:23px}.stat-top{display:flex;justify-content:space-between;color:var(--muted);font-size:12px}.stat-num{font-size:30px;font-weight:600;margin:10px 0 4px;line-height:1.2}.stat-num small{font-size:12px;font-weight:400;color:#89949f;margin-left:6px}.stat-note{color:#9aa3af;font-size:11px}.columns{display:grid;grid-template-columns:minmax(0,1.7fr) minmax(260px,1fr);gap:22px}.card-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.card-head h2{margin:0}.link{color:var(--green);font-size:12px;background:none;padding:0}.task{padding:16px 0;border-bottom:1px solid var(--line);display:flex;gap:14px;align-items:center}.task:last-child{border:0}.task input{accent-color:var(--green);width:18px;height:18px}.task-body{flex:1}.task p{font-size:12px;color:#8a94a1;margin:3px 0 0}.tag{font-size:10px;display:inline-block;padding:3px 8px;border-radius:5px;background:#f2f4f7;color:#82909f;margin-right:6px}.tag.green{background:var(--light);color:var(--green)}.tag.gold{background:#faf3e7;color:#b78d50}.progress{height:6px;border-radius:8px;background:#edf1f3;overflow:hidden;margin:13px 0}.progress span{display:block;height:100%;background:#7fa58b;border-radius:8px}.info-row{display:flex;align-items:center;justify-content:space-between;margin-top:18px}.steps{display:flex;gap:10px;margin:18px 0 0;color:#72877a;font-size:12px}.steps span{background:#f1f5f2;border-radius:6px;padding:8px}.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}.practice-card{display:flex;flex-direction:column;min-height:240px;transition:transform .2s}.practice-card:hover{transform:translateY(-3px)}.practice-card h2{margin:15px 0 8px}.practice-card .btn{margin-top:auto;align-self:flex-start}.notice{padding:12px 16px;background:#f0f4f1;border-radius:8px;font-size:12px;color:#6b8373;margin-bottom:20px}.passage{font-family:Georgia,serif;font-size:19px;line-height:1.95;color:#3a4652;white-space:pre-wrap}.question{font-weight:600;font-size:17px;margin:22px 0 15px}.option{display:block;padding:12px;border:1px solid var(--line);border-radius:8px;margin:10px 0;cursor:pointer}.option:has(input:checked){border-color:#80a28f;background:#f0f6f2}.option input{margin-right:12px;accent-color:var(--green)}label.field{display:block;font-size:13px;font-weight:550;margin-bottom:15px}label.field input,label.field textarea,label.field select{display:block;width:100%;margin-top:7px}textarea{resize:vertical;min-height:110px;width:100%;line-height:1.8}textarea.essay{min-height:320px;font:17px/1.9 Georgia,serif}.row{display:flex;gap:12px;align-items:center;flex-wrap:wrap}.row>.field{flex:1;min-width:160px}.result{margin-top:20px;padding:22px;background:#f2f6f3;border:1px solid #d9e6df;border-radius:10px}.result.wrong{background:#fcf7ee;border-color:#eddfc4}.result blockquote{border-left:3px solid #83a18f;padding-left:15px;margin:15px 0;color:#627567}.empty{text-align:center;color:#8c98a4;padding:40px 15px}.empty .big{font-size:36px;margin-bottom:12px}.notebook-item{margin-bottom:15px}.notebook-item .row{justify-content:space-between}.feedback-item{border-bottom:1px solid var(--line);padding:14px 0}.feedback-item:last-child{border:0}.feedback-item p{color:#7a8794;font-size:13px;margin-top:6px}.pill-tabs{display:flex;gap:8px;margin-bottom:22px;flex-wrap:wrap}.pill-tabs button{border:1px solid var(--line);border-radius:20px;padding:7px 18px;color:#7d8795;background:#fff}.pill-tabs button.active{background:#eaf3ed;color:var(--green);border-color:#bfd4c5}.source-card{margin-bottom:16px}.source-card small{color:#9ba3ac}.source-card p{color:#687685;margin:12px 0}.source-card details{font-size:12px;color:#81918a;overflow-wrap:anywhere}.writing-layout{display:grid;grid-template-columns:1.35fr 1fr;gap:22px}.checks label{display:block;padding:9px 0;font-size:13px}.checks input{accent-color:var(--green);margin-right:8px}footer{max-width:1400px;margin:auto;padding:18px 42px;border-top:1px solid var(--line);color:#8d9b91;font-size:11px;display:flex;justify-content:space-between}#toast{position:fixed;bottom:28px;left:50%;transform:translateX(-50%);background:#263e32;color:white;padding:12px 24px;border-radius:9px;opacity:0;pointer-events:none;transition:opacity .2s;z-index:99}#toast.show{opacity:1}dialog{border:1px solid var(--line);border-radius:14px;padding:28px;width:min(620px,92vw);max-height:85vh}dialog::backdrop{background:#152b243d}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0)}button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:3px solid #90b5a2;outline-offset:3px}.week{display:grid;grid-template-columns:repeat(7,1fr);gap:9px;margin:20px 0}.day{padding:15px 4px;text-align:center;background:#f5f7f6;border-radius:8px;color:#91a097}.day.today{background:var(--green);color:#fff}.day strong{display:block;font-size:18px}.bar{display:flex;align-items:center;gap:12px;margin:12px 0}.bar span:first-child{width:75px;font-size:12px;color:#8c96a2}.bar .progress{flex:1;margin:0}.hero .btn{margin-top:4px}.subtitle{font-size:12px;color:#8f9b93}.bottom-gap{margin-bottom:20px}input[type=checkbox]{accent-color:var(--green)}@media(min-width:1600px){main{padding-top:45px}}@media(max-width:1100px){aside{width:190px;padding:26px 16px}.shell{margin-left:190px}header{padding:0 25px}main{padding:28px 25px}.stats{gap:10px}.card{padding:18px}.columns{grid-template-columns:1.4fr 1fr}.local-badge{display:none}}@media(max-width:800px){aside{position:static;width:100%;padding:16px;border-bottom:1px solid var(--line)}.brand{font-size:20px}.side-label,.side-bottom{display:none}nav{display:flex;overflow:auto;margin-top:15px}nav a{white-space:nowrap;padding:7px 12px;margin:0;font-size:12px;gap:5px}.ico{font-size:16px}.shell{margin:0}header{height:65px;padding:0 18px}.header-right{gap:10px}.breadcrumb{display:none}main{padding:22px 18px}.stats{grid-template-columns:repeat(2,1fr)}.columns,.writing-layout,.grid3{grid-template-columns:1fr}.hero{padding:22px}.hero-art{display:none}.hero h2{font-size:22px}.page-title{align-items:flex-start}h1{font-size:23px}footer{padding:15px 18px;display:block}footer span{display:block}.week{gap:5px}.day{font-size:11px}.page-title .btn{font-size:11px;padding:9px}.passage{font-size:17px}}

.vocab-summary{background:#edf4ee}.vocab-summary .progress{margin-top:18px;height:8px}.vocab-summary strong{font-size:28px;margin-left:18px;color:#28654c}.word-study{min-height:380px}.word-face{text-align:center;padding:32px 12px}.word-face>h2{font-size:clamp(32px,5vw,48px);overflow-wrap:anywhere;margin:18px 0 8px}.word-face>.row{justify-content:center}.word-meaning{padding:20px;background:#f4f7f3;border-radius:14px;margin:20px 0}.word-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin:18px 0}.word-entry{padding:15px;border:1px solid #e0e7e0;border-radius:12px;overflow-wrap:anywhere}.word-entry summary{cursor:pointer}.word-entry summary span{float:right;font-size:11px;color:#6d7d71}.word-entry p{margin:12px 0}.word-entry small{color:#617469}@media(max-width:1000px){.word-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:600px){.word-grid{grid-template-columns:1fr}.vocab-summary .row{align-items:flex-start}.word-face{padding:24px 0}.word-face .row{flex-direction:column}}

#word-library,#word-study{scroll-margin-top:90px}#word-study:focus{outline:2px solid #41745d;outline-offset:4px}

#pack-result{scroll-margin-top:90px}#pack-form select{max-width:100%}

/* ===== 写作工作坊 v2 ===== */
.hidden{display:none!important}
.prompt-card{border:1px solid #e3e9e4;background:#fbfdfb;border-radius:14px;padding:22px}
.prompt-en{font-size:17px;line-height:1.6;margin:14px 0 10px;font-weight:600}
.prompt-zh{margin:0;color:#5c6b62;font-size:13.5px}
.prompt-meta{justify-content:space-between;align-items:center;margin-top:14px;font-size:12px;color:#84938a;border-top:1px dashed #e2e9e3;padding-top:12px}
.outline{margin:10px 0 6px;padding-left:20px;color:#4b5a52;font-size:13.5px}
.outline li{margin:5px 0}
.writing-layout{display:grid;grid-template-columns:1.02fr .98fr;gap:22px;align-items:start}
.essay{min-height:360px;line-height:1.9;font-size:14.5px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.score-block{display:flex;gap:18px;align-items:center;padding:16px 18px;background:#f2f7f3;border-radius:14px;margin:6px 0 18px}
.score-num{font-size:34px;font-weight:700;color:#28654c;line-height:1}
.score-num small{font-size:12px;font-weight:400;color:#7d9488;margin-left:3px}
.score-label{font-size:11px;color:#84938a;letter-spacing:1px}
.score-value{font-size:19px;font-weight:600;color:#1f3d31}
.dims{display:grid;gap:13px}
.dim-top{display:flex;justify-content:space-between;font-size:13px}
.dim-top strong{color:#28654c}
.dim small{color:#8a978f;font-size:11.5px}
.verdict{margin:18px 0 0;padding:12px 14px;border-left:3px solid #4c8a6b;background:#f6faf7;font-size:13.5px}
.advice{margin-top:18px;padding:16px 18px;background:#fdf8ef;border-radius:12px}
.advice h3{margin:0 0 8px;font-size:13px;letter-spacing:.5px;color:#8a6a33}
.advice ol{margin:0;padding-left:19px;font-size:13.5px;color:#5b5344}
.advice li{margin:5px 0}
.legend{display:flex;gap:12px;font-size:11px;color:#7d8797}
.legend span{display:flex;align-items:center;gap:5px}
.legend i{width:11px;height:11px;border-radius:3px;display:inline-block;border-bottom:2px solid}
.legend i.gx-err{background:#fbe6e4;border-color:#c4564a}
.legend i.gx-warn{background:#fdf3dd;border-color:#c28c4d}
.legend i.gx-style{background:#e8eef6;border-color:#5c7fa8}
.marked{margin-top:12px;padding:18px;border:1px solid #e6ebe7;border-radius:12px;line-height:2.05;font-size:14px;background:#fff;white-space:normal;overflow-wrap:anywhere}
.marked mark{padding:1px 2px;border-radius:3px;background:transparent;border-bottom:2px solid;cursor:help}
.marked mark.gx-err{background:#fbe6e4;border-color:#c4564a;color:#8f3529}
.marked mark.gx-warn{background:#fdf3dd;border-color:#c28c4d;color:#7d5a24}
.marked mark.gx-style{background:#e8eef6;border-color:#5c7fa8;color:#3d5b7a}
.issue-group{margin-top:16px}
.issue-head{display:flex;align-items:center;gap:7px;font-size:12px;letter-spacing:.5px;color:#6b7a72;margin-bottom:8px}
.dot{width:8px;height:8px;border-radius:50%}
.dot.err{background:#c4564a}.dot.warn{background:#c28c4d}.dot.style{background:#5c7fa8}
.issue{padding:10px 13px;border:1px solid #edf0ee;border-radius:9px;margin-bottom:8px;font-size:13px}
.issue-row{display:flex;justify-content:space-between;gap:12px;align-items:baseline}
.issue code{background:#f5f7f5;padding:2px 6px;border-radius:5px;font-size:12.5px;overflow-wrap:anywhere}
.issue-cat{flex:none;font-size:11px;color:#84938a;background:#f2f6f3;padding:2px 8px;border-radius:20px}
.issue p{margin:7px 0 0;color:#4f5d55}
.issue .fix{color:#2f6b52;font-size:12.5px}
.notice.ok{background:#eef6f0;border-left-color:#4c8a6b}
.model-card{margin-top:22px}
.model-body p{margin:13px 0;line-height:1.85}
.model-body b{display:inline-block;width:20px;height:20px;line-height:20px;text-align:center;border-radius:50%;background:#e5efe8;color:#3d6f57;font-size:11px;margin-right:9px;font-weight:600}
.notes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px;margin-top:10px}
.notes div{display:flex;flex-direction:column;gap:2px;padding:9px 11px;background:#f7faf8;border-radius:9px}
.notes code{font-size:12.5px;color:#2f6b52;overflow-wrap:anywhere}
.notes span{font-size:11.5px;color:#84938a}
.log-list{display:grid;gap:8px;margin-top:12px}
.log-row{display:flex;align-items:center;gap:14px;padding:10px 13px;border:1px solid #eef1ef;border-radius:9px;font-size:13px}
.log-row div{display:flex;align-items:baseline;gap:9px;flex:1;min-width:0}
.log-row b{font-size:17px;color:#28654c;flex:none}
.log-row span{color:#5f6e66;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.log-row small{color:#93a099;flex:none;font-size:11.5px}
.lib{max-height:56vh;overflow:auto;margin-top:14px;padding-right:4px}
.lib-group{margin-bottom:14px}
.lib-date{font-size:11px;letter-spacing:1px;color:#9aa6a0;margin-bottom:6px}
.lib-item{display:flex;gap:9px;align-items:flex-start;text-align:left;width:100%;padding:10px 12px;border:1px solid #ecf0ed;background:#fff;border-radius:9px;margin-bottom:6px;font-size:13px;line-height:1.5}
.lib-item:hover{background:#f6faf7;border-color:#cfe0d5}
.lib-item.active{border-color:#4c8a6b;background:#eff7f1}
.lib-item span:last-child{color:#48574f}
@media(max-width:1000px){.writing-layout{grid-template-columns:1fr}.notes{grid-template-columns:1fr}}

/* Calm feedback inspired by the reference recording. */
.btn{transition:transform .15s ease,background-color .18s ease,box-shadow .18s ease}
.btn:active{transform:scale(.97)}
.btn:focus-visible,summary:focus-visible{outline:3px solid #b2cfc0;outline-offset:3px}
.task-progress{display:flex;align-items:center;gap:24px;background:#f6f9f5;transition:background-color .25s ease}
.task-progress.is-complete{background:#eaf3e7;border-color:#b9cfb3}
.task-progress h2{margin:5px 0 8px}.task-progress .subtitle{margin:0}
.progress-caption{margin:8px 0 0;font-size:13px;color:#647568}
.progress-ring{width:86px;height:86px;position:relative;flex:none;display:grid;place-items:center}
.progress-ring svg{position:absolute;inset:0;width:100%;height:100%;transform:rotate(-90deg)}
.progress-ring circle{fill:none;stroke-width:6}.ring-track{stroke:#e0e9df}.ring-value{stroke:#4d7a5d;stroke-linecap:round}
.progress-ring span{font-size:20px;font-weight:700;color:#355b40}
.pack-group{border:1px solid #dce5dd;border-radius:18px;overflow:hidden;background:#f5f8f4}
.pack-group>summary{list-style:none;cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:18px;padding:22px 24px}
.pack-group>summary::-webkit-details-marker{display:none}.pack-group>summary strong{font-size:18px}.pack-group>summary small{display:block;margin-top:5px;color:#748177;font-size:13px}
.group-chevron{font-size:25px;transition:transform .2s ease}.pack-group[open] .group-chevron{transform:rotate(180deg)}
.pack-group-body{padding:0 18px 18px}.pack-group[open] .pack-group-body{animation:soft-reveal .22s ease-out}
.page-arrive{animation:page-arrive .2s ease-out}.completion-feedback{animation:completion-feedback .55s ease-out}
.task input{accent-color:#4d7a5d;cursor:pointer}.task input:focus-visible{outline:2px solid #4d7a5d;outline-offset:4px}
@keyframes completion-feedback{0%{box-shadow:0 0 0 0 #7b9e6650}55%{box-shadow:0 0 0 7px #7b9e6618}100%{box-shadow:0 0 0 0 transparent}}
@keyframes soft-reveal{from{opacity:.65;transform:translateY(-5px)}to{opacity:1;transform:none}}
@keyframes page-arrive{from{opacity:.6;transform:translateY(5px)}to{opacity:1;transform:none}}
@media(max-width:600px){.task-progress{gap:14px;padding:20px 16px}.task-progress h2{font-size:18px}.progress-ring{width:70px;height:70px}.pack-group>summary{padding:18px}.pack-group-body{padding:0 12px 12px}}
@media(prefers-reduced-motion:reduce){.btn,.group-chevron,.task-progress{transition:none}.page-arrive,.completion-feedback,.pack-group[open] .pack-group-body{animation:none}.btn:active{transform:none}}
