:root{--bg:oklch(1 0 0);--surface:oklch(.965 .008 270);--ink:oklch(.22 .035 270);--muted:oklch(.46 .025 270);--primary:oklch(.40 .15 270);--primary-soft:oklch(.94 .025 270);--accent:oklch(.62 .13 175);--success-soft:oklch(.94 .035 175);--danger:oklch(.55 .18 25);--line:oklch(.89 .01 270);--shadow:0 4px 8px oklch(.22 .035 270/.08);--r:14px;--z-sticky:20;--z-modal:40;--z-toast:60}
*{box-sizing:border-box}html{font-family:Inter,"PingFang SC","Microsoft YaHei",system-ui,sans-serif;color:var(--ink);background:var(--surface)}body{margin:0;min-height:100vh}button,input,select{font:inherit}button{cursor:pointer}button:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid oklch(.72 .11 270/.45);outline-offset:2px}.topbar{height:68px;background:var(--bg);border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 max(20px,calc((100vw - 1180px)/2));position:sticky;top:0;z-index:var(--z-sticky)}.brand{display:flex;gap:10px;align-items:center;color:var(--ink);text-decoration:none}.brand-mark{display:grid;place-items:center;width:36px;height:36px;border-radius:10px;background:var(--primary);color:white;font-weight:800}.brand strong,.brand small{display:block}.brand strong{font-size:15px}.brand small{font-size:11px;color:var(--muted);margin-top:2px}.role-tabs{display:flex;background:var(--surface);padding:3px;border-radius:10px}.role-tab{border:0;background:transparent;color:var(--muted);padding:8px 14px;border-radius:8px;font-weight:650}.role-tab.active{background:var(--bg);color:var(--primary);box-shadow:0 2px 6px oklch(.22 .035 270/.08)}main{max-width:1180px;margin:auto;padding:34px 20px 56px}.app-view{display:none}.app-view.active{display:block}.page-intro{display:flex;justify-content:space-between;align-items:flex-end;margin-bottom:24px}.page-intro h1{font-size:28px;line-height:1.25;margin:0 0 7px;letter-spacing:-.02em;text-wrap:balance}.page-intro p{margin:0;color:var(--muted);font-size:14px}.dataset-note{display:flex;align-items:baseline;gap:7px;color:var(--muted)}.dataset-note strong{font-size:26px;color:var(--primary);font-variant-numeric:tabular-nums}.dataset-note span{font-size:12px}.workspace{display:grid;grid-template-columns:340px minmax(0,1fr);gap:20px;align-items:start}.controls-panel,.results-panel{background:var(--bg);border-radius:var(--r);box-shadow:var(--shadow)}.controls-panel{padding:22px;display:flex;flex-direction:column;gap:16px}.controls-panel h2,.results-head h2{font-size:17px;margin:0}.controls-panel label,.controls-panel legend{font-size:13px;font-weight:650}.controls-panel select,.controls-panel input:not([type=radio]):not([type=checkbox]){width:100%;height:44px;margin-top:7px;border:1px solid var(--line);border-radius:10px;padding:0 12px;background:var(--bg);color:var(--ink)}.controls-panel select:disabled{background:var(--surface);color:var(--muted)}.field-row{display:grid;grid-template-columns:1fr 1fr;gap:10px}.controls-panel fieldset{border:0;padding:0;margin:0}.segmented{display:grid;grid-template-columns:repeat(3,1fr);gap:4px;margin-top:7px;background:var(--surface);padding:4px;border-radius:10px}.segmented input{position:absolute;opacity:0}.segmented span{display:grid;place-items:center;min-height:36px;padding:4px;border-radius:7px;color:var(--muted);font-size:12px}.segmented input:checked+span{background:var(--bg);color:var(--primary);box-shadow:0 2px 5px oklch(.22 .035 270/.07)}.switch-line{display:flex;align-items:center;gap:10px;background:var(--success-soft);padding:12px;border-radius:10px}.switch-line input{width:18px;height:18px;accent-color:var(--accent)}.switch-line span{display:flex;flex-direction:column;gap:2px}.switch-line small{font-weight:400;color:var(--muted)}.primary-button,.primary-small,.secondary-button,.text-button{border:0;border-radius:9px;font-weight:700}.primary-button,.primary-small{background:var(--primary);color:white}.primary-button{min-height:46px}.primary-small,.secondary-button,.text-button{padding:9px 12px}.secondary-button{background:var(--primary-soft);color:var(--primary)}.text-button{background:transparent;color:var(--muted)}button:disabled{opacity:.45;cursor:not-allowed}.form-tip{font-size:12px;line-height:1.65;color:var(--muted);margin:0}.results-panel{min-height:610px;padding:22px}.results-head{display:flex;justify-content:space-between;gap:16px;align-items:flex-start;padding-bottom:16px;border-bottom:1px solid var(--line)}.results-head p{font-size:12px;color:var(--muted);margin:5px 0 0}.result-actions{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}.empty-state{text-align:center;padding:110px 20px}.empty-number{width:72px;height:72px;margin:0 auto 16px;display:grid;place-items:center;border-radius:50%;background:var(--primary-soft);color:var(--primary);font-size:28px;font-weight:800}.empty-state h3{font-size:18px;margin:0 0 8px}.empty-state p{max-width:350px;margin:auto;color:var(--muted);font-size:13px;line-height:1.7}.choice-list{list-style:none;padding:8px 0 0;margin:0}.choice-row{display:grid;grid-template-columns:36px minmax(130px,1fr) minmax(150px,1.15fr) 72px 62px;align-items:center;gap:8px;min-height:42px;border-bottom:1px solid var(--line);font-size:13px}.choice-row:last-child{border-bottom:0}.choice-index{font-variant-numeric:tabular-nums;color:var(--muted);font-weight:750}.choice-row.first .choice-index{color:var(--primary)}.choice-school,.choice-major{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.choice-school{font-weight:700}.choice-fee{font-variant-numeric:tabular-nums;color:var(--muted);font-size:12px}.change-button{border:0;background:transparent;color:var(--primary);font-weight:700;padding:8px 4px}.tag{display:inline-flex;align-items:center;font-size:10px;padding:2px 6px;border-radius:999px;background:var(--primary-soft);color:var(--primary);margin-left:5px}.teacher-empty{background:var(--bg);border-radius:var(--r);padding:80px 20px;text-align:center;box-shadow:var(--shadow)}.teacher-empty h2{font-size:18px}.teacher-empty p{color:var(--muted);font-size:13px}.plans-table{background:var(--bg);border-radius:var(--r);box-shadow:var(--shadow);overflow:hidden}.plan-row{display:grid;grid-template-columns:1fr 1.2fr 110px 130px;align-items:center;gap:16px;padding:16px 20px;border-bottom:1px solid var(--line)}.plan-row:last-child{border-bottom:0}.plan-row strong,.plan-row small{display:block}.plan-row small{color:var(--muted);margin-top:4px}.plan-actions{display:flex;gap:6px}.plan-actions button{border:0;background:var(--primary-soft);color:var(--primary);padding:8px;border-radius:8px}dialog{width:min(650px,calc(100% - 24px));border:0;border-radius:16px;padding:0;box-shadow:0 8px 32px oklch(.15 .03 270/.22)}dialog::backdrop{background:oklch(.15 .03 270/.45)}.dialog-shell{padding:20px}.dialog-head{display:flex;justify-content:space-between}.dialog-head h2{margin:0;font-size:19px}.dialog-head p{margin:5px 0;color:var(--muted);font-size:12px}.icon-button{width:36px;height:36px;border:0;border-radius:50%;background:var(--surface);font-size:24px;color:var(--muted)}.search-field{display:block;font-size:12px;font-weight:700;margin:16px 0 10px}.search-field input{display:block;width:100%;height:42px;border:1px solid var(--line);border-radius:9px;padding:0 12px;margin-top:6px}.candidate-list{max-height:52vh;overflow:auto}.candidate-option{display:grid;grid-template-columns:1fr 1fr 72px;gap:10px;width:100%;text-align:left;padding:11px 8px;border:0;border-bottom:1px solid var(--line);background:var(--bg);color:var(--ink)}.candidate-option:hover{background:var(--surface)}.candidate-option span:last-child{color:var(--muted);text-align:right}.toast{position:fixed;left:50%;bottom:24px;transform:translate(-50%,20px);background:var(--ink);color:white;padding:10px 16px;border-radius:9px;opacity:0;pointer-events:none;transition:.18s ease;z-index:var(--z-toast);font-size:13px}.toast.show{opacity:1;transform:translate(-50%,0)}.screenshot-sheet{display:none}
@media(max-width:800px){.topbar{height:60px;padding:0 12px}.brand small{display:none}.role-tab{padding:8px 11px}main{padding:22px 12px 36px}.page-intro{align-items:flex-start}.page-intro h1{font-size:23px}.dataset-note{display:none}.workspace{grid-template-columns:1fr}.controls-panel,.results-panel{padding:16px}.results-panel{min-height:500px}.results-head{flex-direction:column}.result-actions{width:100%;justify-content:stretch}.result-actions button{flex:1}.choice-row{grid-template-columns:28px minmax(0,1fr) 56px}.choice-major{grid-column:2;grid-row:2;color:var(--muted);font-size:12px;padding-bottom:8px}.choice-fee{grid-column:3;grid-row:1}.change-button{grid-column:3;grid-row:2;padding-bottom:8px}.choice-row{gap:2px 8px;min-height:52px}.field-row{grid-template-columns:1fr}.plan-row{grid-template-columns:1fr 1fr}.plan-actions{grid-column:1/-1}.candidate-option{grid-template-columns:1fr 68px}.candidate-option span:nth-child(2){grid-column:1}.candidate-option span:last-child{grid-column:2;grid-row:1}}
body.shot-mode{background:var(--bg);overflow:hidden}body.shot-mode>*:not(.screenshot-sheet){display:none!important}body.shot-mode .screenshot-sheet{display:flex;position:fixed;inset:0;background:var(--bg);padding:12px 14px 10px;flex-direction:column;z-index:100;color:var(--ink)}.shot-top{display:flex;justify-content:space-between;align-items:flex-start;border-bottom:2px solid var(--primary);padding-bottom:8px}.shot-top strong,.shot-top span{display:block}.shot-top strong{font-size:15px}.shot-top span{font-size:11px;color:var(--muted);margin-top:3px}.shot-top button{border:0;background:var(--surface);color:var(--primary);padding:6px 9px;border-radius:7px;font-size:11px}.shot-meta{display:flex;justify-content:space-between;font-size:10px;color:var(--muted);padding:6px 0}.screenshot-sheet ol{list-style:none;padding:0;margin:0;flex:1;display:grid;grid-template-rows:repeat(12,minmax(0,1fr));border-top:1px solid var(--line)}.shot-row{display:grid;grid-template-columns:24px minmax(0,1fr) minmax(0,1fr) 52px;align-items:center;gap:5px;border-bottom:1px solid var(--line);font-size:10.5px;line-height:1.15}.shot-row strong,.shot-row span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.shot-row strong{font-weight:750}.shot-row .num{color:var(--muted);font-variant-numeric:tabular-nums}.shot-row:first-child .num{color:var(--primary);font-weight:800}.shot-row .fee{text-align:right;color:var(--muted);font-size:9.5px}.screenshot-sheet footer{text-align:center;font-size:9px;color:var(--muted);padding-top:6px}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{scroll-behavior:auto!important;transition:none!important}}
.student-badge{font-size:12px;font-weight:700;color:var(--primary);background:var(--primary-soft);padding:8px 11px;border-radius:999px}
.shot-student-info{display:flex;gap:14px;margin-top:3px}.shot-student-info span{margin:0}.shot-student-info b{color:var(--ink);font-weight:750}
.auth-gate{min-height:100vh;display:grid;place-items:center;padding:20px;background:var(--surface)}.auth-gate[hidden]{display:none}.auth-box,.admin-login{width:min(390px,100%);background:var(--bg);padding:28px;border-radius:14px;box-shadow:var(--shadow)}.auth-box>.brand-mark{margin-bottom:18px}.auth-box h1,.admin-login h1{font-size:23px;margin:0 0 7px}.auth-box>p,.admin-login>p{font-size:13px;color:var(--muted);margin:0 0 20px}.auth-box label,.admin-login label,.add-student label{display:block;font-size:13px;font-weight:700;margin-bottom:14px}.auth-box input,.admin-login input,.add-student input,.admin-toolbar input{width:100%;height:44px;border:1px solid var(--line);border-radius:10px;padding:0 12px;margin-top:7px;color:var(--ink);background:var(--bg)}.auth-box .primary-button,.admin-login .primary-button{width:100%}.auth-error{min-height:20px;color:var(--danger)!important;font-size:12px!important;margin:10px 0 0!important}.locked>.topbar,.locked>main{display:none}.admin-main{max-width:920px}.admin-login{margin:50px auto}.add-student{display:grid;grid-template-columns:1fr 1fr 140px;gap:12px;align-items:end;background:var(--bg);padding:18px;border-radius:14px;box-shadow:var(--shadow)}.add-student label{margin:0}.add-student .primary-button{height:44px}.admin-toolbar{display:flex;justify-content:space-between;align-items:center;margin:20px 0 10px}.admin-toolbar input{max-width:320px;margin:0}.student-table{background:var(--bg);border-radius:14px;box-shadow:var(--shadow);overflow:hidden}.student-row{display:grid;grid-template-columns:1fr 190px 70px;gap:16px;align-items:center;padding:14px 18px;border-bottom:1px solid var(--line)}.student-row:last-child{border-bottom:0}.student-row strong,.student-row small{display:block}.student-row small,.student-row time{font-size:12px;color:var(--muted)}.delete-student{border:0;background:oklch(.95 .025 25);color:var(--danger);border-radius:8px;padding:8px}.admin-empty{text-align:center;padding:50px;color:var(--muted)}.shot-watermarks{position:absolute;inset:72px 4px 24px;display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(5,1fr);overflow:hidden;pointer-events:none;z-index:0}.shot-watermarks span{align-self:center;justify-self:center;white-space:nowrap;font-size:9px;font-weight:700;color:oklch(.4 .15 270/.09);transform:rotate(-24deg)}.screenshot-sheet>*:not(.shot-watermarks){position:relative;z-index:1}
@media(max-width:600px){.add-student{grid-template-columns:1fr}.student-row{grid-template-columns:1fr 76px}.student-row time{grid-column:1}.admin-toolbar{align-items:flex-start;gap:10px;flex-direction:column}.shot-watermarks{grid-template-columns:repeat(2,1fr)}}
@media print{body>*:not(.screenshot-sheet){display:none!important}.screenshot-sheet{display:flex!important;position:fixed;inset:0}}
