:root{--ink:#111827;--muted:#6b7280;--rule:#e5e7eb;--surface:#fff;--panel:#f5f6f7;--correct:#02934a;--wrong:#b91c1c;--hint:#b45309;--code-bg:#0f172a;--code-fg:#e2e8f0;--font-heading:"Lato", system-ui, sans-serif;--font-body:"Open Sans", system-ui, sans-serif;--font-code:"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--space-1:.25rem;--space-2:.5rem;--space-3:.75rem;--space-4:1rem;--space-5:1.5rem;--space-6:2rem;--space-7:3rem;--radius:6px;--measure:72ch}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}[hidden]{display:none!important}body{background:var(--surface);color:var(--ink);font-family:var(--font-body);font-variant-ligatures:none;margin:0;font-size:1rem;line-height:1.6}h1,h2,h3,h4{font-family:var(--font-heading);color:var(--ink);margin:0 0 var(--space-3);font-weight:700;line-height:1.25}h1{font-size:1.9rem}h2{font-size:1.3rem}h3{font-size:1.05rem}p{margin:0 0 var(--space-4)}a{color:var(--ink);text-underline-offset:2px;text-decoration:underline}a:hover{text-decoration-thickness:2px}code,pre,kbd,samp{font-family:var(--font-code);font-size:.9em}pre{padding:var(--space-4);background:var(--code-bg);color:var(--code-fg);border-radius:var(--radius);margin:0;overflow:auto}:not(pre)>code{background:var(--panel);border-radius:3px;padding:0 .25em}.muted{color:var(--muted)}button,.button{font:inherit;padding:var(--space-2) var(--space-4);border-radius:var(--radius);border:1px solid var(--ink);background:var(--surface);color:var(--ink);cursor:pointer;font-weight:600}.button{line-height:1.6;text-decoration:none;display:inline-block}button.primary,.button.primary{background:var(--ink);color:var(--surface)}input,textarea{font:inherit;color:var(--ink);padding:var(--space-2) var(--space-3);border:1px solid var(--rule);border-radius:var(--radius);background:var(--surface)}:focus-visible{outline:2px solid var(--ink);outline-offset:2px}.app{flex-direction:column;min-height:100vh;display:flex}.app-main{flex:1}.page{max-width:900px;padding:var(--space-6) var(--space-4);margin:0 auto}.site-footer{border-top:1px solid var(--rule);color:var(--muted);padding:var(--space-4);text-align:center;font-size:.82rem}.site-footer p{margin:0}.site-footer a{color:var(--muted)}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}button.link,.button.link{padding-inline:var(--space-2);background:0 0;border-color:#0000;font-weight:400;text-decoration:underline}.page--narrow{max-width:calc(var(--measure) + 2 * var(--space-4))}.code-inline{font-family:var(--font-code);background:var(--panel);white-space:nowrap;border-radius:3px;padding:0 .3em;font-weight:500}.start__intro{font-size:1.05rem}.consent{border:1px solid var(--rule);border-radius:var(--radius);padding:var(--space-4) var(--space-5);margin:var(--space-5) 0;background:var(--panel)}.consent ul{margin:0 0 var(--space-4);padding-left:1.2em}.consent li{margin-bottom:var(--space-2)}.consent__check{gap:var(--space-3);cursor:pointer;align-items:flex-start;font-weight:600;display:flex}.consent__check input{flex:none;width:1.15rem;height:1.15rem;margin-top:.2rem}.start__actions{align-items:center;gap:var(--space-3);flex-wrap:wrap;display:flex}.start__error{color:var(--wrong)}.resume{margin-top:var(--space-6);padding-top:var(--space-4);border-top:1px solid var(--rule)}.resume>.link{padding-left:0}.resume__form{align-items:flex-end;gap:var(--space-3);flex-wrap:wrap;display:flex}.resume__form .start__error{flex-basis:100%;margin:0}.resume__input{font-family:var(--font-code);text-transform:uppercase;width:10ch}.your-code{text-align:left}.your-code h2:focus{outline:none}.your-code__code{font-family:var(--font-code);letter-spacing:.08em;margin:var(--space-4) 0 var(--space-2);padding:var(--space-3) var(--space-5);border:1px solid var(--ink);border-radius:var(--radius);font-size:clamp(2.4rem,11vw,3.6rem);font-weight:500;display:inline-block}.your-code__note{font-size:1.1rem;font-weight:600}.test-intro{margin-bottom:var(--space-5)}.test-screen h2:focus,.test-summary h2:focus{outline:none}.test-progress{font-family:var(--font-heading);color:var(--muted);margin-bottom:var(--space-3);font-size:.9rem;font-weight:700}.test-mc{margin:0 0 var(--space-5);border:none;min-width:0;padding:0}.test-mc legend{margin-bottom:var(--space-3);padding:0}.test-mc__option{gap:var(--space-3);padding:var(--space-3) var(--space-4);border:1px solid var(--rule);border-radius:var(--radius);margin-bottom:var(--space-2);cursor:pointer;align-items:flex-start;display:flex}.test-mc__option:has(input:checked){border-color:var(--ink);background:var(--panel)}.test-mc__option input{flex:none;margin-top:.35rem}.test-value__code{margin-bottom:var(--space-4);font-size:.9rem}.test-field{gap:var(--space-1);margin-bottom:var(--space-5);flex-direction:column;font-weight:600;display:flex}.test-field input{font-weight:400;font-family:var(--font-code);max-width:100%}.resume__form .test-field{margin-bottom:0}.test-code{gap:var(--space-3);margin-bottom:var(--space-5);flex-direction:column;display:flex}.test-code__actions{align-items:center;gap:var(--space-3);flex-wrap:wrap;display:flex}.test-code .console{min-height:6rem}.test-nav{align-items:center;gap:var(--space-3);flex-wrap:wrap;display:flex}.test-nav button:disabled{opacity:.45;cursor:default}.test-review{margin:0 0 var(--space-5);border-top:1px solid var(--rule);padding:0;list-style:none}.test-review li{gap:var(--space-3);padding:var(--space-2) 0;border-bottom:1px solid var(--rule);grid-template-columns:auto 1fr auto;align-items:baseline;display:grid}.test-review .link{white-space:nowrap;padding-left:0}.test-review__prompt{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;font-size:.9rem;overflow:hidden}.test-review__state{font-size:.9rem}.test-review__state--missing{color:var(--hint);font-weight:600}.test-error{color:var(--wrong)}.test-note{margin-top:var(--space-4);font-size:.9rem}.test-summary__score{font-size:1.25rem;font-family:var(--font-heading);font-weight:700}@media (width<=600px){.test-review li{grid-template-columns:auto 1fr}.test-review__prompt{display:none}}.overview__header{margin-bottom:var(--space-6)}.overview__meta{gap:var(--space-1) var(--space-3);flex-wrap:wrap;align-items:baseline;display:flex}.overview__code{margin-left:auto;font-size:.9rem}.tick{color:var(--correct);font-weight:700}.unit__back{margin-bottom:var(--space-3);font-size:.9rem}.unit__back a:before{content:"← "}.unit__action{align-items:center;gap:var(--space-4);margin:var(--space-5) 0 var(--space-6);flex-wrap:wrap;display:flex}.unit h2{margin-top:var(--space-6)}.exercise-list{border-top:1px solid var(--rule);counter-reset:ex;margin:0;padding:0;list-style:none}.exercise-list__item{justify-content:space-between;gap:var(--space-4);padding:var(--space-3) 0;border-bottom:1px solid var(--rule);counter-increment:ex;display:flex}.exercise-list__item a:before{content:counter(ex) ". "}.exercise-list__status{color:var(--muted);white-space:nowrap;font-size:.9rem}.exercise-list__item--done .exercise-list__status{color:var(--ink);font-weight:600}.lecture{margin-top:var(--space-5)}.lecture__title{font-size:1.1rem}.lecture__group-title{color:var(--muted);margin:var(--space-4) 0 var(--space-2);font-size:.95rem}.slide{border-bottom:1px solid var(--rule)}.slide summary{cursor:pointer;padding:var(--space-2) 0;font-weight:600}.slide__body{padding:var(--space-2) 0 var(--space-4);overflow-x:auto}.md{max-width:var(--measure)}.md>:last-child{margin-bottom:0}.md h3,.md h4,.md h5{margin-top:var(--space-4)}.md h4{font-size:1rem}.md h5{font-size:.95rem}.md ol,.md ul{margin:0 0 var(--space-4);padding-left:1.6em}.md li,.md li>p{margin-bottom:var(--space-2)}.md li>:last-child{margin-bottom:0}.md-code{margin:0 0 var(--space-4);white-space:pre;font-size:.85rem;line-height:1.5}.md-math{font-style:italic}.md-math--block{text-align:center}.md-figure{margin:0 0 var(--space-4)}.md img{border:1px solid var(--rule);border-radius:var(--radius);max-width:100%;height:auto;display:block}.md-table-wrap{margin:0 0 var(--space-4);overflow-x:auto}.md-table{border-collapse:collapse;font-size:.9rem}.md-table th,.md-table td{padding:var(--space-1) var(--space-3);border-bottom:1px solid var(--rule)}.md-table th{border-bottom-color:var(--ink);font-weight:600}.overview{max-width:1280px;padding:var(--space-6) var(--space-4);margin:0 auto}.readiness{margin-top:var(--space-4);max-width:36rem}.readiness__label{justify-content:space-between;gap:var(--space-3);margin-bottom:var(--space-1);font-size:.9rem;display:flex}.readiness__label>:first-child{font-weight:600}.readiness__bar{background:var(--panel);border:1px solid var(--rule);border-radius:4px;height:8px;overflow:hidden}.readiness__bar>span{background:var(--ink);height:100%;display:block}.columns{gap:var(--space-5);grid-template-columns:repeat(4,minmax(0,1fr));align-items:start;display:grid}.column__title{margin:0 0 var(--space-3);padding-bottom:var(--space-2);border-bottom:2px solid var(--ink);font-size:1rem}.column__list{gap:var(--space-2);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.card{padding:var(--space-3);border:1px solid var(--rule);border-radius:var(--radius);background:var(--surface)}.card__title{margin:0 0 var(--space-1);font-size:.95rem;line-height:1.35}.card__status{color:var(--muted);margin:0;font-size:.85rem}.card__sub{display:block}.card--locked{background:var(--panel)}.card--locked .card__title{color:var(--muted)}.card--done .card__status{color:var(--ink);font-weight:600}.overview__tabs{display:none}@media (width<=1100px) and (width>=768px){.columns{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=767px){.overview__tabs{gap:var(--space-1);border-bottom:1px solid var(--rule);margin-bottom:var(--space-4);display:flex;overflow-x:auto}.overview__tabs button{padding:var(--space-2) var(--space-3);white-space:nowrap;color:var(--muted);background:0 0;border:0;border-bottom:2px solid #0000;border-radius:0}.overview__tabs button[aria-selected=true]{color:var(--ink);border-bottom-color:var(--ink);font-weight:600}.columns{grid-template-columns:minmax(0,1fr)}.column{display:none}.column.is-selected{display:block}.column__title{display:none}}.feedback{--fb:var(--rule);align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-3);border-left:3px solid var(--fb);border-radius:0 var(--radius) var(--radius) 0;background:color-mix(in srgb, var(--fb) 8%, var(--surface));margin:0;display:flex}.feedback--correct{--fb:var(--correct)}.feedback--wrong{--fb:var(--wrong)}.feedback--hint{--fb:var(--hint)}.feedback--neutral{--fb:var(--muted);background:var(--panel)}.feedback__icon{background:var(--fb);width:1.4em;height:1.4em;color:var(--surface);border-radius:50%;flex:none;place-items:center;font-size:.85rem;font-weight:700;line-height:1;display:inline-grid}.feedback__text{flex:1;margin:0}.feedback button{padding:var(--space-1) var(--space-3);font-size:.9rem}.tutor{top:var(--space-4);max-height:calc(100vh - 2 * var(--space-4));align-self:start;position:sticky}.tutor__levels{align-items:center;gap:var(--space-3);display:flex}.tutor__steps{gap:4px;margin:0;padding:0;list-style:none;display:flex}.tutor__steps li{background:var(--rule);border-radius:3px;width:18px;height:6px}.tutor__steps li.is-reached{background:var(--hint)}.tutor__level-text{color:var(--muted);font-size:.85rem}.tutor__log{gap:var(--space-3);flex-direction:column;flex:1;min-height:8rem;margin:0;padding:0;list-style:none;display:flex;overflow-y:auto}.tutor__empty{font-size:.9rem}.tutor__msg{overflow-wrap:anywhere;max-width:100%}.tutor__msg p{margin:0}.tutor__msg>:first-child{margin-top:0}.tutor__msg>:last-child{margin-bottom:0}.tutor__msg--student{max-width:90%;padding:var(--space-2) var(--space-3);background:var(--panel);border-radius:var(--radius);align-self:flex-end}.tutor__msg--tutor{padding-left:var(--space-3);border-left:3px solid var(--hint)}.tutor__msg--pending{font-size:.9rem}.tutor__form{gap:var(--space-2);flex-direction:column;display:flex}.tutor__form textarea{resize:vertical;font-family:var(--font-body)}.tutor__form button{align-self:flex-end}.tutor__form button:disabled{opacity:.5;cursor:default}.exercise-tutor__head{justify-content:space-between;align-items:baseline;display:flex}.exercise-tutor__head h2{margin:0}.lecture-page{grid-template-columns:minmax(0, var(--measure));justify-content:center;gap:var(--space-6);max-width:1280px;padding:var(--space-6) var(--space-4);margin:0 auto;display:grid}.lecture-page--tutor{grid-template-columns:minmax(0, var(--measure)) minmax(300px, 380px)}.lecture-page__meta{margin-top:calc(-1 * var(--space-2))}.lecture-page .lecture__group-title{font-size:1rem}.slide--active>summary{color:var(--hint)}.slide__actions{margin:var(--space-3) 0 0}.lecture-page .tutor{gap:var(--space-4);border-left:1px solid var(--rule);padding-left:var(--space-4);flex-direction:column;display:flex}.lecture-page .tutor[hidden]{display:none}.tutor__context{margin:0;font-size:.9rem}@media (width<=900px){.lecture-page--tutor{grid-template-columns:minmax(0,1fr)}.lecture-page .tutor{background:var(--surface);border-left:0;border-top:1px solid var(--rule);max-height:60vh;padding:var(--space-4);z-index:10;position:fixed;inset:auto 0 0;box-shadow:0 -4px 16px #00000014}}
