:root{--ink:#11131d;--muted:#606474;--line:#daddE6;--accent:#30229c;--wash:#f7f7fb;--mono:"SFMono-Regular",Consolas,"Liberation Mono",monospace}*{box-sizing:border-box}body{margin:0;background:white;color:var(--ink);font:16px/1.55 system-ui,-apple-system,sans-serif}.shell{max-width:1450px;margin:auto;padding:0 clamp(16px,5vw,72px) 36px}.top{position:sticky;top:0;background:white;z-index:3;display:flex;gap:18px;align-items:center;justify-content:space-between;min-height:79px;border-bottom:1px solid var(--line)}.top strong{font-size:25px;white-space:nowrap;letter-spacing:-.06em}.heading{font-size:clamp(15px,2vw,22px);border-left:1px solid var(--line);padding-left:18px}.grow{flex:1}.row{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.between{justify-content:space-between}.timer{font-variant-numeric:tabular-nums;font-weight:700}.muted,small{color:var(--muted)}.status{font-size:.85rem}.tabs{display:flex;gap:14px;overflow:auto;border-bottom:1px solid var(--line);white-space:nowrap}.tabs button{border-radius:0;border:0;background:white;color:var(--ink);border-bottom:3px solid transparent;padding:13px 10px}.tabs button.current{border-color:var(--accent);color:var(--accent)}.tabs .done{color:var(--accent);font-weight:bold}.question{scroll-margin-top:96px;padding:25px 2px}.question h2{font-size:clamp(18px,2.3vw,27px);margin:0 0 7px;line-height:1.25;letter-spacing:-.025em}.question p{margin:0 0 16px;white-space:pre-wrap}.choice,.wide{border-bottom:1px solid var(--line)}.options{display:grid;grid-template-columns:repeat(auto-fit,minmax(145px,1fr));gap:12px;margin:12px 0}.options label{margin:0;display:flex;align-items:center;gap:10px;font-weight:500}.options input{width:19px;height:19px;accent-color:var(--accent);margin:0}.code-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:clamp(20px,5vw,60px);border-bottom:1px solid var(--line)}.studio{border:1px solid var(--line);border-radius:8px;overflow:hidden;margin:14px 0;background:#f9f9fb;--code:#22233b;--gutter:#ededf2;--keyword:#30229c;--string:#a32d50;--comment:#5e6472;--number:#5441b4}.studio.dark{background:#202126;color:#f4f4f7;border-color:#33343c;--code:#f4f4f7;--gutter:#24252c;--keyword:#b9acff;--string:#f0bd9d;--comment:#abb0bf;--number:#cbd6ff}.studio-bar{font:600 13px system-ui;background:var(--gutter);padding:9px 12px;border-bottom:1px solid #8c8c9b33;display:flex;gap:12px;align-items:center}.studio-bar span:last-child{opacity:.75}.editing{position:relative;height:171px}.editing textarea,.syntax,.lines{font:14px/22px var(--mono);tab-size:4;margin:0;border:0;border-radius:0;white-space:pre;overflow:auto;padding:10px 12px;position:absolute;height:100%;top:0}.editing textarea,.syntax{left:42px;width:calc(100% - 42px)}.editing textarea{resize:none;background:transparent;color:transparent;caret-color:var(--code);-webkit-text-fill-color:transparent;outline-offset:-2px}.editing textarea::selection{background:#7968d75c}.syntax,.lines{pointer-events:none;scrollbar-width:none}.syntax{color:var(--code)}.lines{width:42px;text-align:right;background:var(--gutter);color:inherit;opacity:.78}.kw{color:var(--keyword);font-weight:600}.str{color:var(--string)}.num{color:var(--number)}.com{color:var(--comment)}button,input,textarea,select{font:inherit}button{cursor:pointer;color:var(--accent);background:white;border:1px solid var(--line);border-radius:7px;padding:7px 12px;font-weight:650}button.primary{background:var(--accent);color:white;border-color:var(--accent)}button.outline{border-color:var(--accent)}button:disabled{opacity:.5;cursor:default}button:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:2px solid var(--accent);outline-offset:2px}input:not([type=radio]),textarea,select{width:100%;display:block;padding:8px 10px;border:1px solid var(--line);border-radius:7px;margin:4px 0;background:white;color:var(--ink)}textarea{min-height:52px;resize:vertical}.test-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.2fr);gap:12px;margin-top:12px}.test-grid label{margin:0}.console{margin:4px 0 0;background:#f0f0f4;border-radius:7px;padding:8px;min-height:49px;font:13px/1.45 var(--mono);white-space:pre-wrap;overflow-wrap:anywhere;overflow:auto;max-height:260px}.console table{border-collapse:collapse;font:inherit;text-align:left}.console td,.console th{padding:4px 7px;border:1px solid var(--line)}.console th{background:white}.panel{padding:16px;border:1px solid var(--line);border-radius:10px;margin-bottom:12px}.teacher-grid{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);gap:22px}.tools{border-block:1px solid var(--line);padding:13px 0;margin:16px 0}.title{font-size:clamp(26px,4vw,40px);letter-spacing:-.04em;margin:20px 0 4px}.badge{color:var(--accent);background:#f0eefb;border-radius:5px;padding:3px 6px;font-size:12px;font-weight:750}.prompt{white-space:pre-wrap;overflow-wrap:anywhere}.graph{display:grid;grid-template-columns:1fr 1fr;gap:20px}.graph img,.graph svg{max-width:100%;max-height:400px}.flow-svg{width:100%;max-height:580px;background:#fafaff;border:1px solid var(--line);border-radius:8px}.danger{color:#9b263e}.subfoot{padding:18px 0;border-top:1px solid var(--line)}label{display:block;margin:9px 0;font-weight:550}.fieldgroup{display:grid;grid-template-columns:1fr 1fr;gap:12px}.case{background:var(--wash)}pre{white-space:pre-wrap;overflow-wrap:anywhere}dialog{width:min(440px,92%);border:1px solid var(--line);border-radius:14px;padding:22px}dialog::backdrop{background:#19162e66}.notice{min-height:1.3em}.kicker{color:var(--accent);font-size:12px;font-weight:750;letter-spacing:.1em;text-transform:uppercase}@media(max-width:780px){.top{gap:8px;flex-wrap:wrap;min-height:0;padding:10px 0}.heading{padding-left:8px}.top strong{font-size:21px}.top .status{display:none}.code-grid,.teacher-grid,.graph{grid-template-columns:1fr}.question{padding:18px 0;scroll-margin-top:108px}.options{grid-template-columns:1fr}.code-grid .question+.question{border-top:1px solid var(--line)}}

#mobile-progress{display:none}@media(max-width:780px){#mobile-progress{display:inline}}
.grade-bar{position:sticky;top:80px;z-index:2;background:#fff;display:flex;flex-wrap:wrap;gap:8px;justify-content:space-between;align-items:center;padding:9px 0;margin-bottom:12px;border-bottom:1px solid var(--line)}.grade-bar+article{margin-top:8px}[data-mark]{max-width:135px}.terminal-input{margin-top:8px}.terminal-input input{font-family:var(--mono)}@media(max-width:780px){.grade-bar{position:static}}
#exam-content{display:grid;gap:30px;padding:19px 0 32px}.question-card{padding:clamp(16px,3vw,32px);border:1px solid var(--line);border-radius:14px;background:#fff}.question-meta{display:flex;align-items:center;gap:12px;margin-bottom:10px}.question-card h2{white-space:pre-wrap;overflow-wrap:anywhere;margin-bottom:18px}.question-card h3,.rubric h3{font-size:14px;margin:0 0 5px}.question-instruction{border-left:3px solid #d7d0fa;padding:8px 12px;background:var(--wash);border-radius:0 6px 6px 0}.question-instruction p,.rubric p{margin:0;white-space:pre-wrap;overflow-wrap:anywhere}.question-answer{margin-top:20px}.rubric{margin-top:20px;padding:12px 0 0;border-top:1px solid var(--line)}.rubric p{color:var(--muted)}.python-workspace{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;align-items:stretch;margin:10px 0 14px}.python-workspace .studio{margin:0;display:grid;grid-template-rows:auto minmax(230px,1fr)}.python-workspace .editing{height:auto}.gui-preview{border:1px solid var(--line);border-radius:8px;overflow:hidden;min-width:0;--gutter:#f0eefb}.gui-body{padding:12px;max-height:500px;overflow:auto}.tk-window{max-width:100%;min-height:120px;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:#f9f9fc}.tk-title{padding:6px 10px;border-bottom:1px solid var(--line);background:#ece9fa;font-weight:700}.tk-group{display:flex;flex-direction:column;align-items:center;gap:5px;padding:7px;min-width:0}.tk-grid{display:grid;justify-content:center;justify-items:center}.tk-widget{max-width:100%;overflow-wrap:anywhere}.tk-widget input{max-width:220px}.tk-widget span{white-space:pre-wrap}@media(max-width:740px){.python-workspace{grid-template-columns:1fr}#exam-content{gap:18px}.question-card{padding:16px}}
.shell.review-shell{max-width:1680px;padding-inline:clamp(16px,4vw,64px)}.review-filters{max-width:680px}.delivery-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(310px,100%),1fr));gap:12px}.review-code{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);gap:20px;align-items:stretch}.review-code>div:first-child{display:grid;min-width:0}.review-code .studio{margin:0;display:grid;grid-template-rows:auto minmax(230px,1fr)}.review-code .editing{height:auto}.review-run{display:grid;align-content:start;gap:10px;min-width:0}.review-run .terminal-input{margin:0}.review-run .test-grid{grid-template-columns:1fr;margin:0}.review-run .gui-body:has(>p){max-height:90px}.review-run .gui-body>p{margin:0}#grade-exam>.panel{padding:clamp(14px,2.3vw,28px)}#grade-exam h2{font-size:1.18rem}#grade-exam svg,#grade-exam img{max-width:100%}@media(max-width:800px){.review-code{grid-template-columns:1fr}}
.studio{resize:vertical;display:grid;grid-template-rows:auto minmax(0,1fr);min-height:208px}.studio .editing{height:auto}.python-workspace .studio,.review-code .studio{min-height:269px}.gui-preview{resize:vertical;display:grid;grid-template-rows:auto minmax(0,1fr);min-height:125px}.gui-preview .gui-body{overflow:auto}.template-list{display:grid;gap:8px;margin:12px 0}.template-list button{text-align:left;display:grid;gap:3px}.template-list small{font-weight:400;white-space:normal}
.question-layout{display:grid;grid-template-columns:clamp(172px,17vw,224px) minmax(0,1fr);gap:clamp(16px,2.4vw,32px);align-items:start;margin-top:14px}.question-main{min-width:0;grid-column:2}.question-index{position:sticky;top:94px;grid-column:1;grid-row:1;max-height:calc(100dvh - 110px);overflow:auto;padding:12px;border:1px solid var(--line);border-radius:12px;background:#fff}.question-index h2{display:flex;justify-content:space-between;align-items:center;margin:0 0 10px;font-size:15px}.question-index h2 span{font-size:12px;padding:2px 8px;border-radius:99px;background:var(--wash);color:var(--muted)}.question-index ol{list-style:none;padding:0;margin:0;display:grid;gap:5px}.question-index button{width:100%;display:flex;gap:8px;align-items:center;text-align:left;background:#fff;border-color:transparent;padding:6px;color:var(--ink);line-height:1.2}.question-index button:hover,.question-index button[aria-current]{background:#f2efff;border-color:#ddd6fa}.question-index strong,.question-index small{display:block}.question-index strong{font-size:13px}.question-index small{font-size:11px;margin-top:3px}.index-number{display:grid;place-items:center;min-width:29px;height:29px;border-radius:7px;background:#eee9ff;color:var(--accent);font-size:12px;font-variant-numeric:tabular-nums}.review-question{scroll-margin-top:145px}@media(max-width:950px){.question-layout{grid-template-columns:minmax(0,1fr);gap:10px}.question-main,.question-index{grid-column:1}.question-index{position:static;max-height:none}.question-index ol{display:flex;overflow:auto;padding-bottom:4px}.question-index li{flex:none}.question-index button{padding:5px 8px}}
.bank-filters{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.bank-card .prompt{overflow-wrap:anywhere}.bank-card .row{gap:6px}.bank-card button{font-size:.84rem}#bank-results{margin-bottom:16px}@media(max-width:550px){.bank-filters{grid-template-columns:1fr}}

.shell.student-shell {
  max-width: none;
  padding-inline: clamp(16px, 2.5vw, 56px);
}

.answer-table{overflow-x:auto}
.answer-table table{width:100%;min-width:460px;table-layout:fixed;border-collapse:collapse}
.answer-table th,.answer-table td{padding:8px;border:1px solid #d5dce8;text-align:left;vertical-align:top;overflow-wrap:anywhere;white-space:pre-wrap}
.answer-table th{background:#f1f4fa}
.answer-table th:first-child{width:24%}
.answer-table textarea{display:block;width:100%;min-height:62px;resize:vertical}
