@font-face{font-family:Inter;src:url("assets/InterVariable.ttf") format("truetype");font-style:normal;font-weight:100 900;font-display:swap}
:root{color-scheme:light;--canvas:#f7f6f0;--surface:#fff;--ink:#17221f;--muted:#55615b;--line:#c9cec5;--soft:#e9edff;--blue:#294ff2;--blue-dark:#203fc5;--green:#18833b;--green-soft:#e8f7e9;--amber:#8b6400;--amber-soft:#fff3d8;--red:#c83d32;--red-soft:#fff0ee;--shadow:0 12px 34px #18231b0c;--radius:16px;--focus:#193cb9}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--canvas);color:var(--ink);font:15px/1.5 Inter,system-ui,sans-serif;font-feature-settings:"cv11","ss01";font-variation-settings:"opsz" 14;accent-color:var(--blue)}body.dark{color-scheme:dark;--canvas:#11151e;--surface:#1a202c;--ink:#f7f6f0;--muted:#b9c1bc;--line:#343d4c;--soft:#242b3a;--blue:#7892ff;--blue-dark:#aab8ff;--green:#76d28e;--green-soft:#25352b;--amber:#ffd166;--amber-soft:#382f20;--red:#ff8f82;--red-soft:#392724;--focus:#b7c4ff;--shadow:0 12px 34px #0004}
button,input,select{font:inherit;color:inherit}button{cursor:pointer}button:focus-visible,input:focus-visible,select:focus-visible,a:focus-visible{outline:3px solid var(--focus);outline-offset:3px}a{color:inherit;text-decoration:none}svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex:none}.app-shell{min-height:100vh}.sidebar{position:fixed;inset:0 auto 0 0;width:246px;padding:27px 18px 18px;background:var(--canvas);border-right:1px solid var(--line);display:flex;flex-direction:column;z-index:5}.brand{height:48px;display:flex;align-items:center;gap:10px;padding:0 11px;font-size:25px;font-weight:760;letter-spacing:-1.2px}.brand-mark{width:31px;height:31px;background:var(--blue);mask:url("assets/rollcall-brush.png") center/contain no-repeat;-webkit-mask:url("assets/rollcall-brush.png") center/contain no-repeat}.nav-caption{margin:46px 12px 12px;color:var(--muted);font-size:11px;font-weight:700;letter-spacing:.12em}.primary-nav{display:grid;gap:5px}.nav-item{min-height:46px;width:100%;display:flex;align-items:center;gap:12px;padding:0 13px;border:0;border-radius:12px;background:transparent;color:var(--muted);text-align:left;font-size:14px;font-weight:540;transition:background .16s,color .16s,transform .16s}.nav-item:hover{background:var(--soft);color:var(--ink)}.nav-item:active{transform:scale(.985)}.nav-item.active{background:var(--soft);color:var(--blue);font-weight:680}.nav-item svg{width:19px;height:19px}.sidebar-bottom{margin-top:auto}.sidebar-note{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0 4px 20px;padding:13px 12px;border:1px solid var(--line);border-radius:12px;color:var(--ink);font-size:12px}.sidebar-note small{display:block;flex-basis:100%;margin-left:14px;color:var(--muted);font-size:11px}.connection-dot{width:7px;height:7px;border-radius:50%;background:var(--amber);box-shadow:0 0 0 3px var(--amber-soft)}.profile-line{display:flex;align-items:center;gap:10px;padding:12px 6px 4px;border-top:1px solid var(--line);font-size:13px}.profile-line b,.profile-line small{display:block}.profile-line small{margin-top:2px;color:var(--muted);font-size:11px}.avatar{display:grid;place-items:center;width:37px;height:37px;border-radius:50%;background:var(--soft);color:var(--blue);font-weight:700}.main-column{margin-left:246px;min-height:100vh}.topbar{height:68px;position:sticky;top:0;z-index:4;display:flex;align-items:center;justify-content:space-between;padding:0 clamp(24px,4vw,62px);background:color-mix(in srgb,var(--canvas) 94%,transparent);border-bottom:1px solid var(--line);backdrop-filter:blur(12px)}.crumb{display:flex;align-items:center;gap:10px;color:var(--muted);font-size:13px}.crumb b{color:var(--ink);font-weight:620}.crumb-sep{color:var(--line)}.top-actions{display:flex;align-items:center;gap:10px}.icon-button{display:inline-grid;place-items:center;min-width:42px;min-height:42px;border:1px solid var(--line);border-radius:50%;background:var(--surface);color:var(--ink);font-size:21px;line-height:1}.icon-button svg{width:18px;height:18px}.button{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:0 17px;border:1px solid transparent;border-radius:10px;font-size:13px;font-weight:650;transition:background .16s,transform .16s,border-color .16s}.button:active{transform:translateY(1px)}.button-primary{background:var(--blue);color:#fff}.button-primary:hover{background:var(--blue-dark);color:#fff}.button-secondary{background:var(--soft);color:var(--blue)}.button-quiet{background:transparent;border-color:var(--line);color:var(--ink)}.button-quiet:hover{background:var(--soft)}.button-danger{background:var(--red-soft);color:var(--red)}#main{max-width:1510px;margin:0 auto;padding:36px clamp(24px,4vw,62px) 60px;min-height:calc(100vh - 116px)}.page-head{display:flex;justify-content:space-between;align-items:flex-end;gap:20px;margin:0 0 28px}.page-head h1{margin:0;font-size:clamp(28px,3vw,38px);line-height:1.1;letter-spacing:-.045em;font-weight:680}.page-head p{margin:9px 0 0;color:var(--muted);max-width:68ch}.eyebrow{margin:0 0 7px;color:var(--muted);font-size:11px;font-weight:650;letter-spacing:.06em}.sync-control{display:inline-flex;align-items:center;gap:8px;color:var(--muted);font-size:12px}.status-dot{width:8px;height:8px;background:var(--amber);border-radius:50%}.status-dot.ready{background:var(--green)}.status-dot.error{background:var(--red)}
.home-intro{display:flex;justify-content:space-between;align-items:flex-end;gap:24px;margin:0 0 24px}.home-intro h1{max-width:620px}.home-intro p{margin:8px 0 0;color:var(--muted)}.sync-box{display:flex;align-items:center;gap:11px;padding:10px 12px;border:1px solid var(--line);border-radius:12px;background:var(--surface);white-space:nowrap}.sync-box span:last-child{color:var(--muted);font-size:12px}.home-grid{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(290px,.7fr);gap:18px}.home-main,.home-side{display:grid;align-content:start;gap:18px;min-width:0}.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius)}.panel-head{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px 21px 0}.panel-head h2{margin:0;font-size:17px;letter-spacing:-.025em;font-weight:650}.panel-body{padding:16px 21px 20px}.panel-link{border:0;background:none;color:var(--green);font-size:12px;font-weight:650;min-height:42px;padding:5px}.attendance-panel{padding:22px}.attendance-top{display:flex;align-items:flex-start;justify-content:space-between;gap:20px}.attendance-top h2{margin:0;font-size:18px;font-weight:650}.attendance-top p{margin:5px 0 0;color:var(--muted);font-size:13px}.target-chip{display:inline-flex;align-items:center;min-height:36px;padding:0 11px;border-radius:9px;background:var(--soft);color:var(--blue);font-size:12px;font-weight:650}.attendance-overall{display:flex;align-items:baseline;gap:8px;margin:23px 0 4px}.attendance-overall strong{font-size:42px;letter-spacing:-.06em;line-height:1;font-weight:680;font-variant-numeric:tabular-nums}.attendance-overall span{color:var(--muted);font-size:13px}.attendance-counts{color:var(--muted);font-size:12px}.attendance-meter{height:7px;margin-top:18px;border-radius:9px;background:var(--soft);overflow:hidden}.attendance-meter i{display:block;height:100%;width:var(--value,0%);border-radius:inherit;background:var(--blue);transition:width .35s cubic-bezier(.16,1,.3,1)}.meter-labels{display:flex;justify-content:space-between;gap:12px;margin-top:8px;color:var(--muted);font-size:11px}.meter-labels b{color:var(--blue);font-weight:650}.next-class{padding:19px 21px}.next-class .section-label{font-size:11px;font-weight:700;color:var(--blue);letter-spacing:.06em}.next-class h2{margin:13px 0 4px;font-size:20px;letter-spacing:-.035em}.next-class p{margin:0;color:var(--muted);font-size:13px}.next-class .class-meta{margin-top:14px;padding-top:12px;border-top:1px solid var(--line);display:flex;gap:13px;flex-wrap:wrap;color:var(--muted);font-size:12px}.empty-copy{color:var(--muted);font-size:13px}.empty-actions{display:flex;gap:9px;flex-wrap:wrap;margin-top:16px}.course-list{display:grid;gap:8px}.course-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:16px;align-items:center;padding:14px 15px;border:1px solid var(--line);border-radius:12px;background:var(--surface)}.course-info{min-width:0}.course-info b{display:block;overflow-wrap:anywhere;font-size:14px;font-weight:640}.course-info small{display:block;margin-top:3px;color:var(--muted);font-size:11px}.course-stat{text-align:right}.course-stat strong{display:block;font-size:20px;line-height:1;font-weight:670;font-variant-numeric:tabular-nums}.course-stat small{display:block;margin-top:6px;color:var(--muted);font-size:11px}.course-guidance{grid-column:1/-1;display:flex;align-items:center;gap:8px;padding-top:10px;border-top:1px solid var(--line);color:var(--muted);font-size:12px}.course-guidance strong{color:var(--ink);font-weight:650}.course-guidance .risk-text{color:var(--red)}.course-guidance .safe-text{color:var(--green)}.course-actions{grid-column:1/-1;display:flex;justify-content:flex-end;gap:8px}.empty-panel{padding:28px;border:1px dashed var(--line);border-radius:14px;text-align:left}.empty-panel h3{margin:0;font-size:16px}.empty-panel p{max-width:64ch;margin:7px 0 0;color:var(--muted);font-size:13px}.weekly-peek{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px;padding-top:4px}.week-day{min-height:72px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px;border:1px solid var(--line);border-radius:11px;color:var(--muted);font-size:11px}.week-day b{font-size:16px;color:var(--ink);font-weight:650}.week-day.has-classes{background:var(--soft);border-color:transparent;color:var(--blue)}.week-day.has-classes b{color:var(--blue)}.event-list{display:grid;gap:8px}.event-row{display:grid;grid-template-columns:76px minmax(0,1fr);gap:12px;padding:12px 0;border-bottom:1px solid var(--line)}.event-row:last-child{border-bottom:0}.event-time{color:var(--blue);font-size:12px;font-weight:650;font-variant-numeric:tabular-nums}.event-row b{display:block;font-size:13px}.event-row small{display:block;margin-top:3px;color:var(--muted);font-size:11px}.od-summary-row{display:flex;gap:15px;flex-wrap:wrap;color:var(--muted);font-size:12px}.od-summary-row b{font-weight:650}.green{color:var(--green)!important}.amber{color:var(--amber)!important}.red{color:var(--red)!important}.status-pill{display:inline-flex;align-items:center;justify-content:center;min-height:31px;padding:4px 10px;border-radius:9px;background:var(--soft);color:var(--blue);font-size:11px;font-weight:650}.status-pill.approved{background:var(--green-soft);color:var(--green)}.status-pill.pending{background:var(--amber-soft);color:var(--amber)}.status-pill.rejected{background:var(--red-soft);color:var(--red)}
.toolbar{display:flex;align-items:center;justify-content:space-between;gap:14px;margin:0 0 15px}.toolbar-left{display:flex;align-items:center;gap:9px}.segmented{display:inline-flex;padding:4px;border-radius:10px;background:var(--soft)}.segmented button{min-height:36px;padding:0 12px;border:0;border-radius:7px;background:transparent;color:var(--muted);font-size:12px;font-weight:570}.segmented button[aria-pressed=true]{background:var(--surface);color:var(--blue);box-shadow:0 1px 3px #18231b14}.search-input,input,select{min-height:44px;padding:0 12px;border:1px solid var(--line);border-radius:9px;background:var(--surface);color:var(--ink)}.search-input{width:min(280px,40vw)}.filter-count{color:var(--muted);font-size:12px}.course-page-list{display:grid;gap:8px}.course-card{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:14px;padding:18px 19px;border:1px solid var(--line);border-radius:13px;background:var(--surface)}.course-card h3{margin:0;font-size:16px;letter-spacing:-.02em}.course-card .course-code{margin-top:3px;color:var(--muted);font-size:11px}.course-card .course-percent{font-size:24px;font-weight:680;font-variant-numeric:tabular-nums}.course-data{display:grid;grid-template-columns:repeat(2,minmax(150px,1fr));gap:12px;margin-top:16px}.data-cell{padding:12px 13px;border-radius:10px;background:var(--canvas)}.data-cell span{display:block;color:var(--muted);font-size:11px}.data-cell b{display:block;margin-top:5px;font-size:17px;font-weight:660;font-variant-numeric:tabular-nums}.course-explainer{margin-top:11px;color:var(--muted);font-size:12px}.course-status{align-self:start}
.week-layout{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(250px,.6fr);gap:18px}.week-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}.week-toolbar h2{margin:0;font-size:18px}.day-select{width:100%;max-width:225px}.schedule-list{display:grid}.schedule-item{display:grid;grid-template-columns:112px minmax(0,1fr) auto;gap:15px;align-items:center;padding:15px 0;border-bottom:1px solid var(--line)}.schedule-item:last-child{border-bottom:0}.schedule-date{color:var(--muted);font-size:11px}.schedule-time{display:block;color:var(--blue);font-size:13px;font-weight:650;font-variant-numeric:tabular-nums}.schedule-name{font-size:14px;font-weight:640}.schedule-meta{margin-top:3px;color:var(--muted);font-size:11px}.whatif-layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(300px,.75fr);gap:18px;align-items:start}.planner{padding:22px}.planner label,.settings-form label,.dialog label{display:grid;gap:7px;color:var(--muted);font-size:12px;font-weight:590}.planner select{width:100%}.choice-row{display:flex;gap:8px;margin-top:17px}.choice-row button{flex:1;min-height:45px;border:1px solid var(--line);border-radius:10px;background:var(--surface);color:var(--muted);font-weight:600}.choice-row button.selected{border-color:var(--blue);background:var(--soft);color:var(--blue)}.count-control{display:grid;grid-template-columns:45px 1fr 45px;align-items:center;gap:8px;margin-top:16px}.count-control button{min-height:45px;border:1px solid var(--line);border-radius:10px;background:var(--surface);font-size:20px}.count-control output{text-align:center;font-size:22px;font-weight:670;font-variant-numeric:tabular-nums}.planner .button{width:100%;margin-top:18px}.projection{padding:22px}.projection h2{margin:0;font-size:17px}.projection .projected-percent{margin:18px 0 7px;font-size:44px;line-height:1;letter-spacing:-.06em;font-weight:680;font-variant-numeric:tabular-nums}.projection p{color:var(--muted);font-size:13px}.projection-rule{height:7px;margin:17px 0 7px;border-radius:9px;background:var(--soft);overflow:hidden}.projection-rule i{display:block;height:100%;width:0;background:var(--blue);border-radius:inherit;transition:width .3s}.notice{padding:15px 16px;border-radius:12px;background:var(--soft);color:var(--muted);font-size:12px}
.od-filters{display:flex;gap:8px;margin-bottom:16px}.od-card-list{display:grid;gap:10px}.od-card{padding:0 18px;border:1px solid var(--line);border-radius:14px;background:var(--surface)}.od-card-head{display:flex;align-items:center;gap:12px;min-height:64px;cursor:pointer}.od-card-head h3{margin:0;flex:1;font-size:14px;font-weight:650}.od-date{margin:0 0 12px;color:var(--muted);font-size:12px}.od-duration{display:inline-flex;align-items:center;min-height:34px;margin:0 0 15px;padding:0 11px;border-radius:9px;background:var(--soft);color:var(--blue);font-size:12px;font-weight:750;letter-spacing:.015em}.od-details{padding:13px 0 16px;border-top:1px solid var(--line)}.od-details h4{margin:10px 0 5px;color:var(--green);font-size:12px;font-weight:650}.od-slot{display:flex;justify-content:space-between;gap:12px;padding:6px 0;color:var(--muted);font-size:12px}.od-slot b{color:var(--ink);font-weight:600}.settings-layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(300px,.75fr);gap:18px}.settings-form{display:grid;gap:17px;padding:22px}.settings-form input,.settings-form select{width:100%}.settings-form small{color:var(--muted);font-size:11px;font-weight:400}.settings-row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:15px 0;border-bottom:1px solid var(--line)}.settings-row:last-child{border:0}.settings-row b{display:block;font-size:13px;font-weight:630}.settings-row p{margin:4px 0 0;color:var(--muted);font-size:11px}.toggle{position:relative;width:48px;height:28px;border:0;border-radius:20px;background:var(--line);padding:3px}.toggle::after{content:"";display:block;width:22px;height:22px;border-radius:50%;background:#fff;transition:transform .17s}.toggle[aria-checked=true]{background:var(--blue)}.toggle[aria-checked=true]::after{transform:translateX(20px)}.file-input{display:none}.footer{display:flex;justify-content:space-between;gap:16px;padding:16px clamp(24px,4vw,62px);border-top:1px solid var(--line);color:var(--muted);font-size:11px}.mobile-nav{display:none}.dialog{width:min(510px,calc(100% - 28px));max-height:min(88vh,800px);padding:24px;border:1px solid var(--line);border-radius:18px;background:var(--canvas);color:var(--ink);box-shadow:0 24px 80px #0004}.dialog::backdrop{background:#11151e80;backdrop-filter:blur(3px)}.dialog form{display:grid;gap:14px}.dialog-head{display:flex;justify-content:space-between;align-items:flex-start;gap:15px;margin-bottom:4px}.dialog-head h2{margin:0;font-size:22px;letter-spacing:-.035em}.dialog-head p,.dialog-copy{margin:5px 0 0;color:var(--muted);font-size:12px}.dialog label input,.dialog label select{width:100%;margin-top:3px}.dialog label small{color:var(--muted);font-size:11px;font-weight:400}.form-pair{display:grid;grid-template-columns:1fr 1fr;gap:12px}.check-label{display:flex!important;align-items:center;gap:9px!important;min-height:44px}.check-label input{width:17px;height:17px}.dialog-actions{display:flex;justify-content:flex-end;gap:9px;margin-top:8px}.close-dialog{font-size:22px}.mobile-brand{display:none}.visually-hidden{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
::selection{background:#294ff233;color:var(--ink)}:root{scrollbar-color:var(--line) var(--canvas);scrollbar-width:thin}::-webkit-scrollbar{width:10px}::-webkit-scrollbar-track{background:var(--canvas)}::-webkit-scrollbar-thumb{background:var(--line);border:3px solid var(--canvas);border-radius:10px}
@media(max-width:1050px){.sidebar{width:210px;padding-inline:14px}.main-column{margin-left:210px}.home-grid{grid-template-columns:minmax(0,1fr) minmax(260px,.72fr)}.week-layout,.whatif-layout,.settings-layout{grid-template-columns:1fr}.home-intro{align-items:flex-start;flex-direction:column}.sync-box{align-self:flex-start}}
@media(max-width:760px){body{font-size:14px}.sidebar{display:none}.main-column{margin-left:0}.topbar{height:58px;padding:0 18px}.crumb{font-size:12px}.top-add{min-height:40px;padding:0 12px}.top-add span{font-size:18px}#main{padding:25px 17px 100px;min-height:calc(100vh - 100px)}.page-head{align-items:flex-start;flex-direction:column;margin-bottom:20px}.page-head h1{font-size:30px}.home-intro{gap:15px;margin-bottom:17px}.home-intro h1{font-size:29px}.home-grid{grid-template-columns:1fr;gap:13px}.home-main,.home-side{gap:13px}.panel-head{padding:17px 16px 0}.panel-body{padding:13px 16px 17px}.attendance-panel{padding:17px}.attendance-overall{margin-top:18px}.attendance-overall strong{font-size:37px}.next-class{padding:16px}.course-row{padding:12px}.weekly-peek{gap:4px}.week-day{min-height:62px}.week-day b{font-size:14px}.footer{padding:13px 17px 90px;flex-direction:column;gap:4px}.mobile-nav{position:fixed;inset:auto 10px 9px;z-index:6;display:grid;grid-template-columns:repeat(6,1fr);gap:2px;padding:5px;border:1px solid var(--line);border-radius:17px;background:color-mix(in srgb,var(--surface) 95%,transparent);box-shadow:0 8px 28px #17221f20;backdrop-filter:blur(12px)}.mobile-nav .nav-item{min-width:0;min-height:54px;flex-direction:column;justify-content:center;gap:3px;padding:5px 2px;border-radius:12px;font-size:11px}.mobile-nav .nav-item svg{width:18px;height:18px}.mobile-nav .nav-item.active{background:var(--soft)}.toolbar{align-items:stretch;flex-direction:column}.toolbar-left{justify-content:space-between}.search-input{width:100%}.course-card{padding:15px}.course-data{grid-template-columns:1fr 1fr;gap:7px}.data-cell{padding:10px}.schedule-item{grid-template-columns:74px minmax(0,1fr) auto;gap:9px}.schedule-date{font-size:10px}.od-card{padding-inline:14px}.footer{font-size:10px}}
@media(max-width:430px){.topbar{padding:0 12px}.top-add{font-size:11px}.top-actions{gap:6px}.icon-button{min-width:38px;min-height:38px}.course-data{grid-template-columns:1fr 1fr}.data-cell b{font-size:15px}.form-pair{grid-template-columns:1fr}.weekly-peek{grid-template-columns:repeat(7,minmax(0,1fr))}.week-day{min-height:55px;font-size:10px}.week-day b{font-size:13px}.schedule-item{grid-template-columns:62px minmax(0,1fr)}.schedule-item>.status-pill{grid-column:2;justify-self:start}.attendance-top{gap:10px}.target-chip{font-size:11px;padding:0 8px}.footer{padding-inline:14px}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}
.od-preview-list{display:grid;gap:10px;margin-top:14px}.od-preview-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:9px;padding-top:10px;border-top:1px solid var(--line)}.od-preview-row b,.od-preview-row small{display:block}.od-preview-row b{font-size:12px}.od-preview-row small{margin-top:2px;color:var(--muted);font-size:11px}.od-duration-preview{display:inline-flex;align-items:center;min-height:30px;padding:0 9px;border-radius:8px;background:var(--soft);color:var(--blue);font-size:11px;font-weight:750;white-space:nowrap}.attendance-mark{display:inline-flex!important;width:max-content;margin-top:4px;padding:2px 7px;border-radius:6px;background:var(--soft);color:var(--muted);font-size:11px;font-weight:650}.attendance-mark.present{background:var(--green-soft);color:var(--green)}.attendance-mark.absent{background:var(--red-soft);color:var(--red)}.mycamu-steps{display:grid;gap:8px;margin:14px 0;padding-left:22px;color:var(--ink);font-size:13px}.connection-file{display:grid;gap:8px;margin-top:14px;font-size:13px;font-weight:650}.connection-file input{width:100%;padding:10px}.import-status{min-height:20px;margin:8px 0 0;color:var(--muted);font-size:12px}.schedule-item .attendance-mark{margin-top:0}
@media(max-width:430px){.od-preview-row{grid-template-columns:minmax(0,1fr) auto}.od-duration-preview{grid-column:2;grid-row:2;justify-self:end}.od-preview-row .status-pill{grid-column:2;grid-row:1}}
.import-status.connection-warning{min-height:0;margin-top:14px;padding:10px 12px;border-radius:10px;background:var(--amber-soft);color:var(--amber);line-height:1.45}.button:disabled,.button-primary:disabled{cursor:not-allowed;background:var(--line);color:var(--muted);opacity:1;transform:none}

/* Settings stack panel: nested pages slide in and support swipe-back. */
.stack-panel{width:min(100%,680px);overflow:hidden;border:1px solid var(--line);border-radius:18px;background:var(--surface);box-shadow:0 8px 28px #17221f0d}
.stack-header{position:relative;display:flex;align-items:center;min-height:58px;padding:0 18px;border-bottom:1px solid var(--line)}
.stack-header h1{margin:0;font-size:18px;font-weight:680;letter-spacing:-.025em}
.stack-back{display:inline-flex;align-items:center;gap:6px;max-width:45%;margin-right:12px;padding:7px 10px 7px 0;border:0;border-radius:8px;background:transparent;color:var(--muted);font-family:inherit;font-size:13px;font-weight:600;cursor:pointer}
.stack-back:hover{color:var(--ink)}
.stack-back span{font-size:23px;line-height:16px}
.stack-page{padding:16px 14px 20px;animation:stack-enter-forward .34s cubic-bezier(.23,1,.32,1) both}
.stack-panel[data-direction="back"] .stack-page{animation-name:stack-enter-back}
.stack-sections{display:grid;gap:16px}
.stack-section h2{margin:0 0 6px;padding:0 12px;color:var(--muted);font-size:10px;font-weight:750;letter-spacing:.09em}
.stack-section{overflow:hidden;border:1px solid var(--line);border-radius:13px;background:var(--canvas)}
.stack-row{display:flex;align-items:center;gap:12px;width:100%;min-height:52px;padding:10px 12px;border:0;border-bottom:1px solid var(--line);background:transparent;color:var(--ink);text-align:left;text-decoration:none;font:inherit;cursor:pointer;transition:background .16s ease}
.stack-row:last-child{border-bottom:0}
.stack-row:hover,.stack-row:focus-visible{background:var(--soft);outline:none}
.stack-row>span:first-child,.stack-row-copy{min-width:0;flex:1}
.stack-row-copy{display:grid;gap:3px}
.stack-row-copy b{font-size:13px;font-weight:650}
.stack-row-copy small{color:var(--muted);font-size:11px;line-height:1.45}
.stack-detail{max-width:42%;overflow:hidden;color:var(--muted);font-size:12px;text-overflow:ellipsis;white-space:nowrap}
.stack-chevron{flex:0 0 auto;color:var(--muted);font-size:21px;line-height:18px}
.stack-check{width:20px;color:var(--blue);font-size:15px;font-weight:800;text-align:center}
.stack-detail-page{display:grid;gap:14px;padding:16px}
.stack-detail-page h2{padding:0}
.stack-detail-page label{display:grid;gap:7px;color:var(--muted);font-size:12px;font-weight:600}
.stack-detail-page input{width:100%}
.stack-footnote{margin:0;color:var(--muted);font-size:12px;line-height:1.55}
@keyframes stack-enter-forward{from{opacity:0;transform:translateX(22px)}to{opacity:1;transform:translateX(0)}}
@keyframes stack-enter-back{from{opacity:0;transform:translateX(-18px)}to{opacity:1;transform:translateX(0)}}
@media(prefers-reduced-motion:reduce){.stack-page{animation:none}}

/* Rollcall controls adapted to the existing vanilla web client. */
.home-controls{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.pull-cord{position:relative;display:grid;grid-template-columns:22px 32px minmax(0,1fr);align-items:center;gap:9px;min-height:56px;padding:6px 12px 6px 8px;border:1px solid var(--line);border-radius:12px;background:var(--surface);color:var(--ink);text-align:left;cursor:pointer}.pull-cord:hover{background:var(--soft)}.pull-line{justify-self:center;width:2px;height:31px;border-radius:2px;background:var(--muted);transform-origin:top center}.pull-knob{display:grid;place-items:center;width:30px;height:30px;border-radius:50%;background:var(--soft);color:var(--blue);transition:transform .22s cubic-bezier(.2,.8,.2,1),background .18s}.pull-knob svg{width:16px;height:16px}.pull-copy{display:grid;gap:1px;white-space:nowrap}.pull-copy b{font-size:11px;font-weight:680}.pull-copy small{color:var(--muted);font-size:10px}.pull-cord[aria-pressed=true] .pull-knob{background:var(--blue);color:#fff}.pull-cord[data-pulling=true] .pull-line{animation:cord-swing .42s ease-out}.pull-cord[data-pulling=true] .pull-knob{animation:cord-yank .42s cubic-bezier(.18,.8,.22,1)}
.mode-row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 16px}.mode-row b{font-size:14px;font-weight:660}.mode-row p{margin:3px 0 0;color:var(--muted);font-size:12px}.mode-switch{position:relative;flex:none;width:58px;height:34px;padding:3px;border:0;border-radius:20px;background:var(--line);cursor:pointer;transition:background .2s ease}.mode-switch[aria-checked=true]{background:var(--blue)}.mode-thumb{position:relative;display:grid;place-items:center;width:28px;height:28px;border-radius:50%;background:var(--surface);color:var(--blue);box-shadow:0 1px 4px #10182826;transform:translateX(0);transition:transform .23s cubic-bezier(.2,.8,.2,1),color .18s}.mode-switch[aria-checked=true] .mode-thumb{transform:translateX(24px);color:var(--blue)}.mode-thumb svg{position:absolute;width:15px;height:15px;transition:opacity .16s,transform .2s}.mode-moon{opacity:0;transform:rotate(-35deg) scale(.72)}.mode-switch[aria-checked=true] .mode-sun{opacity:0;transform:rotate(45deg) scale(.72)}.mode-switch[aria-checked=true] .mode-moon{opacity:1;transform:rotate(0) scale(1)}.mode-switch[data-pulling=true] .mode-thumb{animation:mode-press .38s ease-out}
.bell-toggle{position:relative;display:inline-grid;grid-template-columns:20px max-content;align-items:center;gap:9px;min-height:44px;padding:0 16px;border:1px solid var(--line);border-radius:22px;background:var(--ink);color:var(--surface);font-size:13px;font-weight:620;cursor:pointer;overflow:hidden;transition:background .2s,color .2s,transform .16s}.bell-toggle:hover{transform:translateY(-1px)}.bell-toggle:active{transform:scale(.98)}.bell-toggle svg{width:18px;height:18px}.bell-toggle .bell-label-off,.bell-toggle .bell-label-on{grid-area:1/2;transition:opacity .2s ease,filter .2s ease}.bell-toggle .bell-label-on{opacity:0;filter:blur(2px)}.bell-toggle[aria-pressed=true],.bell-toggle.is-on{background:var(--soft);color:var(--blue)}.bell-toggle[aria-pressed=true] .bell-label-off{opacity:0}.bell-toggle[aria-pressed=true] .bell-label-on{opacity:1;filter:none}.bell-toggle.is-on{cursor:default}.bell-toggle.is-on svg{animation:bell-ring .72s cubic-bezier(.2,.8,.2,1) both}.bell-toggle:disabled{opacity:1}.notification-feedback{min-height:18px;margin:0 16px;color:var(--muted);font-size:12px;line-height:1.45}
.hold-action{position:relative;isolation:isolate;overflow:hidden;display:inline-flex;align-items:center;justify-content:center;min-width:126px;min-height:40px;padding:0 12px;border:1px solid color-mix(in srgb,var(--red) 45%,var(--line));border-radius:9px;background:var(--surface);color:var(--red);font-size:11px;font-weight:680;touch-action:none;user-select:none;-webkit-user-select:none}.hold-action:hover{background:var(--red-soft)}.hold-fill{position:absolute;z-index:-1;inset:0;width:0;background:var(--red-soft);transition:width .16s ease-out}.hold-action.holding .hold-fill{width:100%;transition:width .9s linear}.hold-action.holding{border-color:var(--red)}.hold-action:active{transform:scale(.985)}.hold-action .hold-label{pointer-events:none}.mode-row{min-height:72px}.stack-footnote{margin:0 16px;color:var(--muted);font-size:12px;line-height:1.55}.stack-detail-page .hold-action{justify-self:start;margin:0 16px 14px}
@keyframes cord-swing{0%,100%{transform:rotate(0)}28%{transform:rotate(13deg)}58%{transform:rotate(-7deg)}80%{transform:rotate(3deg)}}@keyframes cord-yank{0%{transform:translateY(0)}35%{transform:translateY(8px) scale(.95)}70%{transform:translateY(-2px)}100%{transform:translateY(0)}}@keyframes mode-press{0%{scale:1}40%{scale:.84}100%{scale:1}}@keyframes bell-ring{0%{transform:rotate(0)}18%{transform:rotate(17deg)}36%{transform:rotate(-13deg)}54%{transform:rotate(8deg)}72%{transform:rotate(-4deg)}100%{transform:rotate(0)}}@keyframes theme-reveal{to{clip-path:circle(150vmax at var(--theme-x,50%) var(--theme-y,50%))}}::view-transition-new(root){animation:theme-reveal .52s cubic-bezier(.16,1,.3,1)}::view-transition-old(root){animation:none}
@media(max-width:760px){.home-controls{align-self:flex-start}.pull-cord{min-height:52px}.mode-row{padding-inline:13px}.stack-detail-page .hold-action{margin-inline:13px}}
@media(prefers-reduced-motion:reduce){.pull-cord[data-pulling=true] .pull-line,.pull-cord[data-pulling=true] .pull-knob,.mode-switch[data-pulling=true] .mode-thumb,.bell-toggle.is-on svg{animation:none!important}::view-transition-new(root){animation:none!important}}
.mode-switch{width:72px;height:44px;padding:4px}.mode-thumb{width:36px;height:36px}.mode-switch[aria-checked=true] .mode-thumb{transform:translateX(28px)}.hold-action{min-height:44px}.hold-fill{z-index:0}.hold-action .hold-label{position:relative;z-index:1}

/* Phone-synced snapshots are deliberately read-only in the browser. */
.remote-data #add-course-top,
.remote-data main [data-action="add-course"],
.remote-data main [data-action="add-class"],
.remote-data main [data-action="add-od"],
.remote-data main [data-action="connect"],
.remote-data main [data-action="import"],
.remote-data main [data-action="export"],
.remote-data main [data-edit-course],
.remote-data main .hold-action,
.remote-data main #save-profile,
.remote-data main #save-target { display: none !important; }
.upcoming-exam { border-color: color-mix(in srgb, var(--blue) 36%, var(--line)); }
.exam-countdown { display:flex; align-items:baseline; gap:9px; margin:14px 0 8px; color:var(--blue); }
.exam-countdown strong { font-size:42px; line-height:1; letter-spacing:-.06em; }
.exam-countdown span { font-size:13px; font-weight:650; }
.exam-course { margin:5px 0 14px; font-weight:650; }
.exam-type,.exam-session,.exam-date { padding:6px 9px; border-radius:999px; font-size:11px; font-weight:700; }
.exam-type { background:var(--soft); color:var(--muted); }
.exam-session.an { background:var(--soft); color:var(--blue); }
.exam-session.fn { background:var(--amber-soft); color:var(--amber); }
.marks-semesters { display:grid; gap:14px; }
.cgpa-panel { margin-bottom:14px; padding:22px; }
.cgpa-panel>strong { display:block; margin-top:8px; font-size:48px; letter-spacing:-.06em; }
.cgpa-panel>p { margin:3px 0 0; color:var(--muted); font-size:13px; }
.semester-gpa { display:flex; align-items:baseline; gap:6px; font-size:20px; }
.semester-gpa small { color:var(--muted); font-size:10px; letter-spacing:.08em; }
.marks-list { padding:0 18px 12px; }
.marks-row { display:grid; grid-template-columns:minmax(0,1fr) auto auto; align-items:center; gap:16px; min-height:58px; border-top:1px solid var(--line); }
.marks-row>div { display:grid; gap:3px; }
.marks-row>div b { font-size:13px; }
.marks-row>div small,.marks-row>span { color:var(--muted); font-size:11px; }
.grade-pill { min-width:36px; text-align:center; color:var(--ink); }
#web-account-feedback.error { color:var(--red); }
@media(max-width:600px) { .exam-countdown strong { font-size:36px; } .marks-row { gap:9px; } }
.remote-data main #setting-name,.remote-data main #setting-target,.remote-data main .file-input { display:none !important; }
