:root{color:#261b18;--accent:#c23a2b;--accent-soft:#ffe8e2;--border:#ecd8cf;--ink:#261b18;--muted:#8d7068;--panel:#fffcf8e0;--shadow:0 24px 80px #552c231c;--hitrate-high:#2a8a52;background:#fff9f5;font-family:Geist Mono,ui-monospace,SFMono-Regular,Menlo,monospace}*{box-sizing:border-box}body{background:radial-gradient(circle at 0 0,#c23a2b24,#0000 34rem),linear-gradient(135deg,#fffaf6,#fff3ed);min-height:100vh;margin:0}button,input{font:inherit}button{cursor:pointer}.login-page{align-content:center;justify-items:center;gap:1rem;min-height:100vh;padding:2rem;display:grid}.login-card,.panel,.top-nav,.stat-card{border:1px solid var(--border);background:var(--panel);box-shadow:var(--shadow)}.login-card{border-radius:32px;width:min(100%,440px);padding:2.2rem}h1,h2,h3{color:var(--ink);margin:0;font-family:Instrument Serif,Georgia,serif;font-weight:400;line-height:.98}h1{font-size:clamp(3rem,8vw,5.5rem)}h2{font-size:2.4rem}h3{font-size:1.4rem}.eyebrow{color:var(--accent);letter-spacing:.14em;text-transform:uppercase;margin:0 0 .6rem;font-size:.74rem;font-weight:600}.muted,.section-title span,small{color:var(--muted)}.login-form{gap:.9rem;margin-top:1.8rem;display:grid}input{border:1px solid var(--border);width:100%;color:var(--ink);background:#fffdfb;border-radius:18px;outline:none;padding:.95rem 1rem}input:focus{border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-soft)}.check-row{color:var(--muted);align-items:center;gap:.6rem;font-size:.82rem;display:flex}.check-row input{width:auto}.primary-button,.ghost-button,.back-button,.download-button,.course-card,.top-nav button,.tabs button{border:0;border-radius:999px;transition:transform .16s,background .16s}.primary-button{background:var(--accent);color:#fff;padding:1rem 1.1rem}.primary-button:disabled,.download-button:disabled{cursor:wait;opacity:.68}.app-shell{grid-template-columns:1fr;align-content:start;gap:1.2rem;min-height:100vh;padding:1.2rem;display:grid}.top-nav{z-index:10;border-radius:30px;justify-content:space-between;align-self:start;align-items:center;gap:1rem;padding:1.2rem;display:flex;position:sticky;top:1.2rem}.top-nav strong{font-family:Instrument Serif,Georgia,serif;font-size:1.8rem;font-weight:400;display:block}.nav-tabs{flex-wrap:wrap;gap:.6rem;display:flex}.top-nav button,.ghost-button{color:var(--muted);text-align:left;background:0 0;justify-content:center;align-items:center;gap:.45rem;padding:.8rem 1rem;display:flex}.top-nav button.active,.top-nav button:hover,.ghost-button:hover{background:var(--accent-soft);color:var(--accent)}.content{align-content:start;gap:1rem;width:min(1180px,100%);min-width:0;margin:0 auto;display:grid}.topbar{justify-content:space-between;align-items:flex-start;gap:1rem;padding:1rem .3rem;display:flex}.status-row{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:.45rem;display:flex}.cache-badge{border:1px solid var(--border);background:var(--accent-soft);color:var(--accent);letter-spacing:.04em;text-transform:uppercase;border-radius:999px;align-items:center;padding:.25rem .55rem;font-family:Geist Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.68rem;font-weight:600;display:inline-flex}.cache-badge--file{color:var(--muted);text-transform:none;letter-spacing:.02em;background:#f4ebe7;margin-left:.35rem;font-size:.65rem;font-weight:500}.document-type-row{flex-wrap:wrap;align-items:center;gap:.35rem;display:inline-flex}.status-pill,.tag{border:1px solid var(--border);color:var(--accent);text-transform:uppercase;background:#fffdfb;border-radius:999px;padding:.42rem .7rem;font-size:.72rem}.stats-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem;display:grid}.hero-panel{justify-content:space-between;align-items:center;gap:1rem;display:flex}.dial{background:conic-gradient(var(--accent) var(--pct), #f2ded7 0);border-radius:999px;flex:none;place-items:center;width:132px;height:132px;display:grid}.dial>div{border-radius:inherit;text-align:center;background:#fffdfb;place-items:center;width:102px;height:102px;display:grid}.dial strong{color:var(--accent);font-family:Instrument Serif,Georgia,serif;font-size:2.1rem;font-weight:400}.dial.dial--hitrate-high{background:conic-gradient(var(--hitrate-high) var(--pct), #f2ded7 0)}.dial.dial--hitrate-high>div strong{color:var(--hitrate-high)}.stat-card,.panel{border-radius:28px;padding:1.2rem}.stat-card span{color:var(--muted);font-size:.78rem}.stat-card strong{color:var(--accent);margin-top:.5rem;font-family:Instrument Serif,Georgia,serif;font-size:3rem;font-weight:400;display:block}.section-title{justify-content:space-between;align-items:end;gap:1rem;margin-bottom:1rem;display:flex}.attendance-list,.stack,.data-list,.materials{gap:.7rem;display:grid}.attendance-row{grid-template-columns:minmax(180px,1fr) minmax(120px,340px) 70px;align-items:center;gap:1rem;display:grid}.attendance-row div:first-child{gap:.25rem;display:grid}.attendance-row span{color:var(--muted);font-size:.76rem}.bar{background:#f2ded7;border-radius:999px;height:10px;overflow:hidden}.bar i{border-radius:inherit;background:var(--accent);height:100%;display:block}.course-grid{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:.8rem;display:grid}.subject-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:.8rem;display:grid}.hitrate-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.subject-card,.utility-course-card{border:1px solid var(--border);color:var(--ink);text-align:left;background:#fffdfb;border-radius:24px;grid-template-columns:auto 1fr;align-items:center;gap:1rem;padding:1rem;display:grid}.subject-card .dial,.utility-course-card .dial{width:86px;height:86px}.subject-card .dial>div,.utility-course-card .dial>div{width:66px;height:66px}.subject-card .dial strong,.utility-course-card .dial strong{font-size:1.35rem}.subject-card strong,.utility-course-card strong{margin-bottom:.35rem;display:block}.subject-card>div:last-child,.utility-course-card>div:nth-child(2){gap:.3rem;display:grid}.subject-card span,.utility-course-card small{color:var(--muted);font-size:.76rem;display:block}.accordion summary{cursor:pointer;color:var(--accent);font-weight:600}.accordion .course-grid{margin-top:1rem}.course-card{border:1px solid var(--border);color:var(--ink);text-align:left;background:#fffdfb;justify-items:start;gap:.55rem;padding:1rem;display:grid}.course-card:hover,.download-button:hover,.back-button:hover{background:var(--accent-soft);transform:translateY(-1px)}.course-card small{font-size:.72rem}.search-box{align-items:center;gap:.7rem;margin-bottom:1rem;display:flex}.search-box input{border-radius:999px}.back-button{color:var(--accent);background:#fffdfb;justify-self:start;padding:.7rem 1rem}.course-panel{gap:1rem;display:grid}.download-note{border:1px solid var(--border);background:var(--accent-soft);color:#7e2b21;border-radius:18px;align-items:center;gap:.55rem;padding:.8rem .9rem;font-size:.78rem;display:flex}.download-button{border:1px solid var(--border);width:fit-content;max-width:100%;color:var(--ink);text-align:left;background:#fffdfb;justify-content:flex-start;align-items:center;gap:.55rem;padding:.75rem .9rem;display:inline-flex}.download-button:disabled{cursor:not-allowed;opacity:.62}.download-button.danger{color:#fff;background:#c23a2b;border-color:#c23a2b}.download-button.danger:hover{color:#fff;background:#a92f23}.download-actions{justify-content:flex-end;display:flex}.hitrate-panel{position:relative;overflow:hidden}.hitrate-panel:after{content:"";pointer-events:none;opacity:0;background:radial-gradient(circle,#c23a2b38 0 8%,#0000 9%),conic-gradient(from 90deg,#0000,#c23a2b2e,#0000);position:absolute;inset:-30%;transform:scale(.65)rotate(0)}.hitrate-panel--active:after{animation:1s ease-out hitrateBurst}.hitrate-button{color:#fff;background:#d8cbc6;border:0;border-radius:16px;grid-column:1/-1;justify-content:center;width:100%;padding:.9rem 1rem;transition:transform .16s,box-shadow .16s;position:relative;overflow:hidden}.hitrate-button:hover:not(:disabled){background:#cdbdb7;transform:translateY(-1px);box-shadow:0 12px 36px #552c231f}.hitrate-button:disabled{cursor:not-allowed;opacity:.55}.hitrate-button.hitrate-button--incomplete:not(:disabled){color:#fff;background:linear-gradient(145deg,#d43828,#b83224)}.hitrate-button.hitrate-button--incomplete:not(:disabled):hover{background:linear-gradient(145deg,#df4535,#c23a2b);box-shadow:0 12px 28px #c23a2b47}.hitrate-button.hitrate-button--maxxed{color:#463833;cursor:default;opacity:.85;letter-spacing:.06em;background:#d8cbc6}.hitrate-button--glowing{color:#fff;background:linear-gradient(145deg,#d43828,#b83224);border:0;animation:1.4s ease-in-out infinite hitrateGlowPulse;box-shadow:0 0 0 1px #c23a2b4d,0 0 14px #c23a2b52}.hitrate-button--glowing:hover:not(:disabled){background:linear-gradient(145deg,#d43828,#b83224);transform:none}@keyframes hitrateGlowPulse{0%,to{box-shadow:0 0 0 1px #c23a2b40,0 0 10px #c23a2b47}50%{box-shadow:0 0 0 1px #c23a2b66,0 0 18px #c23a2b6b}}.hitrate-error{color:var(--accent);margin-top:.25rem;font-size:.72rem;display:block}.hitrate-loading{color:var(--accent);font-weight:500}.soon-tag{border:1px solid var(--border);color:var(--muted);vertical-align:middle;background:#f4ebe7;border-radius:999px;align-items:center;padding:.22rem .55rem;font-family:Geist Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.72rem;display:inline-flex}.hitrate-card--active .hitrate-button{animation:.76s cubic-bezier(.22,1,.36,1) hitrateButton}.hitrate-card--active .dial{animation:.9s ease-out hitrateDial}@keyframes hitrateBurst{0%{opacity:0;transform:scale(.55)rotate(0)}18%{opacity:1}to{opacity:0;transform:scale(1.18)rotate(130deg)}}@keyframes hitrateButton{0%{transform:scale(1)}40%{transform:scale(1.08)}to{transform:scale(1)}}@keyframes hitrateDial{0%{filter:saturate();transform:rotate(0)}55%{filter:saturate(1.6);transform:rotate(9deg)scale(1.06)}to{filter:saturate();transform:rotate(0)}}.utility-panel{gap:1rem;display:grid}.form-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:.8rem;display:grid}.utility-actions{flex-wrap:wrap;gap:.7rem;display:flex}.field-label{color:var(--muted);gap:.45rem;font-size:.8rem;display:grid}select{border:1px solid var(--border);width:100%;color:var(--ink);font:inherit;background:#fffdfb;border-radius:18px;padding:.95rem 1rem}.subtle-primary{justify-self:start}.subtle-primary:disabled{cursor:not-allowed;opacity:.65}.subtle-primary span,.download-button span{opacity:.75}.tabs{flex-wrap:wrap;gap:.55rem;margin-bottom:1rem;display:flex}.tabs button{color:var(--muted);text-transform:capitalize;background:#fffdfb;padding:.7rem .9rem}.tabs button.active{background:var(--accent);color:#fff}.soft-card,.data-row{border:1px solid var(--border);background:#fffdfb;border-radius:18px;padding:.9rem}.file-list{gap:.65rem;display:grid}.document-table{border:1px solid var(--border);background:#fffdfb;border-radius:20px;display:grid;overflow:hidden}.document-row{grid-template-columns:1fr auto;align-items:center;gap:1rem;padding:.85rem .9rem;display:grid}.document-row+.document-row{border-top:1px solid var(--border)}.document-row div{gap:.24rem;display:grid}.document-row span{color:var(--muted);text-transform:uppercase;font-size:.72rem}.loading-row{color:var(--muted);align-items:center;gap:.7rem;padding:1rem;display:flex}.spinner{border:2px solid #f2ded7;border-top-color:var(--accent);border-radius:999px;width:18px;height:18px;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.file-row{border:1px solid var(--border);background:#fffdfb;border-radius:18px;grid-template-columns:auto 1fr;align-items:center;gap:.7rem;padding:.9rem;display:grid}.soft-card p{margin:.65rem 0 0}.data-row{grid-template-columns:2fr repeat(3,1fr);align-items:center;gap:.7rem;display:grid}.error{color:var(--accent);margin:0}.banner{background:var(--accent-soft);border:1px solid #f1b0a8;border-radius:18px;padding:.8rem 1rem}.app-footer{color:var(--muted);text-align:center;padding:1rem .3rem .4rem;font-size:.78rem}.app-footer a{color:var(--accent);text-decoration:none}.app-footer a:hover{text-decoration:underline}@media (width<=860px){.top-nav{flex-direction:column;align-items:stretch;gap:1rem;position:static}.nav-tabs,.hero-panel{flex-direction:column;align-items:stretch}.stats-grid,.attendance-row,.data-row,.form-grid,.file-row,.document-row,.hitrate-grid{grid-template-columns:1fr}}
