:root{--ink:#10231c;--muted:#64736e;--paper:#f3f6f1;--white:#fff;--green:#0d7c4d;--green-dark:#065e39;--mint:#dcefe5;--lime:#dff36e;--blue:#3c70d6;--orange:#eb7542;--line:#d9e1da;--shadow:0 24px 70px #2745371c}*{box-sizing:border-box}html{scroll-behavior:smooth}body{background:var(--paper);color:var(--ink);margin:0;font-family:Microsoft YaHei,PingFang SC,Arial,sans-serif}button,input{font:inherit}button,a{-webkit-tap-highlight-color:transparent}button{color:inherit}a{color:inherit;text-decoration:none}::selection{color:var(--ink);background:var(--lime)}.shell{min-height:100vh;overflow:clip}.topbar{-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);border-bottom:1px solid var(--line);z-index:30;background:#f3f6f1e6;justify-content:space-between;align-items:center;height:78px;padding:0 clamp(24px,5vw,76px);display:flex;position:sticky;top:0}.brand{align-items:center;gap:13px;display:flex}.brand-mark{color:#fff;background:var(--green);letter-spacing:.08em;border-radius:15px;place-items:center;width:46px;height:46px;font:800 12px/1 Arial;display:grid;box-shadow:inset 0 0 0 4px #ffffff29}.brand>span:last-child{flex-direction:column;gap:3px;display:flex}.brand b{letter-spacing:.02em;font-size:16px}.brand small{color:var(--muted);font-size:10px}nav{align-items:center;gap:clamp(16px,2.3vw,34px);font-size:12px;display:flex}nav a{transition:color .2s}nav a:hover{color:var(--green)}.status-dot{color:var(--green-dark);background:var(--mint);border-radius:999px;padding:9px 13px;font-size:10px}.status-dot:before{content:"";background:var(--green);border-radius:50%;width:7px;height:7px;margin-right:7px;display:inline-block}.hero{background:radial-gradient(circle at 84% 18%,#dff36e8f,#0000 27%),linear-gradient(135deg,#f8faf6 0%,#edf4ed 100%);grid-template-columns:minmax(0,1.35fr) minmax(340px,.65fr);align-items:center;gap:clamp(50px,8vw,120px);min-height:670px;padding:88px clamp(24px,6vw,92px) 78px;display:grid;position:relative}.hero:after{content:"29";color:#0d7c4d0b;letter-spacing:-.09em;pointer-events:none;font:900 min(28vw,430px)/1 Arial;position:absolute;bottom:-6.5vw;right:-1vw}.hero-copy,.hero-card{z-index:1;position:relative}.eyebrow{color:var(--green);text-transform:uppercase;letter-spacing:.16em;margin:0;font-size:11px;font-weight:800}.hero h1{letter-spacing:-.075em;max-width:920px;margin:22px 0 27px;font-size:clamp(48px,6.1vw,90px);line-height:1.06}.hero h1 em{color:var(--green);font-style:normal}.hero-lead{color:#4d5e57;max-width:700px;margin:0;font-size:16px;line-height:1.9}.hero-lead strong{color:var(--ink)}.hero-actions{align-items:center;gap:25px;margin-top:34px;display:flex}.primary-button{color:#fff;background:var(--green);border-radius:14px;padding:15px 20px;font-size:12px;font-weight:800;transition:all .2s;box-shadow:0 12px 28px #0d7c4d33}.primary-button:hover{background:var(--green-dark);transform:translateY(-1px)}.primary-button span{margin-left:18px}.text-link{color:var(--muted);border-bottom:1px solid;padding:7px 0;font-size:11px}.hero-note{border-left:3px solid var(--orange);color:#42544d;background:#ffffff9e;align-items:center;gap:15px;max-width:710px;margin-top:38px;padding:13px 16px;font-size:11px;line-height:1.6;display:flex}.hero-note b{color:var(--ink);flex:none}.hero-card{box-shadow:var(--shadow);background:#ffffffd1;border:1px solid #10231c1f;border-radius:28px;padding:30px}.score-ring{aspect-ratio:1.9;color:#fff;background:var(--green);border-radius:999px 999px 22px 22px;flex-direction:column;justify-content:center;align-items:center;display:flex}.score-ring span{letter-spacing:-.06em;font:800 64px/1 Arial,sans-serif}.score-ring small{color:#ffffffbd;margin-top:8px;font-size:10px}.hero-stats{grid-template-columns:repeat(3,1fr);gap:8px;margin:22px 0;display:grid}.hero-stats div{text-align:center;background:var(--paper);border-radius:13px;padding:13px 7px}.hero-stats b,.hero-stats span{display:block}.hero-stats b{font-size:20px}.hero-stats span{color:var(--muted);margin-top:4px;font-size:9px}.switch-row{cursor:pointer;grid-template-columns:1fr auto;align-items:center;gap:14px;display:grid}.switch-row>span{flex-direction:column;gap:5px;display:flex}.switch-row b{font-size:11px}.switch-row small{max-width:225px;color:var(--muted);font-size:9px;line-height:1.5}.switch-row input{opacity:0;position:absolute}.switch-row i,.semester-toggle i{background:#d9dfda;border-radius:999px;width:42px;height:24px;padding:3px;transition:all .2s;display:block}.switch-row i:after,.semester-toggle i:after{content:"";background:#fff;border-radius:50%;width:18px;height:18px;transition:transform .2s;display:block;box-shadow:0 2px 6px #0000001f}.switch-row input:checked+i,.semester-toggle input:checked+i{background:var(--green)}.switch-row input:checked+i:after,.semester-toggle input:checked+i:after{transform:translate(18px)}.confirmed-row{color:var(--green-dark);background:var(--mint);border-radius:13px;align-items:center;gap:11px;padding:13px 14px;display:flex}.confirmed-row>span:last-child{flex-direction:column;gap:4px;display:flex}.confirmed-row b{font-size:10px}.confirmed-row small{color:var(--muted);font-size:8px;line-height:1.5}.confirmed-icon{color:#fff;background:var(--green);border-radius:9px;flex:none;place-items:center;width:28px;height:28px;font-weight:900;display:grid}.overview,.recommendation,.catalog,.milestones{padding:92px clamp(24px,6vw,92px);scroll-margin-top:70px}.overview,.milestones{background:var(--white)}.recommendation{color:#fff;background:var(--ink)}.catalog{background:#e9efea}.section-title{align-items:flex-start;gap:19px;margin-bottom:38px;display:flex}.section-title>span{color:var(--green);padding-top:5px;font:800 11px Arial}.recommendation .section-title>span{color:var(--lime)}.section-title p{color:var(--muted);letter-spacing:.15em;margin:0 0 8px;font:800 9px Arial}.recommendation .section-title p{color:#ffffff80}.section-title h2{letter-spacing:-.045em;margin:0;font-size:clamp(29px,3vw,43px)}.progress-grid{grid-template-columns:repeat(5,1fr);gap:12px;display:grid}.progress-card{border:1px solid var(--line);background:#fafbf8;border-radius:18px;padding:20px}.progress-card>div:first-child{justify-content:space-between;align-items:flex-start;gap:10px;display:flex}.progress-card span{color:var(--muted);font-size:10px}.progress-card b{font:800 27px Arial}.progress-card b small{color:var(--muted);font-size:10px}.progress-track,.summary-bar{background:#e3e8e3;border-radius:999px;height:6px;margin:25px 0 12px;overflow:hidden}.progress-track i,.summary-bar i{border-radius:inherit;background:var(--green);height:100%;transition:width .3s;display:block}.progress-card>p{color:var(--green-dark);margin:0;font-size:10px}.completed-block{border:1px solid var(--line);background:#f7f9f6;border-radius:23px;margin-top:20px;padding:28px}.completed-heading{justify-content:space-between;align-items:center;margin-bottom:20px;display:flex}.completed-heading>div{flex-direction:column;gap:4px;display:flex}.completed-heading b{font-size:14px}.completed-heading span{color:var(--muted);font-size:9px}.completed-heading>strong{font:800 33px Arial}.completed-heading strong small{color:var(--muted);font:10px Microsoft YaHei}.completed-list{grid-template-columns:repeat(5,1fr);gap:9px;display:grid}.completed-list>div{background:#fff;border-radius:14px;min-width:0;padding:15px;transition:opacity .2s}.completed-list>div.dimmed{opacity:.34}.completed-list p{min-height:51px;margin:12px 0 8px}.completed-list p small,.completed-list p b{display:block}.completed-list p small{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;font-size:8px;overflow:hidden}.completed-list p b{margin-top:7px;font-size:11px;line-height:1.4}.completed-list>div>strong{color:var(--green);font-size:10px}.state{color:#fff;background:var(--green);border-radius:999px;padding:5px 8px;font-size:8px}.state.exempt{color:var(--green-dark);background:var(--mint)}.recommendation-grid{grid-template-columns:.74fr 1.26fr;gap:16px;display:grid}.rec-lead{min-height:360px;color:var(--ink);background:var(--lime);border-radius:24px;flex-direction:column;align-items:flex-start;padding:36px;display:flex}.rec-lead>span{border:1px solid #10231c4d;border-radius:999px;padding:7px 10px;font-size:9px}.rec-lead h3{letter-spacing:-.07em;margin:46px 0 16px;font-size:clamp(40px,4.5vw,67px);line-height:1}.rec-lead p{color:#10231cbf;max-width:430px;margin:0;font-size:12px;line-height:1.8}.rec-lead button{color:#fff;background:var(--ink);cursor:pointer;border:0;border-radius:12px;margin-top:auto;padding:13px 17px;font-size:11px}.rec-lead button span{margin-left:30px}.rec-logic{grid-template-columns:1fr 1fr;gap:16px;display:grid}.rec-logic>div{background:#ffffff09;border:1px solid #ffffff21;border-radius:21px;min-height:170px;padding:25px}.rec-logic i{color:var(--lime);font:800 10px Arial}.rec-logic b{margin:25px 0 9px;font-size:16px;display:block}.rec-logic p{color:#ffffff8f;margin:0;font-size:10px;line-height:1.7}.decision-strip{background:#ffffff24;border-radius:20px;grid-template-columns:1fr 1fr .8fr;gap:1px;margin-top:38px;display:grid;overflow:hidden}.decision-strip>div{background:#183027;flex-direction:column;align-items:flex-start;min-height:150px;padding:24px;display:flex}.decision-strip span{color:#ffffff80;font-size:9px}.decision-strip b{margin:15px 0;font-size:13px;line-height:1.6}.decision-strip button{color:var(--lime);cursor:pointer;background:0 0;border:0;border-bottom:1px solid #ffffff73;margin-top:auto;padding:0 0 5px;font-size:9px}.decision-strip .decision-note{background:var(--green)}.decision-strip .decision-note b{font-weight:400}.preset-tabs{grid-template-columns:repeat(3,minmax(0,1fr)) auto;gap:10px;margin-bottom:20px;display:grid}.preset-tabs button,.custom-pill{text-align:left;cursor:pointer;background:#ffffffb8;border:1px solid #0000;border-radius:15px;flex-direction:column;gap:5px;min-width:0;padding:16px 18px;display:flex}.preset-tabs button.active{border-color:var(--green);background:#fff;box-shadow:0 8px 24px #1c483112}.preset-tabs button b,.custom-pill b{font-size:11px}.preset-tabs button span,.custom-pill span{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;font-size:8px;overflow:hidden}.custom-pill{cursor:default;border-color:#eb754261}.filters{background:#ffffffb8;border-radius:18px;grid-template-columns:minmax(230px,1fr) minmax(0,2.1fr) auto;align-items:center;gap:12px;padding:16px;display:grid}.search-box{border:1px solid var(--line);background:#fff;border-radius:11px;align-items:center;gap:9px;height:42px;padding:0 13px;display:flex}.search-box span{color:var(--green);font:24px Arial;transform:rotate(-15deg)}.search-box input{width:100%;color:var(--ink);background:0 0;border:0;outline:0;font-size:10px}.category-filters{flex-wrap:wrap;gap:6px;display:flex}.category-filters button{color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:999px;padding:8px 10px;font-size:9px}.category-filters button.active{color:#fff;background:var(--green)}.semester-toggle{cursor:pointer;align-items:center;gap:8px;display:flex}.semester-toggle input{opacity:0;position:absolute}.semester-toggle i{width:36px;height:20px;padding:2px}.semester-toggle i:after{width:16px;height:16px}.semester-toggle input:checked+i:after{transform:translate(16px)}.semester-toggle span{white-space:nowrap;font-size:9px}.planner-layout{grid-template-columns:minmax(0,1fr) 332px;align-items:start;gap:20px;margin-top:18px;display:grid}.course-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.course-card{background:#ffffffbd;border:1px solid #0000;border-radius:19px;flex-direction:column;min-width:0;min-height:325px;padding:22px;transition:transform .18s,box-shadow .18s,border-color .18s;display:flex}.course-card:hover{background:#fff;transform:translateY(-2px);box-shadow:0 12px 34px #2a483a12}.course-card.selected{background:#fff;border-color:#0d7c4d6b}.course-card.future{opacity:.76}.course-top{color:var(--muted);justify-content:space-between;align-items:center;font-size:8px;display:flex}.category-tag{color:var(--green-dark);background:var(--mint);border-radius:999px;padding:6px 8px;font-size:8px}.cat-1{color:#315797;background:#dfe9fb}.cat-2{color:#855224;background:#f5e8d6}.cat-3{color:#784f91;background:#ede2f4}.cat-4{color:#8a3f34;background:#f7e0dc}.course-card h3{letter-spacing:-.035em;margin:20px 0 7px;font-size:20px}.course-code{color:var(--muted);letter-spacing:.03em;margin:0;font:8px Arial}.course-synopsis{color:#5a6964;margin:18px 0 10px;font-size:10px;line-height:1.75}.fit-tag,.note-tag{width:fit-content;color:var(--green-dark);background:#edf6f0;border-radius:6px;margin:4px 0 0;padding:5px 7px;font-size:8px}.note-tag{color:#82502b;background:#f8eee1}.course-metrics{border-top:1px solid var(--line);gap:22px;margin-top:auto;padding:17px 0 13px;display:flex}.course-metrics span{color:var(--muted);font-size:8px}.course-metrics b{color:var(--ink);font-size:15px}.course-actions{grid-template-columns:.72fr 1.28fr;gap:7px;display:grid}.course-actions button{border:1px solid var(--line);cursor:pointer;background:#fff;border-radius:10px;padding:10px;font-size:9px}.course-actions .select-button{color:#fff;background:var(--ink);border-color:#0000}.selected .course-actions .select-button{background:var(--green)}.future .course-actions .select-button{color:var(--muted);background:#edf0ed}.empty-state{text-align:center;min-height:260px;color:var(--muted);border:1px dashed #becbc1;border-radius:20px;grid-column:1/-1;place-content:center;gap:8px;display:grid}.empty-state b{color:var(--ink);font-size:15px}.empty-state span{font-size:10px}.live-summary{color:#fff;background:var(--ink);border-radius:22px;padding:25px;position:sticky;top:98px;box-shadow:0 18px 45px #10231c29}.summary-head{border-bottom:1px solid #ffffff24;justify-content:space-between;align-items:flex-start;padding-bottom:19px;display:flex}.summary-head p{margin:0 0 5px;font-size:11px}.summary-head span{color:#ffffff80;font-size:8px}.summary-head>strong{font:800 33px Arial}.summary-head strong small{color:#ffffff80;font:9px Microsoft YaHei}.summary-status{gap:14px;margin:20px 0;display:grid}.summary-status>div>p{justify-content:space-between;margin:0;font-size:9px;display:flex}.summary-status p span{color:#ffffffb8}.summary-status p b{font-size:8px}.summary-status p b.ok{color:var(--lime)}.summary-status p b.short{color:#ff9b73}.summary-status .summary-bar{background:#ffffff21;height:4px;margin:8px 0 5px}.summary-status .summary-bar i{background:var(--lime)}.summary-status small{color:#ffffff61;font-size:7px}.projection{color:var(--ink);background:var(--lime);border-radius:14px;padding:15px}.projection span{font-size:8px;display:block}.projection b{margin:7px 0 5px;font:800 30px Arial;display:block}.projection b small{font-size:11px}.projection p{color:#10231ca3;margin:0;font-size:7px}.summary-actions{grid-template-columns:1fr 1fr 1fr;gap:6px;margin-top:15px;display:grid}.summary-actions button,.summary-actions a{text-align:center;color:#fff;cursor:pointer;background:0 0;border:1px solid #ffffff2e;border-radius:9px;padding:10px 5px;font-size:8px}.summary-actions a{border-color:var(--lime);color:var(--ink);background:var(--lime)}.timeline{background:var(--line);border-radius:20px;grid-template-columns:repeat(3,1fr);gap:1px;display:grid;overflow:hidden}.timeline>div{background:#f8faf7;min-height:180px;padding:28px}.timeline .timeline-start{color:#fff;background:var(--green)}.timeline span{color:var(--green);font-size:9px}.timeline-start span{color:var(--lime)}.timeline b{margin:45px 0 9px;font-size:15px;display:block}.timeline p{color:var(--muted);margin:0;font-size:9px}.timeline-start p{color:#ffffff9e}.checklist{grid-template-columns:repeat(3,1fr);gap:14px;margin-top:28px;display:grid}.checklist article{border-top:3px solid var(--green);background:#f6f8f5;padding:24px}.checklist article:first-child{border-color:var(--orange)}.checklist span{color:var(--muted);letter-spacing:.1em;font:8px Arial}.checklist b{margin:15px 0 11px;font-size:13px;display:block}.checklist p{color:var(--muted);margin:0;font-size:10px;line-height:1.75}footer{color:#fff;background:var(--green-dark);grid-template-columns:1fr 1fr auto;align-items:end;gap:25px;min-height:150px;padding:32px clamp(24px,6vw,92px);display:grid}footer>div{flex-direction:column;gap:6px;display:flex}footer b{font-size:13px}footer span,footer p,footer a{color:#ffffff8f;font-size:8px}footer p{max-width:430px;margin:0;line-height:1.6}footer a{color:var(--lime)}.modal-backdrop{z-index:80;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#07140fad;place-items:center;padding:22px;display:grid;position:fixed;inset:0}.course-modal{background:#fff;border-radius:26px;width:min(540px,100%);max-height:calc(100vh - 44px);padding:34px;animation:.2s modal-in;position:relative;overflow:auto;box-shadow:0 34px 100px #00000040}@keyframes modal-in{0%{opacity:0;transform:translateY(12px)scale(.98)}}.modal-close{background:var(--paper);cursor:pointer;border:0;border-radius:50%;width:34px;height:34px;font-size:22px;position:absolute;top:15px;right:18px}.course-modal h2{letter-spacing:-.05em;margin:20px 0 8px;font-size:32px}.modal-code{color:var(--muted);margin:0;font-size:9px}.modal-metrics{grid-template-columns:repeat(3,1fr);gap:8px;margin:25px 0;display:grid}.modal-metrics div{background:var(--paper);border-radius:14px;padding:15px}.modal-metrics b,.modal-metrics span{display:block}.modal-metrics b{font:800 23px Arial}.modal-metrics span{color:var(--muted);margin-top:3px;font-size:8px}.modal-section{margin-top:20px}.modal-section b{font-size:11px}.modal-section p{color:var(--muted);margin:7px 0 0;font-size:10px;line-height:1.75}.modal-note{color:#82502b;background:#f8eee1;border-radius:10px;margin-top:20px;padding:12px;font-size:9px}.modal-source{border-top:1px solid var(--line);color:#8a9691;margin:24px 0 0;padding-top:16px;font-size:8px;line-height:1.6}.modal-primary{color:#fff;background:var(--green);cursor:pointer;border:0;border-radius:12px;width:100%;margin-top:20px;padding:13px;font-size:10px;font-weight:800}.toast{z-index:100;color:#fff;background:var(--ink);max-width:calc(100vw - 40px);box-shadow:var(--shadow);border-radius:999px;padding:12px 18px;font-size:10px;position:fixed;bottom:28px;left:50%;transform:translate(-50%)}@media (width<=1100px){nav a:nth-of-type(2),nav a:nth-of-type(4){display:none}.progress-grid,.completed-list{grid-template-columns:repeat(3,1fr)}.filters{grid-template-columns:1fr auto}.category-filters{grid-area:2/1/auto/-1}.preset-tabs{grid-template-columns:repeat(3,1fr)}.custom-pill{grid-column:1/-1}}@media (width<=900px){nav a{display:none}.hero{grid-template-columns:1fr;padding-top:62px}.hero-card{max-width:560px}.recommendation-grid,.decision-strip,.planner-layout{grid-template-columns:1fr}.live-summary{position:static}.timeline,.checklist{grid-template-columns:1fr}.timeline>div{min-height:140px}.timeline b{margin-top:28px}footer{grid-template-columns:1fr;align-items:start}}@media (width<=620px){.topbar{height:68px;padding-inline:16px}.brand-mark{width:40px;height:40px}.status-dot{display:none}.hero,.overview,.recommendation,.catalog,.milestones{padding-inline:18px}.hero{min-height:auto;padding-block:54px}.hero h1{font-size:45px}.hero-actions,.hero-note{flex-direction:column;align-items:flex-start}.progress-grid,.completed-list,.rec-logic,.preset-tabs,.course-grid,.filters{grid-template-columns:1fr}.category-filters{grid-area:auto}.semester-toggle{justify-content:space-between}.custom-pill{grid-column:auto}.completed-block{padding:18px}.course-card{min-height:310px}.course-modal{padding:27px 22px}.course-modal h2{font-size:27px}}@media print{.topbar,.hero-actions,.filters,.preset-tabs,.course-actions,.summary-actions,footer,.toast{display:none!important}.hero,.overview,.recommendation,.catalog,.milestones{padding:28px}.hero{grid-template-columns:1fr 300px;min-height:auto}.hero h1{font-size:48px}.recommendation{color:var(--ink);background:#fff}.rec-lead{border:1px solid var(--line)}.recommendation-grid,.planner-layout{grid-template-columns:1fr}.rec-logic,.decision-strip{display:none}.course-grid{grid-template-columns:repeat(2,1fr)}.course-card:not(.selected){display:none}.live-summary{color:var(--ink);border:1px solid var(--line);background:#fff;position:static}.summary-head span,.summary-status p span,.summary-status small{color:var(--muted)}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition-duration:.01ms!important;animation:none!important}}
