@font-face{font-family:Manrope Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/manrope-cyrillic-ext-wght-normal-Ch-RFC-a.woff2) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Manrope Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/manrope-cyrillic-wght-normal-C1zWlyYG.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Manrope Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/manrope-greek-wght-normal--KUh6X2k.woff2) format("woff2-variations");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Manrope Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/manrope-vietnamese-wght-normal-CvPE_C53.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Manrope Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/manrope-latin-ext-wght-normal-D62tbE3i.woff2) format("woff2-variations");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Manrope Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/manrope-latin-wght-normal-DWlqe-xm.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--bg: #f3f5fa;--surface: #ffffff;--surface-2: #f6f7fb;--line: rgba(20, 32, 70, .08);--text: #0f1a33;--muted: #5b6683;--faint: #8a93ab;--primary: #1f45c9;--primary-soft: #e9eeff;--primary-ink: #1a3aa8;--hero-1: #2350e0;--hero-2: #14244f;--gold: #f2b33d;--ok: #12996a;--ok-soft: #e2f5ec;--bad: #dc3d43;--bad-soft: #fdeced;--bad-line: #f5c2c4;--warn: #c7731c;--warn-soft: #fdf1e1;--warn-line: #f3d2a8;--gold-soft: #fff3d9;--gold-ink: #a86a00;--wash: rgba(35, 80, 224, .08);--nav-bg: rgba(255, 255, 255, .86);--radius: 20px;--shadow: 0 1px 2px rgba(16, 24, 64, .04), 0 8px 24px rgba(16, 24, 64, .06);--nav-shadow: 0 10px 30px rgba(16, 24, 64, .14);--nav-h: 66px;--font: "Manrope Variable", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif}[data-theme=dark]{color-scheme:dark;--bg: #090d1a;--surface: #121829;--surface-2: #1a2236;--line: rgba(255, 255, 255, .07);--gold-soft: rgba(245, 194, 91, .14);--gold-ink: #f5c25b;--wash: rgba(80, 110, 255, .14);--nav-bg: rgba(18, 24, 41, .86);--nav-shadow: 0 10px 30px rgba(0, 0, 0, .45);--text: #eef1f8;--muted: #a0a9c2;--faint: #6f7894;--primary: #6b8cff;--primary-soft: rgba(107, 140, 255, .14);--primary-ink: #a9bcff;--hero-1: #1d3a9e;--hero-2: #0f1838;--ok: #34c58f;--ok-soft: rgba(52, 197, 143, .13);--bad: #ff6b70;--bad-soft: rgba(255, 107, 112, .13);--bad-line: rgba(255, 107, 112, .35);--warn: #f0a24d;--warn-soft: rgba(240, 162, 77, .13);--warn-line: rgba(240, 162, 77, .35);--shadow: none}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html.theme-anim *,html.theme-anim *:before,html.theme-anim *:after{transition:background-color .3s ease,border-color .3s ease,color .3s ease!important}html,body{margin:0;background:var(--bg);background-image:radial-gradient(120% 50% at 50% 0%,var(--wash) 0%,transparent 60%);background-attachment:fixed;min-height:100%;color:var(--text);font-family:var(--font);font-size:15px;line-height:1.45;-webkit-font-smoothing:antialiased}h1,h2,h3,p{margin:0}h1{font-size:20px;font-weight:750;letter-spacing:-.01em}h2{font-size:18px;font-weight:750;margin-bottom:6px}h3{font-size:15px;font-weight:700}button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer;text-align:inherit}button:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.app{max-width:560px;margin:0 auto;min-height:100vh}.content{padding:12px 12px calc(var(--nav-h) + 32px + env(safe-area-inset-bottom));animation:fade .22s ease-out}@keyframes fade{0%{opacity:0;transform:translateY(6px)}}.stack{display:flex;flex-direction:column;gap:10px}.stack>*{animation:rise .5s cubic-bezier(.2,.8,.2,1) both}.stack>*:nth-child(2){animation-delay:.05s}.stack>*:nth-child(3){animation-delay:.1s}.stack>*:nth-child(4){animation-delay:.15s}.stack>*:nth-child(5){animation-delay:.2s}.stack>*:nth-child(6){animation-delay:.25s}.stack>*:nth-child(n+7){animation-delay:.3s}@keyframes rise{0%{opacity:0;transform:translateY(12px)}}.grid2{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:10px}.grid3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.grid3.tight{margin-top:10px;text-align:center}.row-between{display:flex;justify-content:space-between;align-items:center;gap:8px}.muted{color:var(--muted)}.small{font-size:13px}.strong{font-weight:700}.right{text-align:right}.caption{margin:2px 4px 0}.section-title{font-size:13px;font-weight:700;color:var(--muted);margin:6px 4px 0}.tone-ok{color:var(--ok)}.tone-bad{color:var(--bad)}.tone-warn{color:var(--warn)}.tone-accent{color:var(--primary)}.with-icon{display:inline-flex;align-items:center;gap:10px}.footnote{display:flex;align-items:center;justify-content:center;gap:6px;font-size:12px;color:var(--faint);margin-top:4px}.hero{position:relative;overflow:hidden;color:#fff;border-radius:24px;padding:16px;background:radial-gradient(70% 90% at 0% 0%,rgba(90,130,255,.55) 0%,transparent 60%),radial-gradient(55% 70% at 100% 100%,rgba(242,179,61,.32) 0%,transparent 60%),linear-gradient(135deg,var(--hero-1) 0%,var(--hero-2) 100%);box-shadow:0 12px 32px #14287847}[data-theme=dark] .hero{box-shadow:0 12px 32px #0006}.hero:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background-image:linear-gradient(rgba(255,255,255,.07) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.07) 1px,transparent 1px);background-size:20px 20px;-webkit-mask-image:linear-gradient(120deg,transparent 10%,#000 70%);mask-image:linear-gradient(120deg,transparent 10%,#000 70%);pointer-events:none}.hero:after{content:"";position:absolute;right:-18px;bottom:-26px;width:130px;height:130px;opacity:.12;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 9 12 5 2 9l10 4 10-4v6M6 10.6V16a6 3 0 0 0 12 0v-5.4'/%3E%3C/svg%3E") no-repeat center / contain;pointer-events:none}.hero>*{position:relative;z-index:1}.hero-row{display:flex;align-items:center;gap:12px}.hero-text{flex:1;min-width:0}.hero-text h1{font-size:17px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.hero-text p,.hero-center p{color:#ffffffc7;font-size:13px}.hero-faculty{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.14);font-size:12.5px;color:#ffffffd1}.hero-compact{padding:14px 16px}.hero-compact:after{width:90px;height:90px;right:-10px;bottom:-22px}.hero-center{display:flex;flex-direction:column;align-items:center;text-align:center;gap:4px;padding:22px 16px 18px}.avatar{flex:none;width:46px;height:46px;border-radius:50%;display:grid;place-items:center;font-weight:750;font-size:15px;color:#fff;background:#ffffff29;box-shadow:0 0 0 2px var(--gold)}.avatar-lg{width:64px;height:64px;font-size:20px;margin-bottom:6px}.role-chip{margin-top:6px;font-size:12px;font-weight:700;padding:4px 12px;border-radius:999px;color:#3a2a00;background:var(--gold)}.icon-btn{position:relative;width:40px;height:40px;border-radius:12px;display:grid;place-items:center;background:#ffffff1f;color:#fff}.icon-btn .dot{position:absolute;top:8px;right:9px;width:8px;height:8px;border-radius:50%;background:var(--gold);box-shadow:0 0 0 2px var(--hero-1)}.card{display:block;width:100%;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px;box-shadow:var(--shadow)}.card-btn{transition:transform .12s ease}.card-btn:active{transform:scale(.985)}.metric{position:relative;display:flex;flex-direction:column;gap:2px;min-height:86px}.metric .chip-icon{position:absolute;top:10px;right:10px}.chip-icon{flex:none;width:30px;height:30px;border-radius:10px;display:inline-grid;place-items:center}.ci-accent{background:var(--primary-soft);color:var(--primary)}.ci-ok{background:var(--ok-soft);color:var(--ok)}.ci-bad{background:var(--bad-soft);color:var(--bad)}.ci-warn{background:var(--warn-soft);color:var(--warn)}.ci-gold{background:var(--gold-soft);color:var(--gold-ink)}.hero-label{display:inline-block;font-size:11.5px;font-weight:700;color:var(--gold);margin-bottom:1px}.hero-actions{display:flex;gap:6px}.theme-row{flex-wrap:wrap;justify-content:space-between}.mini-seg{display:flex;gap:2px;padding:3px;border-radius:12px;background:var(--surface-2)}.mini-seg button{display:inline-flex;align-items:center;gap:4px;padding:5px 9px;border-radius:9px;font-size:12.5px;font-weight:650;color:var(--muted)}.mini-seg button.on{background:var(--surface);color:var(--primary);box-shadow:0 1px 3px #1018401f}.metric-label{font-size:12.5px;color:var(--muted);padding-right:34px;min-height:32px}.metric-value{font-size:26px;font-weight:800;letter-spacing:-.02em;line-height:1.15}.metric-value small{font-size:13px;font-weight:600}.metric-sub{font-size:13px}.metric-sub.strong{font-size:15px;margin-top:2px}.alert{display:flex;align-items:center;gap:10px;width:100%;padding:11px 14px;border-radius:var(--radius);font-size:13.5px;font-weight:600;color:var(--bad);background:var(--bad-soft);border:1px solid var(--bad-line)}.alert svg{flex:none}.paras{display:flex;gap:6px;margin-top:10px}.para{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:4px;padding:7px 0;border-radius:10px;font-size:13px;font-weight:650}.para-present{background:var(--ok-soft);color:var(--ok)}.para-unexcused{background:var(--bad-soft);color:var(--bad)}.para-excused{background:var(--warn-soft);color:var(--warn)}.para-upcoming{background:var(--surface-2);color:var(--faint)}.progress{height:8px;border-radius:99px;background:var(--surface-2);margin:10px 0 8px;overflow:hidden}.progress>div{height:100%;border-radius:99px;background:linear-gradient(90deg,var(--ok),#3fd39b);transform-origin:left;animation:grow 1s cubic-bezier(.2,.8,.2,1) .2s both}@keyframes grow{0%{transform:scaleX(0)}}.next{display:flex;align-items:center;gap:12px}.next-icon{flex:none;width:42px;height:42px;border-radius:12px;display:grid;place-items:center;color:var(--primary);background:var(--primary-soft)}.page-head{display:flex;flex-direction:column;gap:10px;padding:4px 2px 2px}.seg{display:flex;gap:4px;padding:4px;border-radius:14px;background:var(--surface);border:1px solid var(--line)}.seg button{flex:1;padding:8px 0;border-radius:10px;text-align:center;font-size:13.5px;font-weight:650;color:var(--muted);transition:background .15s,color .15s}.seg button.on{color:#fff;background:var(--primary)}.chips{display:flex;gap:6px}.chip{padding:6px 14px;border-radius:999px;font-size:13px;font-weight:600;color:var(--muted);border:1px solid var(--line);background:var(--surface)}.chip.on{color:var(--primary-ink);background:var(--primary-soft);border-color:transparent}.stat{display:flex;flex-direction:column;align-items:center;padding:12px 6px;border-radius:var(--radius);background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow)}.stat-value{font-size:24px;font-weight:800;line-height:1.1}.stat-label{font-size:12px;color:var(--muted);text-align:center}.list-card{padding:0;overflow:hidden}.list{list-style:none;padding:0;margin:8px 0 0}.list-row{display:flex;align-items:center;gap:10px;width:100%;padding:11px 14px;border-bottom:1px solid var(--line)}.list-row:last-child{border-bottom:0}.list-row.between{justify-content:space-between}.list .list-row{padding:11px 2px}.status-dot{flex:none;width:30px;height:30px;border-radius:50%;display:grid;place-items:center}.s-present{background:var(--ok-soft);color:var(--ok)}.s-unexcused{background:var(--bad-soft);color:var(--bad)}.s-excused{background:var(--warn-soft);color:var(--warn)}.s-upcoming{background:var(--surface-2);color:var(--faint)}.danger-ring{border-color:var(--bad-line)}.gpa-card{display:flex;align-items:center;justify-content:space-between}.gpa-value{font-size:28px;font-weight:800;letter-spacing:-.02em}.gpa-value small{font-size:13px;font-weight:600;color:var(--muted)}.badge{display:inline-block;font-size:12px;font-weight:700;padding:4px 10px;border-radius:999px}.badge-ok{background:var(--ok-soft);color:var(--ok)}.badge-warn{background:var(--warn-soft);color:var(--warn)}.badge-bad{background:var(--bad-soft);color:var(--bad)}.badge-accent{background:var(--primary-soft);color:var(--primary-ink);margin-top:6px}.warn-box,.ok-box{border-radius:var(--radius);padding:11px 14px}.warn-box{background:var(--warn-soft);border:1px solid var(--warn-line);color:var(--warn)}.warn-box .strong{display:flex;align-items:center;gap:6px;margin-bottom:2px}.ok-box{display:flex;align-items:center;gap:8px;font-weight:650;background:var(--ok-soft);color:var(--ok)}.link-btn{display:flex;align-items:center;gap:4px;font-size:13.5px;font-weight:650;color:var(--primary);margin:6px 4px 0}.link-btn .rot{transform:rotate(90deg)}.days{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:6px}.day{display:flex;flex-direction:column;align-items:center;padding:8px 0;border-radius:14px;background:var(--surface);border:1px solid var(--line);font-size:12px;color:var(--muted)}.day strong{font-size:16px;color:var(--text)}.day.today{border-color:var(--primary)}.day.on{background:var(--primary);border-color:var(--primary);color:#ffffffd9}.day.on strong{color:#fff}.lesson{display:flex;gap:12px}.lesson-time{flex:none;width:58px;display:flex;flex-direction:column;align-items:center;font-size:12px;color:var(--muted);padding-right:10px;border-right:1px solid var(--line)}.lesson-time strong{font-size:13px;color:var(--text);margin-bottom:2px}.lesson-body{min-width:0}.lesson-next{border:1.5px solid var(--primary)}.lesson-next .lesson-time strong{color:var(--primary)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:11px 18px;border-radius:14px;font-weight:700;background:var(--surface-2);border:1px solid var(--line)}.btn:disabled{opacity:.6}.btn-block{width:100%;margin-top:14px}.btn-danger{color:#fff;background:var(--bad);border-color:var(--bad)}.switch{position:relative;flex:none;width:44px;height:26px;border-radius:99px;background:var(--faint);transition:background .2s}.switch:after{content:"";position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:#fff;transition:transform .2s}.switch.on{background:var(--ok)}.switch.on:after{transform:translate(18px)}.total-row{margin-top:6px;padding-top:12px;border-top:1px solid var(--line)}.nav{position:fixed;left:50%;bottom:calc(10px + env(safe-area-inset-bottom));transform:translate(-50%);width:calc(100% - 24px);max-width:536px;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));padding:7px 6px;border-radius:24px;background:var(--nav-bg);backdrop-filter:blur(18px) saturate(1.6);-webkit-backdrop-filter:blur(18px) saturate(1.6);border:1px solid var(--line);box-shadow:var(--nav-shadow);z-index:10}.nav:before{content:"";position:absolute;top:7px;bottom:7px;left:6px;width:calc((100% - 12px)/4);border-radius:18px;background:var(--primary-soft);transform:translate(calc(var(--i, 0) * 100%));transition:transform .35s cubic-bezier(.3,1.3,.5,1)}.nav button{position:relative;z-index:1;padding:4px 0;display:flex;flex-direction:column;align-items:center;gap:2px;font-size:11.5px;font-weight:650;color:var(--faint)}.nav-icon{display:grid;place-items:center;width:52px;height:30px;border-radius:99px;transition:background .2s}.nav button.on{color:var(--primary)}.nav button.on .nav-icon{transform:translateY(-1px) scale(1.06)}.nav-icon{transition:transform .25s ease}.sheet-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;display:flex;align-items:flex-end;justify-content:center;background:#080c1c73;animation:fadein .18s ease-out}.sheet{width:100%;max-width:560px;max-height:85vh;overflow-y:auto;padding:10px 18px calc(18px + env(safe-area-inset-bottom));border-radius:24px 24px 0 0;background:var(--surface);animation:up .24s cubic-bezier(.2,.9,.3,1)}.sheet-grip{width:40px;height:4px;border-radius:9px;background:var(--line);margin:0 auto 12px}.sheet-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:16px}@keyframes fadein{0%{opacity:0}}@keyframes up{0%{transform:translateY(100%)}}.link-page{max-width:560px;margin:0 auto;min-height:100vh;padding:18px 14px calc(24px + env(safe-area-inset-bottom));display:flex;flex-direction:column;gap:14px}.link-hero{position:relative;overflow:hidden;display:flex;align-items:center;gap:12px;padding:14px 16px;border-radius:22px;color:#fff;background:radial-gradient(70% 90% at 0% 0%,rgba(90,130,255,.55) 0%,transparent 60%),radial-gradient(55% 70% at 100% 100%,rgba(242,179,61,.32) 0%,transparent 60%),linear-gradient(135deg,var(--hero-1) 0%,var(--hero-2) 100%);box-shadow:0 12px 32px #14287847;animation:rise .5s cubic-bezier(.2,.8,.2,1) both}.link-badge{flex:none;width:44px;height:44px;border-radius:14px;display:grid;place-items:center;background:#ffffff29;box-shadow:inset 0 0 0 1px #ffffff40}.link-hello{font-size:15px;font-weight:700}.link-sub{font-size:12.5px;color:#ffffffc7}.link-card{display:flex;flex-direction:column;gap:12px;padding:20px 18px;border-radius:24px;background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow);animation:rise .5s cubic-bezier(.2,.8,.2,1) .08s both}.link-card h1{font-size:19px;line-height:1.3}.link-form{display:flex;flex-direction:column;gap:10px;margin-top:4px}.field{display:flex;align-items:center;gap:10px;padding:0 14px;height:54px;border-radius:16px;color:var(--faint);background:var(--surface-2);border:1.5px solid transparent;transition:border-color .15s,box-shadow .15s}.field:focus-within{color:var(--primary);border-color:var(--primary);box-shadow:0 0 0 4px var(--primary-soft)}.field-error,.field-error:focus-within{color:var(--bad);border-color:var(--bad);box-shadow:0 0 0 4px var(--bad-soft)}.field input{flex:1;min-width:0;height:100%;border:0;outline:0;background:none;font:inherit;font-size:18px;font-weight:700;letter-spacing:.06em;color:var(--text)}.field input::placeholder{font-weight:500;letter-spacing:0;color:var(--faint)}.field-msg{font-size:13px;font-weight:600;color:var(--bad)}.btn-primary{color:#fff;border-color:transparent;background:linear-gradient(135deg,#3a64f0,var(--primary));box-shadow:0 8px 20px -8px #1f45c999}.btn-primary:active{transform:scale(.985)}.spinner{width:18px;height:18px;border-radius:50%;border:2.5px solid rgba(255,255,255,.35);border-top-color:#fff;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.hint{display:flex;gap:10px;padding:12px;border-radius:14px;font-size:13px;color:var(--muted);background:var(--surface-2)}.hint svg{flex:none;color:var(--primary)}.found{display:flex;flex-direction:column;align-items:center;gap:8px;padding:6px 0 4px}.found-avatar{width:76px;height:76px;border-radius:50%;display:grid;place-items:center;font-size:24px;font-weight:800;color:#fff;background:linear-gradient(145deg,#5b86ff,#2747d4 60%,#1b2b74);box-shadow:0 0 0 4px var(--surface),0 0 0 6px var(--gold);animation:pop .5s cubic-bezier(.34,1.56,.64,1) both}@keyframes pop{0%{transform:scale(.6);opacity:0}}.accent{color:var(--primary)}.center{text-align:center}.link-card .state-icon{align-self:center;margin:4px 0 0}.state-icon.warn{color:var(--warn);background:var(--warn-soft)}.state{display:flex;flex-direction:column;align-items:center;text-align:center;gap:8px;padding:72px 24px}.state-icon{width:64px;height:64px;border-radius:20px;display:grid;place-items:center;color:var(--primary);background:var(--primary-soft);margin-bottom:6px}.state p{color:var(--muted);max-width:300px}.state .btn{margin-top:10px}.sk{height:74px;border-radius:var(--radius);background:linear-gradient(90deg,var(--surface) 0%,var(--surface-2) 50%,var(--surface) 100%);background-size:200% 100%;animation:shimmer 1.2s infinite linear;border:1px solid var(--line)}.sk-hero{height:112px}@keyframes shimmer{to{background-position:-200% 0}}@media (prefers-reduced-motion: reduce){*{animation:none!important;transition:none!important}}
