:root{--bg:#060b15;--bg2:#0c1422;--card:#111c2e;--card2:#162035;--border:#1e3050;--accent:#29b6f6;--accent-dk:#0288d1;--accent-glow:#29b6f61f;--txt:#dde6f0;--txt2:#7e9ab5;--txt3:#445a72;--success:#4dd0e1;--warn:#ffb74d;--danger:#ef5350;--aplus-c:#ce93d8;--a-c:#29b6f6;--b-c:#4dd0a8;--c-c:#ff8a65;--r:12px;--r-sm:8px;--tr:.2s ease}*,:before,:after{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg);color:var(--txt);background-image:radial-gradient(at 20% 20%,#29b6f60a 0%,#0000 55%),radial-gradient(at 80% 80%,#29b6f60a 0%,#0000 55%);min-height:100vh;font-family:Noto Sans JP,Inter,sans-serif;overflow-x:hidden}.header{z-index:100;border-bottom:1px solid var(--border);background:linear-gradient(135deg,#08152a 0%,#0d1f3c 100%);justify-content:space-between;align-items:center;height:76px;padding:0 24px;display:flex;position:sticky;top:0;box-shadow:0 2px 20px #00000080}.header-left{align-items:baseline;gap:10px;display:flex}.logo{letter-spacing:-.5px;background:linear-gradient(120deg, #fff 0%, var(--accent) 100%);-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;font-size:22px;font-weight:700}.logo-sub{color:var(--txt3);letter-spacing:1px;font-size:11px}.header-center{flex:1;justify-content:center;display:flex}.gpa-display{border:1px solid var(--border);background:#ffffff0a;border-radius:50px;align-items:center;gap:14px;padding:8px 20px;display:flex}.gpa-block{flex-direction:column;align-items:center;gap:1px;display:flex}.gpa-label{color:var(--txt3);text-transform:uppercase;letter-spacing:.6px;font-size:9px}.gpa-value{color:#fff;letter-spacing:-.5px;font-family:Inter,monospace;font-size:18px;font-weight:700}.gpa-value.accent{color:var(--accent)}.gpa-value.theo{color:#a5d6a7}.gpa-divider{color:var(--txt3);font-size:18px}.gpa-gap-sub{text-align:center;min-height:14px;font-size:10px;font-weight:600}.gap-ok{color:var(--success)}.gap-bad{color:var(--danger)}.gap-neu{color:var(--txt3)}.header-right{gap:8px;display:flex}.main{max-width:800px;margin:0 auto;padding:24px 16px 120px}.year-tabs{background:var(--bg2);border:1px solid var(--border);border-radius:var(--r);gap:4px;margin-bottom:12px;padding:6px;display:flex}.year-tab{color:var(--txt2);border-radius:var(--r-sm);cursor:pointer;transition:all var(--tr);background:0 0;border:none;flex:1;padding:10px;font-family:inherit;font-size:14px;font-weight:500;position:relative;overflow:hidden}.year-tab.active{background:var(--accent-dk);color:#fff;box-shadow:0 2px 12px #0288d173}.year-tab:not(.active):hover{background:var(--accent-glow);color:var(--accent)}.sem-tabs{gap:8px;margin-bottom:20px;display:flex}.sem-tab{border:1px solid var(--border);color:var(--txt2);cursor:pointer;transition:all var(--tr);background:0 0;border-radius:50px;padding:8px 28px;font-family:inherit;font-size:13px;font-weight:500;position:relative;overflow:hidden}.sem-tab.active{border-color:var(--accent);color:var(--accent);background:var(--accent-glow)}.sem-tab:not(.active):hover{border-color:var(--txt2);color:var(--txt)}.summary-card{background:var(--border);border-radius:var(--r);gap:1px;margin-bottom:20px;display:flex;overflow:hidden}.summary-item{background:var(--card);flex-direction:column;flex:1;align-items:center;gap:4px;padding:16px 12px;display:flex}.summary-label{color:var(--txt3);text-transform:uppercase;letter-spacing:.5px;font-size:11px}.summary-value{color:var(--accent);font-family:Inter,monospace;font-size:22px;font-weight:700}.course-list{flex-direction:column;gap:10px;display:flex}.sort-bar{align-items:center;gap:8px;margin-bottom:14px;display:flex}.sort-label{color:var(--txt3);white-space:nowrap;font-size:12px}.sort-btn{border:1px solid var(--border);color:var(--txt2);cursor:pointer;transition:all var(--tr);background:0 0;border-radius:50px;padding:5px 14px;font-family:inherit;font-size:12px;position:relative;overflow:hidden}.sort-btn.active{border-color:var(--accent);color:var(--accent);background:var(--accent-glow)}.sort-btn:not(.active):hover{border-color:var(--txt2);color:var(--txt)}.cat-header{color:var(--txt2);letter-spacing:.5px;align-items:center;gap:8px;margin-top:8px;padding:4px 4px 6px;font-size:12px;font-weight:600;display:flex}.cat-header:first-child{margin-top:0}.cat-dot{border-radius:50%;flex-shrink:0;width:8px;height:8px}.course-card{--cat-color:var(--accent);--cat-bg:#29b6f60d}.course-card[data-cat=math]{--cat-color:#4fc3f7;--cat-bg:#4fc3f70f}.course-card[data-cat=science]{--cat-color:#81c784;--cat-bg:#81c7840f}.course-card[data-cat=language]{--cat-color:#f06292;--cat-bg:#f062920f}.course-card[data-cat=humanities]{--cat-color:#ffb74d;--cat-bg:#ffb74d0f}.course-card[data-cat=social]{--cat-color:#ce93d8;--cat-bg:#ce93d80f}.course-card[data-cat=pe]{--cat-color:#4db6ac;--cat-bg:#4db6ac0f}.course-card[data-cat=info]{--cat-color:#dce775;--cat-bg:#dce7750f}.course-card[data-cat=other]{--cat-color:#90a4ae;--cat-bg:#90a4ae0f}.course-card{background:linear-gradient(120deg, var(--cat-bg) 0%, var(--card) 55%);border:1px solid var(--border);border-radius:var(--r);cursor:pointer;transition:border-color var(--tr), transform var(--tr), box-shadow var(--tr);padding:16px 18px;position:relative;overflow:hidden}.course-card:before{content:"";background:var(--cat-color);opacity:.7;width:3px;transition:opacity var(--tr);border-radius:3px 0 0 3px;position:absolute;top:0;bottom:0;left:0}.course-card:hover{border-color:var(--cat-color);transform:translateY(-1px);box-shadow:0 4px 20px #00000026}.course-card:hover:before{opacity:1}.course-card-top{justify-content:space-between;align-items:flex-start;gap:8px;margin-bottom:12px;display:flex}.course-name{color:var(--txt);font-size:15px;font-weight:600}.badges{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:6px;display:flex}.badge{white-space:nowrap;border-radius:50px;padding:3px 9px;font-size:11px;font-weight:500}.badge-cat{color:var(--txt2);background:#ffffff0f}.badge-cred{color:var(--accent);background:#29b6f61f}.badge-grade{padding:3px 10px;font-size:12px;font-weight:700}.grade-aplus{color:var(--aplus-c);background:#ce93d82e}.grade-a{color:var(--a-c);background:#29b6f62e}.grade-b{color:var(--b-c);background:#4dd0a82e}.grade-c{color:var(--c-c);background:#ff8a652e}.grade-fail{color:var(--danger);background:#ef53501f}.grade-none{color:var(--txt3);background:#ffffff0d}.course-card-bottom{align-items:center;gap:12px;display:flex}.score-wrapper{align-items:center;gap:8px;display:flex}.score-label{color:var(--txt3);font-size:12px}.score-input{border:1px solid var(--border);width:68px;color:var(--txt);text-align:center;transition:border-color var(--tr), background var(--tr);background:#ffffff0a;border-radius:8px;padding:6px 10px;font-family:Inter,monospace;font-size:14px}.score-input:focus{border-color:var(--accent);background:var(--accent-glow);outline:none}.course-gap{align-items:center;gap:3px;margin-left:auto;font-size:12px;font-weight:600;display:flex}.empty-state{text-align:center;color:var(--txt3);padding:64px 20px;display:none}.empty-state .material-icons{opacity:.4;margin-bottom:12px;font-size:52px;display:block}.empty-state p{margin-bottom:4px;font-size:15px}.empty-sub{opacity:.7;font-size:13px}.fab{background:linear-gradient(135deg, var(--accent-dk) 0%, var(--accent) 100%);color:#fff;cursor:pointer;transition:transform var(--tr), box-shadow var(--tr);z-index:50;border:none;border-radius:50px;align-items:center;gap:8px;padding:14px 26px;font-family:inherit;font-size:15px;font-weight:600;display:flex;position:fixed;bottom:32px;right:32px;overflow:hidden;box-shadow:0 4px 24px #29b6f666}.fab:hover{transform:translateY(-2px);box-shadow:0 8px 32px #29b6f680}.fab:active{transform:translateY(0)}.btn-icon{width:40px;height:40px;color:var(--txt2);cursor:pointer;transition:all var(--tr);background:#ffffff0d;border:none;border-radius:50%;justify-content:center;align-items:center;display:flex;position:relative;overflow:hidden}.btn-icon:hover{background:var(--accent-glow);color:var(--accent)}.btn-primary{background:linear-gradient(135deg, var(--accent-dk), var(--accent));color:#fff;border-radius:var(--r-sm);cursor:pointer;transition:opacity var(--tr), transform var(--tr);border:none;padding:10px 24px;font-family:inherit;font-size:14px;font-weight:600;position:relative;overflow:hidden}.btn-primary:hover{opacity:.88;transform:translateY(-1px)}.btn-secondary{color:var(--txt2);border:1px solid var(--border);border-radius:var(--r-sm);cursor:pointer;transition:all var(--tr);background:0 0;padding:10px 24px;font-family:inherit;font-size:14px;font-weight:500;position:relative;overflow:hidden}.btn-secondary:hover{background:#ffffff0d}.btn-danger{color:var(--danger);border-radius:var(--r-sm);cursor:pointer;transition:all var(--tr);background:#ef53501a;border:1px solid #ef53504d;padding:10px 24px;font-family:inherit;font-size:14px;font-weight:600;position:relative;overflow:hidden}.btn-danger:hover{background:#ef535033}.ripple-wave{pointer-events:none;background:#ffffff47;border-radius:50%;animation:.65s linear forwards ripple-anim;position:absolute;transform:scale(0)}@keyframes ripple-anim{to{opacity:0;transform:scale(4)}}.modal-overlay{z-index:200;-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);background:#000000b8;justify-content:center;align-items:center;padding:16px;display:none;position:fixed;inset:0}.modal-overlay.open{display:flex}.modal{border:1px solid var(--border);background:#111827;border-radius:16px;width:100%;max-width:480px;animation:.22s modal-in;box-shadow:0 24px 64px #000000a6}@keyframes modal-in{0%{opacity:0;transform:scale(.94)translateY(12px)}to{opacity:1;transform:scale(1)translateY(0)}}.modal-header{justify-content:space-between;align-items:center;padding:20px 20px 0;display:flex}.modal-header h2{color:#fff;font-size:18px;font-weight:600}.modal-body{flex-direction:column;gap:18px;max-height:62vh;padding:20px;display:flex;overflow-y:auto}.modal-footer{border-top:1px solid var(--border);justify-content:flex-end;gap:8px;padding:16px 20px;display:flex}.form-group{flex-direction:column;gap:8px;display:flex}.form-label{color:var(--txt2);font-size:13px;font-weight:500}.required{color:var(--accent)}.form-input{border:1px solid var(--border);border-radius:var(--r-sm);color:var(--txt);transition:border-color var(--tr), background var(--tr);background:#ffffff0d;padding:10px 14px;font-family:inherit;font-size:14px}.form-input:focus{border-color:var(--accent);background:var(--accent-glow);outline:none}.form-input option{background:#1a2740}.form-hint{color:var(--txt3);min-height:18px;font-size:12px}.slider-group{align-items:center;gap:14px;display:flex}.slider{-webkit-appearance:none;background:var(--border);border-radius:4px;outline:none;flex:1;height:4px}.slider::-webkit-slider-thumb{-webkit-appearance:none;background:var(--accent);cursor:pointer;width:22px;height:22px;box-shadow:0 0 0 4px var(--accent-glow);transition:box-shadow var(--tr);border-radius:50%}.slider::-webkit-slider-thumb:hover{box-shadow:0 0 0 9px var(--accent-glow)}.slider-value{color:var(--accent);text-align:right;min-width:44px;font-family:Inter,monospace;font-size:18px;font-weight:700}.credit-buttons{gap:8px;display:flex}.credit-btn{border:1px solid var(--border);color:var(--txt2);border-radius:var(--r-sm);cursor:pointer;transition:all var(--tr);background:0 0;flex:1;padding:10px;font-family:inherit;font-size:14px;font-weight:500;position:relative;overflow:hidden}.credit-btn.active{border-color:var(--accent);background:var(--accent-glow);color:var(--accent)}.credit-btn:not(.active):hover{border-color:var(--txt2);color:var(--txt)}.gpa-buttons{gap:8px;display:flex}.gpa-btn{border:1px solid var(--border);color:var(--txt2);border-radius:var(--r-sm);cursor:pointer;transition:all var(--tr);background:0 0;flex-direction:column;flex:1;align-items:center;gap:3px;padding:10px 6px;font-family:inherit;display:flex;position:relative;overflow:hidden}.gpa-btn-val{font-family:Inter,monospace;font-size:15px;font-weight:700;line-height:1}.gpa-btn-grade{color:var(--txt3);transition:color var(--tr);font-size:11px}.gpa-btn.active{border-color:var(--accent);background:var(--accent-glow);color:var(--accent)}.gpa-btn.active .gpa-btn-grade{color:var(--accent);opacity:.7}.gpa-btn:not(.active):hover{border-color:var(--txt2);color:var(--txt)}.gpa-btn:not(.active):hover .gpa-btn-grade{color:var(--txt2)}.login-overlay{z-index:300;background:var(--bg);background-image:radial-gradient(at 30% 30%,#29b6f614 0%,#0000 60%),radial-gradient(at 70% 70%,#0288d10f 0%,#0000 60%);justify-content:center;align-items:center;display:none;position:fixed;inset:0}.login-overlay.visible{display:flex}.login-card{background:var(--card);border:1px solid var(--border);border-radius:24px;flex-direction:column;align-items:center;gap:24px;width:100%;max-width:400px;padding:48px 40px;animation:.3s modal-in;display:flex;box-shadow:0 24px 64px #0009}.login-logo-area{flex-direction:column;align-items:center;gap:6px;display:flex}.login-logo{background:linear-gradient(120deg, #fff 0%, var(--accent) 100%);-webkit-text-fill-color:transparent;letter-spacing:-1px;-webkit-background-clip:text;background-clip:text;font-size:36px;font-weight:700}.login-tagline{color:var(--txt3);letter-spacing:.5px;font-size:13px}.login-desc{color:var(--txt2);text-align:center;font-size:14px;line-height:1.7}.btn-google{color:#3c4043;cursor:pointer;transition:transform var(--tr), box-shadow var(--tr);background:#fff;border:none;border-radius:50px;justify-content:center;align-items:center;gap:12px;width:100%;padding:13px 28px;font-family:inherit;font-size:15px;font-weight:600;display:flex;position:relative;overflow:hidden;box-shadow:0 2px 12px #0000004d}.btn-google:hover{transform:translateY(-1px);box-shadow:0 6px 20px #0006}.btn-google:active{transform:translateY(0)}.login-error{color:var(--danger);text-align:center;min-height:18px;font-size:13px;line-height:1.5}.loading-overlay{z-index:250;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#060b15d9;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.spinner{border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;width:40px;height:40px;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.user-area{align-items:center;gap:8px;display:flex}.user-avatar{border:2px solid var(--accent);object-fit:cover;border-radius:50%;width:32px;height:32px}::-webkit-scrollbar{width:5px}::-webkit-scrollbar-track{background:var(--bg2)}::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--accent-dk)}@media (width<=600px){.header{height:72px;padding:0 14px}.gpa-display{gap:10px;padding:6px 12px}.gpa-value{font-size:15px}.gpa-gap-sub,.logo-sub{display:none}.fab{padding:12px 20px;font-size:14px;bottom:20px;right:20px}.main{padding:16px 12px 100px}}
