:root{--ink:#173d43;--muted:#526b6d;--sea:#126a76;--cream:#f6f5ed;--line:#dce4df;--gold:#ecc276;--required:#407b98;--school:#937335;--advanced:#627c48;--elective:#9b638a;--experimental:#277e78;--support:#97614e;font-family:"Noto Sans TC","PingFang TC","Microsoft JhengHei",sans-serif;color:var(--ink);background:var(--cream);font-size:16px;line-height:1.65}
*{box-sizing:border-box}body{margin:0}button,input,select{font:inherit}button,a,input,select{-webkit-tap-highlight-color:transparent}button{cursor:pointer;color:inherit}button:disabled{cursor:default;opacity:.6}a{color:var(--sea);text-underline-offset:4px}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid #ca8d34;outline-offset:4px}button{border:1px solid var(--line);background:#fffefa;border-radius:12px;padding:10px 16px;min-height:44px}button:hover{border-color:#6c9696;background:#f0f7f3}.primary{background:var(--ink);color:#fff;border-color:var(--ink)}.primary:hover{background:#24636a;color:white}.skip{position:absolute;left:12px;top:-100px;z-index:100;background:white;padding:12px}.skip:focus{top:12px}
.topbar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:18px max(24px,calc((100vw - 1280px)/2));background:#fffdf7;border-bottom:1px solid var(--line)}.brand{border:0;background:transparent;display:flex;align-items:center;gap:12px;text-align:left;font-size:22px;font-weight:800;letter-spacing:.08em;padding:0}.brand small{display:block;font-size:11px;font-weight:500;letter-spacing:.1em;color:var(--muted)}.brand-icon{color:#226e76;font-size:42px;line-height:1}.top-tags{display:flex;gap:16px;align-items:center;font-size:12px;color:var(--muted)}.outline-tag{border:1px solid #a7b8a9;border-radius:30px;padding:5px 12px}.breadcrumbs{max-width:1280px;margin:auto;padding:10px 24px;font-size:13px;display:flex;gap:6px;align-items:center;flex-wrap:wrap;min-height:50px}.breadcrumbs button{padding:2px 7px;min-height:32px;border:0;background:transparent;font-size:13px}.breadcrumbs [aria-current]{font-weight:700}.notice{margin:8px auto;padding:12px 24px;background:#fff1cc;max-width:1232px;border-radius:12px}
.scene{position:relative;max-width:1280px;margin:auto;height:500px;overflow:hidden;border-radius:24px;background:radial-gradient(ellipse at 70% 40%,#3d8f95,#164b59 70%);color:#fff;isolation:isolate;transition:height .7s}.scene.compact{height:290px}.scene.course-scene{height:220px}.scene canvas{display:block;width:100%;height:100%}#world{position:absolute;inset:0}.scene-grain{position:absolute;inset:0;background:linear-gradient(90deg,#123e4cd9,transparent 75%);pointer-events:none}.scene-copy{position:relative;padding:64px 48px;max-width:560px;pointer-events:none}.scene-copy button{pointer-events:auto}.scene-copy h1{font-size:clamp(34px,4vw,54px);line-height:1.25;letter-spacing:.03em;margin:12px 0 18px}.scene-copy p{color:#e0efeb;max-width:350px;font-size:15px}.eyebrow{font-size:11px;letter-spacing:.16em;font-weight:700;text-transform:uppercase}.scene-copy .primary{background:#f5d69b;color:#183e43;border:0;margin-top:12px}.scene.compact .scene-copy{padding:30px 40px;max-width:450px}.scene.compact .scene-copy h1{font-size:32px;margin:6px 0}.scene-caption{position:absolute;bottom:16px;left:40px;font-size:11px;color:#d0e7e0;letter-spacing:.08em}.motion{position:absolute;bottom:14px;right:18px;background:#163f4ac9;border:1px solid #7eaaa8;color:#fff;font-size:11px;min-height:32px;padding:4px 10px}.scene-fallback{position:absolute;right:24px;top:12px;max-width:240px;font-size:13px;background:#143c48c9;padding:14px}
main{max-width:1280px;margin:auto;padding:32px 24px 56px;min-height:240px}.section-title{display:flex;justify-content:space-between;align-items:flex-start;gap:20px;margin:0 0 24px}.section-title h2{margin:4px 0;font-size:28px;line-height:1.35}.section-title p{margin:6px 0;color:var(--muted);font-size:14px}.section-title .eyebrow{color:var(--sea)}.back{font-size:13px;background:transparent;white-space:nowrap}.intro-grid,.dock-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}.intro-card{padding:24px;border-top:2px solid #b6c9be}.intro-card .number{color:#4b7a77;font-size:13px}.intro-card h3{font-size:19px;margin:8px 0}.intro-card p{font-size:14px;color:var(--muted);margin:0}.dock{position:relative;overflow:hidden;text-align:left;border-radius:20px;padding:28px;min-height:185px;background:#fffdf5;border:1px solid #c5d5ca;transition:transform .2s,box-shadow .2s}.dock:hover,.landmark:hover{transform:translateY(-4px);box-shadow:0 12px 24px #244c4310}.dock:before{content:"";position:absolute;width:140px;height:140px;border:24px solid #86c3b435;border-radius:50%;right:-35px;bottom:-50px}.dock small{display:block;color:var(--muted);font-size:12px;letter-spacing:.1em}.dock strong{display:block;font-size:48px;line-height:1.3;margin:6px 0}.dock span{font-size:13px;color:var(--sea)}.landmark-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:14px}.landmark{text-align:left;position:relative;min-height:220px;padding:22px 18px;border-radius:18px;transition:transform .2s,box-shadow .2s;background:linear-gradient(150deg,#fffdf6,#e7efe6)}.landmark .serial{display:block;font-size:12px;color:var(--muted)}.landmark .symbol{display:flex;align-items:center;justify-content:center;height:78px;font-size:44px;color:var(--accent);margin:8px 0}.landmark strong{display:block;font-size:18px}.landmark small{display:block;color:var(--muted);margin-top:5px}.pending{background:#f0f0e8;border:1px dashed #a6afa2;color:#4f625a;border-radius:10px;padding:12px;font-size:13px}.placeholder-islands{display:flex;gap:16px;font-size:13px;color:var(--muted);margin:24px 0 4px;flex-wrap:wrap}.placeholder-islands span{border:1px dashed #b4c8be;padding:6px 12px;border-radius:20px}
.controls{border:1px solid var(--line);padding:22px;background:#fffdf8;border-radius:18px;margin-bottom:26px}.control-line{display:flex;flex-wrap:wrap;gap:10px;align-items:center}.control-line+.control-line{margin-top:14px}.control-label{font-size:13px;font-weight:700;margin-right:6px}.pill{border-radius:30px;padding:8px 16px;font-size:14px}.pill[aria-pressed=true]{background:var(--ink);color:#fff;border-color:var(--ink)}.help{font-size:12px;color:var(--muted);margin:10px 0 0}.filters{display:grid;grid-template-columns:2fr 1fr 1fr;gap:14px;margin-top:18px;padding-top:18px;border-top:1px solid var(--line)}.filters label{font-size:12px;color:var(--muted)}.filters input,.filters select{display:block;width:100%;min-width:0;margin-top:5px;border:1px solid #b7c9c2;border-radius:10px;padding:10px;color:var(--ink);background:white;min-height:44px}.result-note{font-size:13px;color:var(--muted);margin:0 0 18px}.year-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px;align-items:start}.year-grid.single{grid-template-columns:1fr}.grade-panel{min-width:0}.grade-head{padding:20px;background:#dceae0;border-radius:16px 16px 0 0}.grade-head h2{margin:0;font-size:25px}.grade-head .summary{font-size:12px;margin:8px 0 0}.grade-head .group-name{font-size:12px;color:var(--sea)}.category-block{margin-top:18px;background:#fffdf8;border:1px solid var(--line);border-radius:14px;overflow:hidden;border-top:4px solid var(--cat,#76938b)}.category-head{padding:14px 16px;background:#f8f8f0}.category-head h3{margin:0;font-size:16px;line-height:1.5}.category-head p{margin:6px 0 0;font-size:12px;color:var(--muted)}.required{--cat:var(--required)}.school{--cat:var(--school)}.advanced{--cat:var(--advanced)}.elective{--cat:var(--elective)}.experimental{--cat:var(--experimental)}.support{--cat:var(--support)}.course-list{padding:4px 14px}.course-card{display:block;text-align:left;border:0;border-bottom:1px solid #e4e9e0;border-radius:0;padding:13px 2px;width:100%;background:transparent}.course-card:last-child{border-bottom:0}.course-card:hover{background:#eff4ed}.course-card strong{display:block;font-size:15px;font-weight:650;line-height:1.6;overflow-wrap:anywhere}.course-card small{display:block;font-size:11px;color:var(--muted);margin-top:5px}.course-card .credit{font-size:12px;color:var(--sea);margin-top:5px}.single .category-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px;align-items:start}.source-line{font-size:12px;overflow-wrap:anywhere;margin:18px 2px}.source-line a{display:block}.empty{padding:22px;color:var(--muted);background:#ebefe6;border-radius:12px}.grade-panel>.pending{margin-top:16px}.category-block>.pending{margin:12px}
.compare-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}.compare-column{background:#fffdf8;border:1px solid var(--line);border-radius:16px;padding:18px;min-width:0}.compare-column h3{font-size:16px;margin:0 0 14px}.compare-item{border-bottom:1px solid var(--line);padding:10px 0;font-size:13px;overflow-wrap:anywhere}.compare-item small{display:block;color:var(--muted);font-size:11px}.badge{display:inline-block;padding:1px 6px;background:#ece5c6;color:#685422;font-size:10px;border-radius:4px;margin:3px 0}.badge.unique{background:#dce9df;color:#285b3d}.compare-item.common{color:#5d7475}.compare-toolbar{margin-bottom:18px}.consult{display:flex;justify-content:space-between;gap:16px;max-width:1232px;margin:0 auto 32px;padding:24px;background:#dce8dc;border-radius:18px;flex-wrap:wrap}.consult strong{font-size:16px}.consult span{font-size:14px}footer{background:#123f46;color:#d2e1d8;text-align:center;padding:30px 24px;font-size:12px}footer p{margin:8px 0}footer a{color:#dfeddf}.signature{color:#fff;font-size:14px}dialog{border:0;border-radius:22px;padding:28px;max-width:600px;width:calc(100% - 32px);max-height:85dvh;overflow:auto;background:#fffdf6;color:var(--ink);box-shadow:0 20px 80px #10353b55}dialog::backdrop{background:#10353b99;backdrop-filter:blur(4px)}dialog h2{font-size:24px;margin:0 0 16px}dialog p{font-size:14px;white-space:pre-line;overflow-wrap:anywhere}dialog .primary{width:100%;margin-top:16px}dialog dt{font-size:12px;color:var(--muted);margin-top:10px}dialog dd{margin:0;font-size:14px;overflow-wrap:anywhere}
@media(min-width:1000px){.single .course-list{max-height:none}.single .grade-head{border-radius:16px}.scene:not(.compact) #world{left:22%}}
@media(max-width:1000px){.top-tags .outline-tag{display:none}.landmark-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.year-grid{grid-template-columns:1fr}.category-grid,.single .category-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;align-items:start}.compare-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.scene-copy{padding:52px 30px;max-width:420px}.scene-copy h1{font-size:40px}.scene-caption{left:30px}.consult{margin-left:24px;margin-right:24px}.scene{border-radius:0}}
@media(max-width:600px){.topbar{padding:14px 18px;gap:8px;align-items:flex-start}.brand{font-size:18px;gap:8px}.brand small{font-size:9px;letter-spacing:.02em}.brand-icon{font-size:34px}.top-tags{font-size:10px;max-width:85px;text-align:right}.breadcrumbs{padding:8px 14px;font-size:11px;gap:0}.breadcrumbs button{font-size:11px;padding:2px 4px}.scene{height:590px}.scene #world{top:165px;bottom:15px}.scene-grain{background:linear-gradient(180deg,#123e4cdd,transparent 60%)}.scene-copy{padding:28px 22px;max-width:none}.scene-copy h1{font-size:34px;margin:8px 0}.scene-copy p{max-width:320px;font-size:13px;margin:8px 0}.scene-copy .primary{margin-top:6px}.scene-caption{left:22px;bottom:18px;font-size:9px;max-width:220px}.motion{right:14px;bottom:12px;font-size:10px}.scene.compact{height:390px}.scene.compact .scene-copy{padding:22px}.scene.compact .scene-copy h1{font-size:28px}.scene.compact #world{top:105px;bottom:15px}.scene.course-scene{height:290px}.scene.course-scene #world{top:70px}.scene.course-scene .scene-copy p{display:none}main{padding:26px 18px 36px}.section-title{gap:10px;margin-bottom:18px;flex-wrap:wrap}.section-title h2{font-size:24px}.section-title p{font-size:13px}.back{font-size:12px;padding:8px 12px}.intro-grid,.dock-grid{grid-template-columns:1fr;gap:12px}.intro-card{padding:16px 8px}.dock{min-height:120px;padding:18px 22px}.dock strong{font-size:34px;margin:2px 0}.dock small{font-size:11px}.dock span{position:absolute;right:22px;bottom:22px}.landmark-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.landmark{padding:16px 12px;min-height:185px}.landmark .symbol{height:58px;font-size:36px}.landmark strong{font-size:16px}.landmark small{font-size:12px}.controls{padding:16px;margin-bottom:20px}.control-label{width:100%}.pill{padding:8px 12px;font-size:12px}.control-line{gap:8px}.filters{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.filters label:first-child{grid-column:1/-1}.filters input,.filters select{font-size:14px}.category-grid,.single .category-grid{display:block}.grade-head{padding:18px}.year-grid{gap:28px}.compare-grid{grid-template-columns:1fr}.compare-column{padding:18px}.consult{margin:0 18px 24px;padding:20px}.consult strong{font-size:14px}.consult span{font-size:12px}footer{padding:24px 18px}.signature{font-size:12px}dialog{padding:22px}.notice{margin:8px 14px;font-size:13px}.scene-fallback{top:auto;bottom:45px;left:20px;right:20px;max-width:none}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}
@media print{.scene,.controls,.topbar,.breadcrumbs,.consult,.back{display:none}main{padding:0}.year-grid,.category-grid,.single .category-grid{display:block}.category-block{break-inside:avoid}footer{color:#000;background:white}.course-card{color:#000}.source-line a{color:#000}}
