:root{--paper:#f3ecdd;--panel:#fcf8ee;--white:#fffdf7;--ink:#241d13;--ink-soft:#756a59;--line:#ddd2bd;--line-strong:#b9ac93;--pen:#d93a2b;--pen-deep:#b02a1d;--pen-soft:#fae9e3;--pass:#3e7c59;--pass-soft:#e3efe5;--amber:#c98a1b;--amber-soft:#f7ecd3;--code:#262017;--code-ink:#f1e9d8;--radius:14px;--shadow:0 1px 2px #241d130d, 0 14px 34px -18px #241d1347;--font-display:"Fraunces", Georgia, serif;--font-body:"Instrument Sans", system-ui, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, monospace}*{box-sizing:border-box}html{scroll-behavior:smooth}body{min-height:100vh;color:var(--ink);font-family:var(--font-body);background:repeating-linear-gradient(0deg, transparent 0 27px, #241d130d 27px 28px), var(--paper);margin:0}::selection{background:var(--pen);color:#fff}button,input,select,textarea{font:inherit}button{border:0}:focus-visible{outline-offset:2px;outline:3px solid #d93a2b59}.app-shell{width:min(1900px,100% - 32px);margin:24px auto}.hero{grid-template-columns:minmax(0,1.15fr) minmax(330px,.85fr);align-items:stretch;gap:18px;margin-bottom:18px;display:grid}.hero-main,.control-panel,.results-panel{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);box-shadow:var(--shadow)}.hero-main{min-height:300px;padding:clamp(24px,4vw,52px);position:relative;overflow:hidden}.control-panel:before,.results-panel:before{border-radius:var(--radius) var(--radius) 0 0;background:var(--pen);content:"";height:4px;position:absolute;inset:0 0 auto}.control-panel,.results-panel{position:relative}.eyebrow{color:var(--pen-deep);font-family:var(--font-mono);letter-spacing:.12em;text-transform:uppercase;align-items:center;gap:10px;margin:0 0 18px;font-size:.72rem;font-weight:600;display:flex}.eyebrow:before{background:var(--pen);content:"";width:24px;height:2px}.hero-title{max-width:820px;font-family:var(--font-display);letter-spacing:-.02em;text-wrap:balance;margin:0;font-size:clamp(2.7rem,6.5vw,6rem);font-weight:600;line-height:.98}.hero-title em{color:var(--pen);font-style:italic}.hero-copy{max-width:700px;color:var(--ink-soft);margin:22px 0 0;font-size:clamp(1rem,1.4vw,1.15rem);line-height:1.65}.pen-marks{align-items:center;gap:10px;margin-top:32px;display:flex}.pen-marks span{background:var(--line-strong);border-radius:3px;width:13px;height:32px;transform:skew(-14deg)}.pen-marks span:nth-child(2n){background:var(--pen)}.pen-marks span:nth-child(3n){background:var(--ink)}.pen-marks span:last-child{background:var(--pen);border-radius:50%;width:34px;height:34px;transform:none}.run-panel{border:1px solid var(--ink);border-radius:var(--radius);background:var(--ink);color:var(--code-ink);box-shadow:var(--shadow);flex-direction:column;justify-content:space-between;padding:24px;display:flex}.run-title{border-bottom:1px solid #f1e9d82e;justify-content:space-between;align-items:flex-start;gap:14px;padding-bottom:18px;display:flex}.run-title h2,.panel-title h2{font-family:var(--font-display);margin:0;font-size:1.5rem;font-weight:600;line-height:1.05}.status-pill{color:var(--code-ink);font-family:var(--font-mono);text-transform:uppercase;border:1px solid #f1e9d852;border-radius:999px;flex:none;align-items:center;gap:7px;padding:6px 11px;font-size:.7rem;font-weight:600;display:inline-flex}.status-pill:before{background:var(--pen);content:"";border-radius:50%;width:7px;height:7px}.meter-grid{grid-template-columns:repeat(2,1fr);gap:10px;margin:18px 0;display:grid}.meter{background:#f1e9d80d;border:1px solid #f1e9d833;border-radius:10px;min-height:98px;padding:14px}.meter b{color:#f1e9d89e;font-family:var(--font-mono);text-transform:uppercase;font-size:.7rem;font-weight:500;display:block}.meter strong{font-family:var(--font-display);color:var(--code-ink);margin-top:8px;font-size:2.2rem;font-weight:600;line-height:1;display:block}.progress-track{background:#f1e9d814;border:1px solid #f1e9d84d;border-radius:999px;height:12px;overflow:hidden}.progress-fill{background:repeating-linear-gradient(45deg, var(--pen) 0 10px, var(--pen-deep) 10px 20px);width:0%;height:100%;transition:width .26s}.status-text{color:#f1e9d8b3;min-height:44px;font-family:var(--font-mono);margin:12px 0 0;font-size:.8rem;line-height:1.55}.eta-text{color:var(--pen);font-family:var(--font-mono);margin:4px 0 0;font-size:.78rem;font-weight:600;line-height:1.5}.layout-grid{grid-template-columns:390px minmax(0,1fr);align-items:start;gap:18px;display:grid}.control-panel,.results-panel{overflow:hidden}.panel-title{border-bottom:1px solid var(--line);background:var(--white);justify-content:space-between;align-items:center;gap:14px;padding:17px 20px;display:flex}.panel-code{color:var(--pen-deep);font-family:var(--font-mono);text-transform:uppercase;font-size:.7rem;font-weight:600}.form-stack{gap:16px;padding:20px;display:grid}.field{gap:7px;display:grid}label{color:var(--ink-soft);font-family:var(--font-mono);letter-spacing:.05em;text-transform:uppercase;font-size:.7rem;font-weight:600}input,select,textarea{border:1.5px solid var(--line-strong);width:100%;min-height:44px;color:var(--ink);background:var(--white);border-radius:10px;outline:none;padding:10px 13px;transition:border-color .15s,box-shadow .15s}textarea{resize:vertical;min-height:128px;line-height:1.55}input:focus,select:focus,textarea:focus{border-color:var(--pen);box-shadow:0 0 0 4px #d93a2b24}.hint{color:var(--ink-soft);font-size:.78rem;line-height:1.55}.dropzone{border:1.5px dashed var(--line-strong);background:var(--white);text-align:center;cursor:pointer;border-radius:10px;place-items:center;min-height:172px;padding:20px;transition:transform .16s,border-color .16s,background .16s;display:grid}.dropzone:hover,.dropzone.is-dragging{border-color:var(--pen);background:var(--pen-soft);transform:translate(-1px,-1px)}.drop-icon{border:2px solid var(--pen);background:var(--pen-soft);width:56px;height:56px;color:var(--pen-deep);font-family:var(--font-mono);border-radius:50%;place-items:center;margin:0 auto 12px;font-size:1.15rem;font-weight:700;display:grid}.dropzone strong{font-family:var(--font-display);font-size:1.15rem;font-weight:600;display:block}.dropzone .hint{margin-top:6px;display:block}.actions{grid-template-columns:1fr 1fr;gap:12px;padding-top:4px;display:grid}.history-block{border-top:1px solid var(--line)}.history-clear-all{border:1px solid var(--line);color:var(--ink-soft);font-family:var(--font-mono);letter-spacing:.04em;cursor:pointer;background:0 0;border-radius:8px;padding:5px 10px;font-size:.64rem;font-weight:600;transition:color .14s,border-color .14s}.history-clear-all:hover:not(:disabled){border-color:var(--pen);color:var(--pen)}.history-clear-all:disabled{cursor:not-allowed;opacity:.4}.history-usage{gap:6px;padding:12px 20px 0;display:grid}.history-usage-label{color:var(--ink-soft);font-family:var(--font-mono);font-size:.66rem}.history-meter{background:#f1e9d81f;border-radius:999px;height:6px;overflow:hidden}.history-meter-fill{background:var(--pen);border-radius:999px;width:0%;height:100%;transition:width .3s}.history-list{gap:8px;max-height:260px;margin:0;padding:12px 20px 20px;list-style:none;display:grid;overflow-y:auto}.history-item{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px;display:grid}.history-open{border:1px solid var(--line);background:var(--white);min-width:0;color:inherit;text-align:left;cursor:pointer;border-radius:10px;gap:3px;padding:9px 12px;transition:border-color .14s;display:grid}.history-open:hover{border-color:var(--pen)}.history-open strong{color:var(--ink);text-overflow:ellipsis;white-space:nowrap;font-size:.82rem;font-weight:700;overflow:hidden}.history-open span{color:var(--ink-soft);font-family:var(--font-mono);font-size:.66rem}.history-del{border:1px solid var(--line);color:var(--ink-soft);font-family:var(--font-mono);cursor:pointer;background:0 0;border-radius:8px;padding:6px 8px;font-size:.62rem;transition:color .14s,border-color .14s}.history-del:hover{border-color:var(--pen);color:var(--pen)}.history-empty{color:var(--ink-soft);font-family:var(--font-mono);padding:4px 2px;font-size:.72rem;line-height:1.5}.btn{cursor:pointer;min-height:48px;font-family:var(--font-body);letter-spacing:.01em;border-radius:10px;padding:12px 16px;font-size:.95rem;font-weight:700;transition:transform .15s,box-shadow .15s,background .15s,color .15s}.btn:hover:not(:disabled){transform:translateY(-2px)}.btn:disabled{cursor:not-allowed;opacity:.5}.btn-primary{border:1px solid var(--pen-deep);background:var(--pen);color:#fff;box-shadow:0 3px 0 var(--pen-deep)}.btn-primary:hover:not(:disabled){background:var(--pen-deep);box-shadow:0 5px #8f2217}.btn-secondary{border:1.5px solid var(--ink);background:var(--white);color:var(--ink);box-shadow:0 3px 0 var(--ink)}.btn-secondary:hover:not(:disabled){background:var(--ink);color:var(--paper);box-shadow:0 5px #0e0b06}.hidden{display:none!important}.table-wrap{width:100%;overflow-x:auto}table{border-collapse:collapse;background:var(--panel);width:100%;min-width:1200px}th,td{border-bottom:1px solid var(--line);text-align:left;vertical-align:top;padding:14px}th{z-index:1;border-bottom:2px solid var(--pen);background:var(--white);color:var(--ink);font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;font-size:.68rem;font-weight:600;position:sticky;top:0}td{color:var(--ink-soft);font-size:.9rem;line-height:1.5}tbody tr:hover{background:#d93a2b0a}.mono{font-family:var(--font-mono);font-size:.78rem}.student-name{color:var(--ink);font-weight:700}.badge{border:1px solid var(--line-strong);background:var(--white);min-width:58px;color:var(--ink);font-family:var(--font-mono);border-radius:999px;justify-content:center;align-items:center;padding:5px 10px;font-size:.7rem;font-weight:600;display:inline-flex}.score{border:2px solid var(--ink);background:var(--white);width:52px;height:52px;box-shadow:inset 0 0 0 3px var(--panel), 0 1px 3px #241d1340;color:var(--ink);font-family:var(--font-display);border-radius:50%;place-items:center;font-size:1.3rem;font-weight:700;line-height:1;display:inline-grid;transform:rotate(-2deg)}.score.good{border-color:var(--ink);background:var(--pass);color:#fff}.score.warn{border-color:var(--ink);background:var(--amber);color:#fff}.score.bad{border-color:var(--ink);background:var(--pen);color:#fff}.ai-badge{border:1px solid var(--line-strong);min-width:58px;font-family:var(--font-mono);border-radius:999px;justify-content:center;align-items:center;padding:5px 10px;font-size:.7rem;font-weight:600;display:inline-flex}.ai-badge.clean{background:var(--pass);color:#fff}.ai-badge.suspect{background:var(--amber);color:#fff}.ai-badge.detected{background:var(--pen);color:#fff}.admin-stack{padding:16px 20px}body.non-admin #nusaKeyLabel{color:var(--pen);font-weight:700}body.non-admin #nusaKey{border-color:var(--pen)}body.non-admin #nusaKeyHint{display:block}.vault-row{align-items:center;gap:10px;margin-top:8px;display:flex}.btn-vault{min-height:36px;padding:6px 12px;font-size:.8rem}.analysis-cell{white-space:pre-wrap;color:var(--ink-soft);line-height:1.6}.code-block{border:1px solid var(--ink);background:var(--code);border-radius:10px;overflow:hidden;box-shadow:0 10px 20px -14px #241d1380}.code-block-head{border-bottom:1px solid #f1e9d824;justify-content:space-between;align-items:center;gap:10px;padding:8px 12px;display:flex}.code-block-head span{color:#ff9d8e;font-family:var(--font-mono);letter-spacing:.07em;text-transform:uppercase;font-size:.66rem;font-weight:600}.code-copy-btn{color:var(--code-ink);font-family:var(--font-mono);text-transform:uppercase;cursor:pointer;background:0 0;border:1px solid #f1e9d859;border-radius:7px;padding:4px 10px;font-size:.66rem;font-weight:600;transition:background .14s}.code-copy-btn:hover:not(:disabled){background:var(--pen);border-color:var(--pen)}.code-fix{white-space:pre-wrap;max-width:560px;color:var(--code-ink);font-family:var(--font-mono);margin:0;font-size:.78rem;line-height:1.55}.code-block .code-fix{white-space:pre;max-width:none;padding:12px;overflow-x:auto}.empty{text-align:center;padding:64px 22px}.empty strong{color:var(--ink);font-family:var(--font-display);margin-bottom:8px;font-size:1.25rem;font-weight:600;display:block}.toast{z-index:5;border:1px solid var(--ink);border-left:4px solid var(--pen);background:var(--ink);max-width:420px;color:var(--code-ink);box-shadow:var(--shadow);border-radius:12px;padding:14px 16px;font-size:.92rem;line-height:1.5;position:fixed;bottom:18px;right:18px}.topbar{justify-content:flex-end;align-items:center;gap:14px;width:min(1500px,100% - 32px);margin:24px auto 0;display:flex}.user-chip{border:1px solid var(--line-strong);background:var(--white);font-family:var(--font-mono);text-transform:uppercase;border-radius:999px;align-items:center;gap:8px;padding:6px 14px;font-size:.72rem;font-weight:600;display:inline-flex}.user-chip:before{background:var(--pass);content:"";border-radius:50%;width:7px;height:7px}.btn-small{min-height:38px;padding:8px 14px;font-size:.8rem}.login-wrap{place-items:center;min-height:100vh;padding:24px;display:grid}.login-panel{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);width:min(480px,100%);box-shadow:var(--shadow);padding:clamp(28px,5vw,44px);position:relative}.login-panel:before{border-radius:var(--radius) var(--radius) 0 0;background:var(--pen);content:"";height:4px;position:absolute;inset:0 0 auto}.login-title{font-family:var(--font-display);letter-spacing:-.02em;margin-top:4px;font-size:clamp(2.2rem,7vw,3.6rem);font-weight:600;line-height:1}.login-copy{margin-top:14px;font-size:1rem}.login-error{border:1px solid var(--pen);background:var(--pen-soft);color:var(--pen-deep);border-radius:10px;margin:0;padding:11px 13px;font-size:.88rem;font-weight:700}.login-hint{border-top:1px solid var(--line);margin:18px 0 0;padding-top:14px}.login-hint code{font-family:var(--font-mono);color:var(--pen-deep)}@keyframes rise{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}.hero-main>*{animation:.55s both rise}.hero-main>:nth-child(2){animation-delay:70ms}.hero-main>:nth-child(3){animation-delay:.14s}.hero-main>:nth-child(4){animation-delay:.21s}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}@media (max-width:1100px){.hero,.layout-grid{grid-template-columns:1fr}.run-panel{min-height:260px}}@media (max-width:720px){.app-shell{width:min(100% - 20px,1500px);margin:10px auto}.hero-main,.run-panel,.form-stack{padding:16px}.panel-title,.run-title,.field-row,.actions,.meter-grid{grid-template-columns:1fr}.panel-title,.run-title{flex-direction:column;align-items:flex-start}}
