:root{--mist: #eef3f2;--surface: #f9fbfb;--ink: #10303f;--ink-soft: #4a6572;--line: #c9d6d9;--tide: #1f6f8b;--foam: #5fa89b;--shoal: #9dc3d1;--dune: #d6c7a1;--alert: #b4441c;--signal: #f2c14e;--font-display: "LXGW WenKai TC", "Noto Sans TC", serif;--font-body: "Noto Sans TC", system-ui, sans-serif;--font-mono: "IBM Plex Mono", ui-monospace, monospace;--radius: 6px;color-scheme:light}*,*:before,*:after{box-sizing:border-box}body{margin:0;background:var(--mist);color:var(--ink);font:400 15px/1.6 var(--font-body);-webkit-font-smoothing:antialiased}a{color:var(--tide)}h1,h2{font-family:var(--font-display);font-weight:700;margin:0}h2{font-size:1.15rem;margin-bottom:.6rem}:focus-visible{outline:2px solid var(--tide);outline-offset:2px}.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.muted{color:var(--ink-soft)}.small{font-size:.8rem}.code{font-family:var(--font-mono);font-size:.85em;letter-spacing:.01em}.masthead{background:var(--ink);color:var(--mist)}.masthead-inner{max-width:1320px;margin:0 auto;padding:1.1rem 1.25rem;display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:.5rem 2rem}.brand{font-size:1.6rem;letter-spacing:.06em}.brand-sub{display:inline-block;margin-left:.75rem;font:400 .85rem var(--font-body);letter-spacing:.1em;opacity:.75}.disclaimer-strip{margin:0;font-size:.9rem;padding:.15rem .6rem;border:1px solid rgba(238,243,242,.45);border-radius:var(--radius)}.layout{max-width:1320px;margin:0 auto;padding:1.25rem;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,480px);gap:1.25rem;align-items:start}.inputs{display:grid;grid-template-columns:minmax(0,1fr);gap:1rem;min-width:0}.results{position:sticky;top:1rem;max-height:calc(100vh - 2rem);overflow-y:auto;min-width:0}.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:1rem}.fatal{margin:1rem auto;max-width:1320px;padding:.75rem 1rem;border:1px solid var(--alert);border-radius:var(--radius);background:#fbeee8}.field{display:grid;gap:.25rem}.field label{font-size:.8rem;color:var(--ink-soft)}.field.grow{flex:1 1 14rem}.field.narrow{width:5.5rem}input,select{font:inherit;color:inherit;background:#fff;border:1px solid var(--line);border-radius:4px;padding:.4rem .55rem;min-width:0}.btn{font:500 .9rem var(--font-body);border:1px solid var(--ink);background:var(--ink);color:var(--mist);border-radius:4px;padding:.4rem .9rem;cursor:pointer;white-space:nowrap}.btn:disabled{background:transparent;color:var(--ink-soft);border-color:var(--line);cursor:default}.btn.small{padding:.2rem .6rem;font-size:.8rem}.btn.ghost{background:transparent;color:var(--ink-soft);border-color:transparent}.btn.ghost:hover{color:var(--alert)}.btn.primary{background:var(--tide);border-color:var(--tide)}.picker{display:flex;flex-wrap:wrap;gap:.75rem 1rem;align-items:end}.picker-note{flex-basis:100%;margin:0;font-size:.8rem;color:var(--ink-soft)}.tabs{display:flex;gap:.25rem;border-bottom:1px solid var(--line);margin:-.25rem 0 .9rem;overflow-x:auto}.tab{font:500 .95rem var(--font-body);background:none;border:0;border-bottom:3px solid transparent;padding:.45rem .8rem;color:var(--ink-soft);cursor:pointer;white-space:nowrap}.tab[aria-selected=true]{color:var(--ink);border-bottom-color:var(--tide)}.pending-note{margin:0;color:var(--ink-soft)}.search-input{width:100%;font-size:1.05rem;padding:.6rem .75rem}.hint{font-size:.8rem;color:var(--ink-soft);margin:.4rem 0 .6rem}.results-list{list-style:none;margin:0 0 .75rem;padding:0;max-height:22rem;overflow-y:auto;border-top:1px solid var(--line)}.result-row{display:grid;grid-template-columns:6.5rem minmax(0,1fr) auto;gap:.75rem;align-items:center;padding:.45rem .25rem;border-bottom:1px solid var(--line)}.result-name{display:grid}.result-meta{font-size:.78rem;color:var(--ink-soft)}.no-result{padding:.6rem .25rem;color:var(--ink-soft)}.custom summary{cursor:pointer;font-size:.9rem;color:var(--tide)}.custom-form{display:flex;flex-wrap:wrap;gap:.6rem;align-items:end;margin-top:.75rem}.form-error{flex-basis:100%;margin:0;color:var(--alert);font-size:.85rem}.records-head{display:flex;align-items:baseline;justify-content:space-between;gap:1rem}.count{font-size:.85rem;color:var(--ink-soft)}.pending-count{color:var(--alert)}.empty-records{margin:0;color:var(--ink-soft)}.table-wrap{overflow-x:auto}.record-table{width:100%;min-width:900px;border-collapse:collapse;font-size:.88rem}.record-table td.name-cell{min-width:15rem}.record-table th{text-align:left;font-weight:500;font-size:.75rem;color:var(--ink-soft);padding:.3rem .35rem;border-bottom:1px solid var(--line);white-space:nowrap}.record-table td{padding:.25rem .35rem;border-bottom:1px solid #e1e9eb;vertical-align:middle}.record-table .num{text-align:right}.record-table select{max-width:10rem;font-size:.85rem;padding:.25rem .35rem}.cell-input{width:100%;border-color:transparent;background:transparent;padding:.25rem .35rem}.cell-input:hover,.cell-input:focus{border-color:var(--line);background:#fff}.cell-input.code{width:7.5rem}.cell-input.num{width:3.5rem;text-align:right}.cell-input.sem{width:4.5rem;font-family:var(--font-mono)}.record-table tr.unconfirmed td{background:#fdf6e3}.origin{display:block;font-size:.7rem;color:var(--ink-soft);padding-left:.35rem;white-space:nowrap}.actions{white-space:nowrap;text-align:right}.empty-result{border:1px dashed var(--line);border-radius:var(--radius);padding:2rem 1.25rem;color:var(--ink-soft)}.empty-title{font:700 1.2rem var(--font-display);color:var(--ink);margin:0 0 .4rem}.result{display:grid;grid-template-columns:minmax(0,1fr);gap:1rem}.unverified{background:repeating-linear-gradient(-45deg,#fbe7ad 0,#fbe7ad 10px,#f8dc8d 10px,#f8dc8d 20px);border:1px solid #d9a92c;border-radius:var(--radius);padding:.75rem .9rem;font-size:.85rem}.unverified p{margin:0 0 .35rem}.unverified-title{font-weight:700;font-size:.95rem}.unverified details{background:#ffffffbf;border-radius:4px;padding:.35rem .6rem}.unverified summary{cursor:pointer;font-weight:500}.prov-head{display:grid;gap:.1rem;margin-top:.4rem!important}.prov-date{font-size:.75rem;color:var(--ink-soft)}.prov ul{margin:.25rem 0 .5rem;padding-left:1.1rem}.tally{padding:.25rem 0 0}.tally-label{margin:0;font-size:.82rem;color:var(--ink-soft)}.tally-figure{margin:.1rem 0;font-family:var(--font-mono);display:flex;align-items:baseline;gap:.35rem;line-height:1}.tally-figure .earned{font-size:3.6rem;font-weight:600;color:var(--ink)}.tally-figure .slash,.tally-figure .required{font-size:1.6rem;color:var(--ink-soft)}.tally-figure .unit{font:400 1rem var(--font-body);color:var(--ink-soft)}.tally-gap{margin:.2rem 0 0;font-size:.95rem}.tally-gap strong{color:var(--alert);font-family:var(--font-mono)}.in-progress{color:var(--ink-soft);font-size:.85rem}.grid-figure{margin:0;max-width:520px}.credit-grid{display:grid;grid-template-columns:repeat(16,1fr);gap:3px}.cell{aspect-ratio:1;border-radius:2px;background:var(--cell, transparent);border:1px solid transparent;animation:cell-in .26s ease-out both}.cell.empty{border-color:var(--line);background:repeating-linear-gradient(45deg,transparent 0 3px,rgba(180,68,28,.08) 3px 4px)}.cell[data-partial]{background:linear-gradient(to right,var(--cell) var(--fill),transparent var(--fill));border-color:var(--line)}.g-dept-required{--cell: var(--tide)}.g-general-education{--cell: var(--foam)}.g-dept-elective{--cell: var(--shoal)}.g-other{--cell: var(--dune)}@keyframes cell-in{0%{transform:scale(.6);opacity:0}}.legend{display:flex;flex-wrap:wrap;gap:.35rem .9rem;margin-top:.6rem;font-size:.8rem;font-family:var(--font-mono)}.legend-item{display:inline-flex;align-items:center;gap:.35rem;font-family:var(--font-body)}.swatch{width:.8rem;height:.8rem;border-radius:2px;background:var(--cell)}.swatch.empty{border:1px solid var(--line);background:transparent}.surplus{color:var(--tide)}.ledger-list{list-style:none;margin:0;padding:0;border-top:1px solid var(--line)}.ledger-row{border-bottom:1px solid var(--line)}.ledger-row summary{list-style:none;cursor:pointer;display:grid;grid-template-columns:minmax(0,1fr) auto 5.5rem;grid-template-rows:auto 4px;column-gap:.75rem;row-gap:.35rem;align-items:baseline;padding:.55rem .15rem .6rem 1.15rem;position:relative}.ledger-row summary::-webkit-details-marker{display:none}.ledger-row summary:before{content:"";position:absolute;left:0;top:.95rem;width:.6rem;height:.6rem;border-radius:2px;background:var(--cell)}.ledger-label{display:grid;font-size:.92rem}.ledger-nums{font-family:var(--font-mono);font-size:.95rem}.ledger-status{font-size:.8rem;text-align:right}.ledger-status.ok{color:var(--tide)}.ledger-status.gap{color:var(--alert);font-weight:500}.bar{grid-column:1 / -1;height:4px;background:#dde7e9;border-radius:2px;overflow:hidden}.bar-fill{display:block;width:100%;height:100%;background:var(--cell);transform-origin:left center;transition:transform .3s ease}.ledger-detail{padding:0 .25rem .75rem .75rem;font-size:.85rem}.constraints{list-style:none;padding:0;margin:0 0 .5rem}.constraints .ok{color:var(--tide)}.constraints .gap{color:var(--alert)}.note{margin:.35rem 0 0;color:var(--ink-soft);font-size:.8rem}.block{border-top:1px solid var(--line);padding-top:.75rem}.block.attention h2{color:var(--alert)}.notes summary{cursor:pointer;font:700 1rem var(--font-display)}.ok-line{margin:0;color:var(--tide)}.missing-list{list-style:none;margin:0;padding:0;display:grid;gap:.2rem}.missing-list li{display:flex;justify-content:space-between;gap:1rem;padding:.3rem .5rem;background:#fbeee8;border:1px solid #efc9b8;border-radius:3px;font-size:.9rem}.plain-list{margin:0;padding-left:1.1rem;font-size:.85rem}.plain-list li+li{margin-top:.2rem}.checks{list-style:none;margin:0;padding:0;display:grid;gap:.4rem;font-size:.88rem}.checks label{display:flex;gap:.5rem;align-items:flex-start;cursor:pointer}.checks input{margin-top:.3rem}.auto.ok{color:var(--tide)}.tag{display:inline-block;font-size:.72rem;padding:0 .35rem;border:1px solid var(--line);border-radius:3px;color:var(--ink-soft)}.disclaimer-final{margin:.5rem 0 0;padding:.6rem .75rem;border:1px solid var(--ink);border-radius:var(--radius);font-weight:500;text-align:center}.footer{max-width:1320px;margin:0 auto;padding:.5rem 1.25rem 2rem;font-size:.8rem;color:var(--ink-soft)}.footer p{margin:.2rem 0}@media (max-width: 1100px){.layout{grid-template-columns:minmax(0,1fr)}.results{position:static;max-height:none;overflow:visible}}@media (max-width: 640px){.record-table,.record-table td.name-cell{min-width:0}.layout{padding:.75rem 1rem}.brand-sub{display:block;margin:.15rem 0 0}.record-table thead{display:none}.record-table,.record-table tbody,.record-table tr,.record-table td{display:block;width:100%}.record-table tr{border:1px solid var(--line);border-radius:var(--radius);padding:.4rem;margin-bottom:.6rem;background:#fff}.record-table td,.record-table td.num{display:grid;grid-template-columns:5rem minmax(0,1fr);align-items:center;border:0;text-align:left}.record-table td.actions{display:flex;justify-content:flex-end;gap:.5rem}.record-table td:before{content:attr(data-label);font-size:.75rem;color:var(--ink-soft)}.record-table td.actions:before{content:""}.record-table select,.cell-input,.cell-input.code,.cell-input.num,.cell-input.sem{max-width:none;width:100%;text-align:left}.result-row{grid-template-columns:minmax(0,1fr) auto}.result-row .code{grid-column:1 / -1}.tally-figure .earned{font-size:3rem}}@media (prefers-reduced-motion: reduce){.cell{animation:none}.bar-fill{transition:none}}.upload-drop{display:grid;gap:.25rem;justify-items:start;padding:1.1rem 1rem;border:1px dashed var(--tide);border-radius:var(--radius);background:#fff;cursor:pointer}.upload-drop:focus-within{outline:2px solid var(--tide);outline-offset:2px}.upload-drop input{font-size:.85rem}.upload-title{font-weight:700}.raw-text summary{cursor:pointer;font-size:.85rem;color:var(--tide)}.raw-text pre{max-height:16rem;overflow:auto;font:.75rem/1.5 var(--font-mono);background:#fff;border:1px solid var(--line);padding:.5rem;white-space:pre-wrap}.form-ok{margin:.5rem 0 0;color:var(--tide);font-size:.9rem}.login-form{display:flex;flex-wrap:wrap;gap:.75rem;align-items:end}.login-form .form-error,.login-form .form-ok,.login-form .privacy{flex-basis:100%}.privacy summary{cursor:pointer;font-size:.85rem;color:var(--tide)}.privacy ul{margin:.4rem 0 0;padding-left:1.1rem;font-size:.85rem;color:var(--ink-soft)}.programs-picker h2{margin-bottom:.5rem}.chosen{list-style:none;margin:0 0 .75rem;padding:0;display:grid;gap:.35rem}.chosen li{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.chip{font-size:.72rem;padding:.05rem .45rem;border-radius:999px;background:var(--ink);color:var(--mist)}.form-error.inline{flex-basis:auto;font-size:.8rem}.program-result{border:1px solid var(--line);border-radius:var(--radius);padding:.75rem .9rem;background:var(--surface);display:grid;gap:.5rem}.program-head{display:flex;justify-content:space-between;align-items:baseline;gap:1rem}.program-head h2{margin:0}.program-status.ok{color:var(--tide)}.program-status.gap{color:var(--alert);font-weight:500}.program-figure{margin:0;font-family:var(--font-mono)}.program-figure .earned{font-size:1.8rem;font-weight:600}.program-bar{--cell: var(--ink)}.program-unverified{font-size:.8rem;background:#fbe7ad;border-radius:4px;padding:.35rem .6rem}.program-unverified summary{cursor:pointer}.program-unverified ul{padding-left:1.1rem}.missing-list.compact li{font-size:.85rem}.diag{flex-basis:100%}.diag code{display:block;font:.75rem/1.5 var(--font-mono);background:#fff;border:1px solid var(--line);padding:.4rem .5rem;word-break:break-all;-webkit-user-select:all;user-select:all}.dept-hint{border:1px solid var(--alert);background:#fbeee8;border-radius:var(--radius);padding:.7rem .9rem;font-size:.88rem}.dept-hint p{margin:0}.dept-hint-title{font-weight:700;color:var(--alert);margin-bottom:.25rem!important}
