@charset "UTF-8";
:root{--ink:#1f352b;--muted:#758176;--line:#dfe5db;--paper:#f6f7f2;--green:#274c3b;--lime:#d2e6a9;--white:#fff;--mono:Consolas,"Cascadia Code",monospace}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font:15px/1.7 "Segoe UI","Microsoft YaHei",system-ui,sans-serif}a{color:var(--green);text-decoration:none}a:hover{text-decoration:underline}button,input,textarea,select{font:inherit}button,a,input,textarea,select{outline-offset:4px}button{cursor:pointer;border:0}button:disabled{opacity:.5;cursor:wait}button:focus-visible,a:focus-visible{outline:3px solid #88a85c}.shell{display:flex;min-height:100vh}.sidebar{width:245px;flex-shrink:0;background:#fff;border-right:1px solid var(--line);padding:34px 24px;position:fixed;top:0;bottom:0;display:flex;flex-direction:column}.brand{display:flex;gap:12px;align-items:center;font-size:17px;font-weight:750;letter-spacing:1.7px}.brand:hover{text-decoration:none}.brand-icon{display:grid;place-content:center;position:relative;background:var(--green);color:var(--lime);width:42px;height:45px;border-radius:12px;font:bold 25px Georgia}.brand-icon span{position:absolute;right:3px;top:1px;font:14px system-ui}.brand small{display:block;font-size:11px;color:var(--muted);font-weight:400;letter-spacing:2px}.local-label{margin:29px 0 35px;font:12px var(--mono);color:#718469;background:#f0f5e9;border:1px solid #e5edda;padding:8px 12px;border-radius:6px}.local-label i{display:inline-block;background:#81a550;width:6px;height:6px;border-radius:100%;margin-right:7px}.side-link{display:flex;gap:12px;width:100%;text-align:left;padding:12px 14px;margin:6px 0;border-radius:7px;color:#738077;background:transparent;font-size:14px}.side-link span{width:18px;color:#879780}.side-link.active{background:#eaf1df;color:#345338;font-weight:650}.nav-label{font:9px var(--mono);letter-spacing:1.7px;color:#99a194;margin:31px 12px 14px}.side-bottom{margin-top:auto;padding-top:40px;font-size:12px;color:var(--muted)}.progress-label{display:flex;justify-content:space-between;font-size:11px}.progress-label strong{color:var(--green);font-family:var(--mono)}.progress-track{background:#eef0e8;height:5px;border-radius:6px;margin:12px 0}.progress-track span{display:block;height:100%;background:#7a9c54;border-radius:6px;transition:width .3s}.side-bottom p{font-size:11px;line-height:1.8}.side-bottom>a{display:block;border-top:1px solid var(--line);padding-top:20px;margin-top:25px}.side-bottom>small{display:block;font-size:10px;margin-top:10px;color:#9ca397}.workspace{margin-left:245px;width:calc(100% - 245px)}.topbar{height:78px;border-bottom:1px solid var(--line);padding:0 48px;display:flex;align-items:center;justify-content:space-between;font-size:12px;color:var(--muted);background:#ffffff75}.topbar>div{display:flex;gap:24px;align-items:center}#breadcrumb>span{margin:0 12px;color:#b1bbad}.python-pill{border:1px solid #dbe2d5;padding:4px 9px;border-radius:5px;font:11px var(--mono);color:#65775f}.text-button{background:none;color:var(--green);font-size:12px;padding:0}main{max-width:1400px;padding:42px 48px 30px;margin:auto}.eyebrow{font:11px var(--mono);letter-spacing:2px;color:#8b9d79;margin:0 0 18px}.hero{background:#203e31;color:white;border-radius:15px;padding:39px 42px;display:grid;grid-template-columns:1.5fr 1fr;gap:25px;position:relative;overflow:hidden}.hero::after{content:"";position:absolute;width:250px;height:250px;border:1px solid #a0b88625;border-radius:100%;right:-110px;top:-120px}.hero h1{font-size:34px;line-height:1.45;letter-spacing:1px;margin:0 0 17px;font-weight:650}.hero h1 em{font-style:normal;color:var(--lime)}.hero p{font-size:13px;color:#b5c6b7;line-height:1.9;max-width:450px;margin:0 0 24px}.hero .eyebrow{color:#a8bf8a;font-size:10px}.primary,.secondary{display:inline-flex;align-items:center;justify-content:center;gap:18px;padding:11px 20px;border-radius:7px;font-size:13px;font-weight:600;text-decoration:none}.primary{background:var(--green);color:#fff}.hero .primary{background:var(--lime);color:#26422a}.primary:hover,.secondary:hover{filter:brightness(.96);text-decoration:none}.secondary{border:1px solid #d2dbc9;color:var(--green);background:transparent}.terminal{align-self:center;background:#162c23;border:1px solid #506a4e;border-radius:9px;transform:rotate(-2deg);padding:15px 20px;position:relative;font:11px/2 var(--mono);box-shadow:0 15px 20px #102c2233}.terminal-head{font:10px var(--mono);color:#89a281;padding-bottom:13px;border-bottom:1px solid #ffffff12;margin-bottom:15px;display:flex;gap:5px;align-items:center}.terminal-head i{height:6px;width:6px;border-radius:100%;background:#5b7956}.terminal-head span{margin-left:auto}.terminal .dim{color:#688c70}.terminal .lime{color:#d4eaa9}.terminal .light{color:#ccdccd}.terminal .comment{color:#78947c}.terminal-bottom{font-size:10px;color:#a8c797;border-top:1px solid #ffffff12;margin-top:14px;padding-top:10px}.stats{display:grid;grid-template-columns:repeat(3,1fr);border:1px solid var(--line);background:#fff;border-radius:10px;margin:23px 0 38px;padding:20px 0}.stat{padding:0 25px;border-right:1px solid var(--line);display:flex;gap:15px;align-items:center}.stat:last-child{border:0}.stat strong{font:28px/1.3 var(--mono);color:#35513a}.stat p{margin:0;font-size:11px;color:var(--muted)}.stat b{font-size:12px;display:block;font-weight:500;color:#394b3b}.section-head{display:flex;align-items:center;justify-content:space-between;gap:15px;margin:0 0 18px}.section-head h2{font-size:20px;margin:0;font-weight:650}.section-head p{font-size:12px;color:var(--muted);margin:4px 0 0}.search{border:1px solid var(--line);background:white;border-radius:7px;padding:8px 12px;width:220px;font-size:12px}.filters{display:flex;gap:8px;flex-wrap:wrap;margin:18px 0 23px}.filter{font-size:11px;padding:6px 13px;border-radius:5px;border:1px solid var(--line);background:transparent;color:#77836e}.filter.active{background:#e5edda;border-color:#d3dfc3;color:#3c5b32}.card-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}.lesson-card{background:white;border:1px solid var(--line);border-radius:10px;padding:21px;display:flex;flex-direction:column;transition:transform .16s,border-color .16s}.lesson-card:hover{transform:translateY(-3px);border-color:#afc197}.card-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px}.number{font:12px var(--mono);color:#8a9a7c}.stage-badge{font-size:10px;color:#6d815c;border:1px solid #e2e9dc;border-radius:4px;padding:2px 7px}.stage-badge[data-stage="接口进阶"]{color:#5e7c8e;background:#f5f8fa;border-color:#dee8ed}.stage-badge[data-stage="稳定采集"]{color:#9b805d;background:#fbf8f2;border-color:#eee4d5}.stage-badge[data-stage="综合实战"]{color:#8d729b;background:#faf7fc;border-color:#e8dff0}.lesson-card h3{font-size:16px;margin:0 0 7px;font-weight:650}.lesson-card p{font-size:12px;color:#8a9385;line-height:1.8;margin:0 0 17px}.tags{display:flex;gap:5px;flex-wrap:wrap;margin-bottom:20px}.tags span{background:#f2f4ed;color:#7c8873;border-radius:3px;font-size:9px;padding:2px 6px}.card-bottom{display:flex;align-items:center;justify-content:space-between;border-top:1px solid #eff1e9;padding-top:12px;margin-top:auto;font-size:10px;color:#95a08b}.card-start{color:#49673d;background:transparent;font-size:11px;padding:2px 0}.complete{color:#6f9155}.empty{padding:50px;border:1px dashed var(--line);color:var(--muted);text-align:center;grid-column:1/-1}.note{background:#edf1e6;border:1px solid #e0e7d6;padding:16px 20px;border-radius:8px;margin-top:25px;display:flex;align-items:start;gap:15px;color:#6e7e61;font-size:11px}.note b{color:#445a38;white-space:nowrap}footer{margin:25px 48px;padding:21px 0;border-top:1px solid var(--line);font-size:10px;color:#97a18d;display:flex;justify-content:space-between}.lesson-header{padding:6px 0 26px}.back{font-size:12px;color:#8c9a7e}.lesson-header h1{font-size:31px;line-height:1.5;margin:19px 0 9px}.lesson-header p{max-width:800px;color:#7c8b73;font-size:13px;line-height:1.9}.lesson-meta{display:flex;align-items:center;gap:18px;margin:18px 0;font-size:11px;color:#819073}.lesson-layout{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:24px}.panel{background:white;border:1px solid var(--line);border-radius:10px;padding:27px}.tabs{display:flex;gap:18px;border-bottom:1px solid var(--line);margin:-9px 0 25px}.tab{font-size:13px;color:#8b9782;background:none;padding:12px 2px;border-bottom:2px solid transparent}.tab.active{color:var(--green);border-color:#507044;font-weight:600}.panel h2{font-size:17px;margin:0 0 16px}.task-list{padding-left:22px}.task-list li{padding:7px 0 15px 10px;font-size:13px;color:#68795e}.task-list li::marker{color:#90a66d;font-family:var(--mono)}pre{font:12px/1.85 var(--mono);background:#20372d;color:#e2ead9;padding:20px;border-radius:8px;overflow:auto;white-space:pre-wrap;word-break:break-word}code{font-family:var(--mono);font-size:.9em}p code{background:#eaf0e2;padding:3px 6px;border-radius:3px}h3{font-size:14px}.field-example{background:#f1f4ed;color:#405338;border:1px solid #e3e9da}.lesson-side .panel{padding:22px;margin-bottom:18px}.lesson-side h3{font-size:12px;letter-spacing:.5px;margin:0 0 14px}.lesson-side p{font-size:11px;color:#849178;line-height:1.9}.lesson-side .primary{width:100%;font-size:12px}.lesson-side small{display:block;font-size:10px;color:#8e9b80;margin-top:13px}.mini-route{border-left:1px solid #dde5d4;padding-left:17px;margin-left:3px}.mini-route p{position:relative;margin:14px 0}.mini-route p::before{content:"";width:6px;height:6px;background:#c3d0ae;border-radius:50%;position:absolute;left:-21px;top:7px}details{border:1px solid #e3e9dd;border-radius:7px;margin:12px 0;padding:15px;font-size:13px;color:#6d7e61}summary{cursor:pointer;color:#3e5c35;font-weight:500}details p{font-size:12px;line-height:1.9}.muted{color:var(--muted);font-size:12px}.upload-box{border:1px dashed #b9caaa;border-radius:8px;padding:20px;background:#f7f9f2;margin:17px 0;font-size:12px}input[type=file]{width:100%;font-size:12px}textarea{width:100%;height:220px;resize:vertical;border:1px solid var(--line);border-radius:7px;padding:13px;font:12px/1.7 var(--mono);background:#fbfcf8;color:var(--ink)}.check-bar{display:flex;align-items:center;gap:15px;margin-top:15px}.feedback{padding:15px;border-radius:7px;margin-top:15px;font-size:12px;line-height:1.9}.feedback.good{background:#ecf4e3;color:#4d742f}.feedback.bad{background:#fff2e9;color:#986440}.action-row{display:flex;gap:12px;flex-wrap:wrap;margin:18px 0}.code-note{font-size:12px;color:#78896b}.loading-state{padding:80px;text-align:center;color:#8d9b80}dialog{border:1px solid #d4dfc9;max-width:660px;width:calc(100% - 35px);padding:30px;border-radius:14px;color:var(--ink);box-shadow:0 20px 60px #1b342b30}dialog::backdrop{background:#16302465;backdrop-filter:blur(3px)}dialog p,dialog li{font-size:13px;color:#6e7e63;line-height:1.9}.dialog-heading{display:flex;justify-content:space-between;align-items:center}.dialog-heading h2{font-size:21px;margin:0}.dialog-heading button{background:none;font-size:26px;color:#7d8e72}.error-state{color:#9b6545;padding:40px}.bottom-next{margin-top:24px;display:flex;justify-content:space-between;gap:15px}.bottom-next button{font-size:12px}.status-chip{font-size:10px;background:#e5eed9;color:#53753d;padding:3px 8px;border-radius:4px}
@media(min-width:1550px){main{padding-top:48px}.hero{padding:45px 50px}.hero h1{font-size:40px}.lesson-card{padding:26px}.card-grid{gap:22px}}
@media(max-width:1150px){.sidebar{width:210px;padding:28px 18px}.workspace{margin-left:210px;width:calc(100% - 210px)}main{padding:30px}.topbar{padding:0 30px}.hero{padding:30px;grid-template-columns:1.35fr 1fr}.hero h1{font-size:28px}.terminal{font-size:9px;padding:12px}.card-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.lesson-layout{grid-template-columns:minmax(0,1fr) 230px}.lesson-side .panel{padding:18px}footer{margin:20px 30px}}
@media(max-width:800px){.sidebar{position:static;width:100%;padding:18px;border-right:0;border-bottom:1px solid var(--line)}.shell{display:block}.brand{font-size:15px}.brand small{display:none}.local-label,.nav-label,.side-bottom{display:none}.sidebar nav{display:flex;gap:5px;overflow:auto;margin-top:14px}.side-link{white-space:nowrap;margin:0;font-size:12px;padding:8px 12px}#stage-nav{display:flex;gap:5px}.workspace{margin:0;width:100%}.topbar{height:55px;padding:0 22px}.python-pill{display:none}main{padding:24px 20px}.hero{grid-template-columns:1fr;padding:28px}.hero h1{font-size:28px}.hero p{max-width:none}.terminal{display:none}.stats{margin:18px 0 28px;padding:16px 0}.stat{padding:0 14px;gap:9px}.stat strong{font-size:22px}.stat b{font-size:10px}.stat p{font-size:9px}.lesson-layout{grid-template-columns:1fr}.lesson-side{display:grid;grid-template-columns:1fr 1fr;gap:15px}.lesson-side .panel{margin:0}.lesson-header h1{font-size:26px}.section-head{align-items:start}.search{width:180px}.note{display:block}.note b{display:block;margin-bottom:6px}footer{margin:20px;font-size:9px}.panel{padding:20px}.tabs{gap:14px}.tab{font-size:12px}.lesson-meta{flex-wrap:wrap;gap:10px}}
@media(max-width:480px){.card-grid{grid-template-columns:1fr}.section-head{display:block}.search{margin-top:15px;width:100%}.lesson-side{grid-template-columns:1fr}.stat{display:block}.stat strong{font-size:25px}.hero h1{font-size:25px}.topbar>div{gap:8px}.brand-icon{height:35px;width:35px}footer span:last-child{display:none}}
