:root{--paper: #f3eee2;--panel: #fbf9f3;--panel2: #f1ebdd;--bg: var(--paper);--border: #e3dac8;--line-strong: #d2c6ac;--text: #221d15;--muted: #6f6557;--faint: #9c907d;--primary: #1f4d3a;--primary-d: #163a2c;--good: #2e6b4f;--mid: #9a6a1a;--bad: #7a2e2e;--good-soft: #e5eee7;--mid-soft: #f3e9d2;--bad-soft: #f1e2dd;--radius: 12px;--serif: "Fraunces", Georgia, "Times New Roman", serif;--sans: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--text);font-family:var(--sans);font-size:15px;line-height:1.6;-webkit-font-smoothing:antialiased}h1,h2,h3,h4{font-family:var(--serif);font-weight:500;letter-spacing:-.01em;color:var(--text)}h2{font-size:24px;margin:0 0 4px}h3{font-size:18px;margin:22px 0 8px}h4{font-size:16px;margin:0}code{font-family:SF Mono,ui-monospace,Menlo,monospace;font-size:.9em;background:var(--panel2);padding:1px 6px;border-radius:6px}.app{max-width:880px;margin:0 auto;padding:30px 20px 70px}.topbar{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-bottom:26px;padding-bottom:18px;border-bottom:1px solid var(--border)}.brand{font-family:var(--serif);font-size:25px;font-weight:600;letter-spacing:-.02em;display:flex;align-items:center;gap:11px}.logomark{flex:none}.tag{color:var(--muted);font-size:14px}.userbox{display:flex;align-items:center;gap:12px;margin-left:auto}.rolechip{font-size:12px;font-weight:500;text-transform:capitalize;padding:3px 11px;border-radius:999px;border:1px solid transparent}.rolechip.profesor{color:var(--bad);background:var(--bad-soft);border-color:#e3c8c2}.rolechip.estudiante{color:var(--good);background:var(--good-soft);border-color:#cadccf}.card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:28px;box-shadow:0 1px 2px #3c321e0a}.authcard{max-width:430px;margin:6vh auto 0}.muted{color:var(--muted)}.small{font-size:13px}.mono{font-family:SF Mono,ui-monospace,Menlo,monospace;font-size:.92em}.error{background:var(--bad-soft);color:var(--bad);border:1px solid #e3c8c2;border-radius:10px;padding:10px 14px;margin:12px 0;font-size:14px}label{display:block;font-size:14px;font-weight:500;color:var(--text);margin:14px 0 6px}input[type=text],input[type=email],input[type=password],input[type=date],input[type=file],textarea,select{width:100%;font-family:inherit;font-size:15px;color:var(--text);background:#fffdf8;border:1px solid var(--line-strong);border-radius:10px;padding:10px 13px}input:focus,textarea:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px #1f4d3a1f}textarea{resize:vertical;line-height:1.55}input[type=file]{padding:8px;background:var(--panel2);cursor:pointer}.btn{cursor:pointer;border:1px solid transparent;border-radius:10px;padding:10px 18px;font-size:14px;font-weight:500;font-family:inherit;transition:background .12s,border-color .12s}.btn.primary{background:var(--primary);color:#f6f2e7;margin-top:14px}.btn.primary:hover{background:var(--primary-d)}.btn.primary:disabled{opacity:.55;cursor:default}.btn.ghost{background:transparent;color:var(--muted);border-color:var(--line-strong)}.btn.ghost:hover{background:var(--panel2)}.btn.link{background:none;color:var(--primary);padding:4px 0;font-weight:500}.btn.link:hover{text-decoration:underline}.btn.small{padding:7px 13px;font-size:13px;background:#fffdf8;color:var(--text);border-color:var(--line-strong)}.btn.small:hover{background:var(--panel2)}.btn.small:disabled{opacity:.55;cursor:default}.btn.danger{color:var(--bad);border-color:#e3c8c2;background:var(--bad-soft)}.btn.danger:hover{background:#ecd7d1}.switchmode{text-align:center;margin-top:18px}.switchmode .btn.link{display:inline;padding:0}.filechip{display:inline-block;margin-top:8px;font-size:13px;color:var(--muted);background:var(--panel2);padding:5px 11px;border-radius:8px}.filelist{margin-top:8px;display:flex;flex-direction:column;gap:6px;max-height:180px;overflow-y:auto}.filelist .filechip{margin:0}.inlineform{display:flex;gap:10px;margin:10px 0 4px;flex-wrap:wrap}.inlineform input{flex:1;min-width:220px}.inlineform .btn.primary{margin-top:0}.classlist{list-style:none;margin:16px 0 0;padding:0;display:flex;flex-direction:column;gap:10px}.classitem{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:15px 17px;background:#fffdf8;border:1px solid var(--border);border-radius:11px;transition:border-color .12s}.classitem.clickable:hover,.clickarea:hover{border-color:var(--line-strong)}.classitem.clickable,.clickarea{cursor:pointer}.clickarea{flex:1}.rowbtns{display:flex;gap:8px}.classname{font-family:var(--serif);font-weight:500;font-size:17px}.invites{background:var(--good-soft);border:1px solid #cadccf;border-radius:11px;padding:15px 17px;margin:8px 0 18px}.invites .ilabel{font-weight:500;margin-bottom:8px;color:var(--primary)}.inviteitem{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:6px 0}.memberlist{list-style:none;margin:8px 0 0;padding:0;display:flex;flex-direction:column;gap:8px}.memberitem{display:flex;align-items:center;gap:12px;padding:11px 15px;background:#fffdf8;border:1px solid var(--border);border-radius:10px}.memberitem .mono{flex:1;font-size:14px}.statuschip{font-size:12px;font-weight:500;padding:2px 10px;border-radius:999px}.statuschip.active{color:var(--good);background:var(--good-soft)}.statuschip.invited{color:var(--mid);background:var(--mid-soft)}.tasklist{list-style:none;margin:8px 0 0;padding:0;display:flex;flex-direction:column;gap:8px}.taskitem{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:13px 16px;background:#fffdf8;border:1px solid var(--border);border-radius:10px}.taskitem.clickable{cursor:pointer;transition:border-color .12s}.taskitem.clickable:hover{border-color:var(--line-strong)}.taskname{font-weight:500}.due{font-size:13px;color:var(--muted)}.due.soon{color:var(--mid);font-weight:500}.due.overdue{color:var(--bad);font-weight:500}.detailhead{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:4px}.formtitle{font-family:var(--serif);margin:24px 0 10px;font-size:17px;font-weight:500}.taskform{display:flex;flex-direction:column;gap:2px}.taskform .formrow{display:flex;gap:14px;flex-wrap:wrap}.taskform .formrow>div{flex:1;min-width:180px;display:flex;flex-direction:column}.taskform .rowbtns{margin-top:14px}.taskform .btn.primary{margin-top:0}.rubricbox{background:var(--panel2);border:1px solid var(--border);border-radius:12px;padding:15px 17px;margin:14px 0 20px}.rubricbox .ilabel{font-weight:500;margin-bottom:8px;color:var(--muted)}.rubricpre{margin:0;white-space:pre-wrap;font-family:inherit;font-size:14px;line-height:1.6;color:var(--text)}.insights{margin:18px 0}.insightcards{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px}.icard{background:var(--panel2);border-radius:12px;padding:16px}.icard.wide{grid-column:1 / -1}.inum{font-family:var(--serif);font-size:30px;font-weight:500;color:var(--primary)}.ilabel{color:var(--muted);font-size:13px}.distbar{display:flex;height:10px;border-radius:999px;overflow:hidden;margin:10px 0 8px}.distbar .seg{display:block}.seg.bad{background:var(--bad)}.seg.mid{background:var(--mid)}.seg.good{background:var(--good)}.distlegend{display:flex;gap:16px;flex-wrap:wrap;font-size:12px;color:var(--muted)}.distlegend i{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:5px}.ldot.bad{background:var(--bad)}.ldot.mid{background:var(--mid)}.ldot.good{background:var(--good)}.topfail{margin-top:14px}.faillist{list-style:none;margin:8px 0 0;padding:0}.faillist li{display:flex;align-items:center;gap:10px;padding:5px 0;font-size:13px}.failname{flex:1}.failbar{width:90px;height:6px;background:var(--panel2);border-radius:999px;overflow:hidden}.failbar span{display:block;height:100%;background:var(--bad)}.failcount{color:var(--muted);min-width:18px;text-align:right}.grid{width:100%;border-collapse:collapse;margin-top:18px}@media (max-width: 560px){.card{padding:20px 16px}.topbar{gap:8px}.grid{display:block;overflow-x:auto;white-space:nowrap}}.grid th{text-align:left;font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);font-weight:500;padding:8px 10px;border-bottom:1px solid var(--line-strong)}.grid td{padding:11px 10px;border-bottom:1px solid var(--border);vertical-align:middle}.badge{font-size:12px;font-weight:500;padding:3px 10px;border-radius:999px;background:var(--panel2);color:var(--muted)}.badge.DONE{background:var(--good-soft);color:var(--good)}.badge.PROCESSING,.badge.RETRYING{background:var(--mid-soft);color:var(--mid)}.badge.FAILED{background:var(--bad-soft);color:var(--bad)}.cump{display:flex;align-items:center;gap:8px}.cumptrack{flex:1;max-width:110px;height:6px;background:var(--panel2);border-radius:999px;overflow:hidden}.cumpbar{height:100%;border-radius:999px}.cumpbar.good{background:var(--good)}.cumpbar.mid{background:var(--mid)}.cumpbar.bad{background:var(--bad)}.cumpval{font-variant-numeric:tabular-nums;font-size:13px;color:var(--muted)}.modalbg{position:fixed;top:0;right:0;bottom:0;left:0;background:#221d1566;display:flex;align-items:center;justify-content:center;padding:20px;z-index:50}.modal{background:var(--panel);border:1px solid var(--border);border-radius:16px;padding:26px;max-width:560px;width:100%;max-height:85vh;overflow-y:auto;box-shadow:0 24px 60px #281e0f40}.modalhead{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}.modalhead h3{margin:0}.x{cursor:pointer;border:none;background:none;font-size:24px;color:var(--muted);line-height:1}.critsummary{font-size:14px;color:var(--muted);margin:0 0 14px;padding-bottom:12px;border-bottom:1px solid var(--border)}.criterios{display:flex;flex-direction:column;gap:10px}.crit{border:1px solid var(--border);border-radius:10px;padding:12px 14px}.crit.ok{background:var(--good-soft);border-color:#cadccf}.crit.bad{background:var(--bad-soft);border-color:#e3c8c2}.crithead{display:flex;align-items:center;gap:8px}.critmark{font-weight:600}.crit.ok .critmark{color:var(--good)}.crit.bad .critmark{color:var(--bad)}.crittitle{font-weight:500}.critev{font-size:13px;color:var(--muted);margin-top:6px}.critsug{font-size:13px;color:var(--bad);margin-top:6px}.section{margin-top:16px}.section h4{font-family:var(--sans);font-size:14px;margin-bottom:6px}.list{margin:0;padding-left:18px}.list li{margin:3px 0;font-size:14px}.list.ok li{color:var(--good)}.list.bad li{color:var(--bad)}.list.sug li{color:var(--text)}.resultwrap{margin-top:6px}.scorehead{display:flex;align-items:center;gap:18px;margin:10px 0 22px}.scorering{width:96px;height:96px;border-radius:50%;display:flex;align-items:center;justify-content:center;border:4px solid var(--border);flex:none;background:#fffdf8}.scorering.good{border-color:var(--good)}.scorering.mid{border-color:var(--mid)}.scorering.bad{border-color:var(--bad)}.scorenum{font-family:var(--serif);font-size:27px;font-weight:600}.scorering.good .scorenum{color:var(--good)}.scorering.mid .scorenum{color:var(--mid)}.scorering.bad .scorenum{color:var(--bad)}.scorelabel{font-family:var(--serif);font-size:19px}.evaluating{text-align:center;padding:44px 0}.spinner{width:32px;height:32px;border:3px solid var(--border);border-top-color:var(--primary);border-radius:50%;margin:0 auto 14px;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.history{margin-top:24px;border-top:1px solid var(--border);padding-top:16px}.history h3{display:flex;align-items:center;gap:10px;margin-top:0}.trend{font-family:var(--sans);font-size:13px;font-weight:500}.trend.good{color:var(--good)}.trend.bad{color:var(--bad)}.historylist{list-style:none;margin:8px 0 0;padding:0;display:flex;flex-direction:column;gap:6px}.historylist li{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:var(--panel2);border-radius:8px}.hpct{font-variant-numeric:tabular-nums;font-weight:500}.hpct.good{color:var(--good)}.hpct.mid{color:var(--mid)}.hpct.bad{color:var(--bad)}.foot{margin-top:30px;text-align:center;font-size:12px;color:var(--faint)}
