*,*:before,*:after{box-sizing:border-box}html{font-size:var(--font-size-base)}body{margin:0;min-height:100vh;display:flex;flex-direction:column;font-family:system-ui,-apple-system,Segoe UI,sans-serif;background:var(--color-background);color:var(--color-text);line-height:1.6;-webkit-font-smoothing:antialiased}a{color:var(--color-primary)}.top-bar{background:var(--color-surface);border-bottom:3px solid var(--color-accent);padding:.75rem 1rem;display:flex;justify-content:space-between;align-items:center;gap:.75rem;flex-wrap:wrap;position:sticky;top:0;z-index:10}.top-bar .brand{font-weight:700;color:var(--color-primary-dark);text-decoration:none;font-size:1rem;display:inline-flex;align-items:center;gap:.5rem}.top-bar .brand-logo{height:2rem;width:auto;max-width:10rem;display:block}.top-bar .user-menu{display:flex;align-items:center;gap:.75rem}.top-bar .user-name{font-size:.85rem;color:var(--color-text-muted)}.top-bar .logout-button{background:transparent;color:var(--color-text-muted);border:1px solid var(--color-border);padding:.35rem .75rem;border-radius:var(--radius-small);font-size:.8rem;cursor:pointer}.top-bar .logout-button:hover{color:var(--color-danger);border-color:var(--color-danger)}.locale-switcher{display:inline-flex;border:1px solid var(--color-border);border-radius:var(--radius-small);overflow:hidden;margin:0}.locale-switcher .locale-option{background:transparent;color:var(--color-text-muted);border:0;padding:.3rem .6rem;font-size:.8rem;cursor:pointer}.locale-switcher .locale-option[aria-pressed=true]{background:var(--color-primary);color:var(--color-on-primary, #ffffff)}main{flex:1;width:100%;max-width:var(--content-max-width);margin:0 auto;padding:1.25rem 1rem 3rem}.page-title{font-size:1.35rem;line-height:1.3;margin:.5rem 0 .25rem}.page-subtitle{color:var(--color-text-muted);font-size:.9rem;margin:0 0 1.25rem}.breadcrumb{font-size:.85rem;color:var(--color-text-muted);margin:0 0 .5rem}.breadcrumb a{color:var(--color-primary);text-decoration:none}.breadcrumb a:hover{text-decoration:underline}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-base);padding:1.25rem}.auth-card{max-width:24rem;margin:2rem auto 0;padding:1.5rem}label{display:block;font-size:.875rem;font-weight:600;margin-bottom:.25rem}input[type=text],input[type=password],input[type=email]{width:100%;padding:.55rem .75rem;border:1px solid var(--color-border);border-radius:var(--radius-small);font-size:1rem;margin-bottom:1rem;background:var(--color-surface);color:var(--color-text)}input:focus-visible,button:focus-visible,a:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.field-error{color:var(--color-danger);font-size:.8rem;margin:-.75rem 0 1rem}.status-message{background:var(--color-success-soft);border:1px solid var(--color-success);color:var(--color-success);padding:.6rem .9rem;border-radius:var(--radius-small);margin-bottom:1rem;font-size:.9rem}.checkbox-row{display:flex;align-items:center;gap:.5rem;margin-bottom:1rem;font-size:.9rem}button[type=submit]{width:100%;padding:.65rem 1rem;background:var(--color-primary);color:var(--color-primary-contrast);border:none;border-radius:var(--radius-small);font-size:1rem;cursor:pointer}button[type=submit]:hover{background:var(--color-primary-dark)}.progress-summary{margin:0 0 1.5rem}.progress-summary .progress-text{font-size:.9rem;color:var(--color-text-muted);margin:0 0 .4rem}.progress-track{height:.5rem;background:var(--color-border);border-radius:999px;overflow:hidden}.progress-fill{height:100%;background:var(--color-primary);border-radius:999px;transition:width .4s ease}.instructor-letter{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-base);padding:1rem 1.25rem;margin:0 0 1.5rem}.instructor-letter summary{cursor:pointer;font-weight:600;color:var(--color-primary)}.instructor-letter[open] summary{margin-bottom:.75rem}.instructor-letter-body{font-size:.95rem;line-height:1.6}.instructor-letter-body>:first-child{margin-top:0}.instructor-letter-body>:last-child{margin-bottom:0}.congrats{background:var(--color-success-soft);border:1px solid var(--color-success);border-radius:var(--radius-base);padding:1rem 1.25rem;margin:0 0 1.5rem}.congrats h2{margin:0 0 .35rem;font-size:1.1rem;color:var(--color-success)}.congrats p{margin:0;font-size:.9rem}.module-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.75rem}.module-card{display:flex;align-items:center;gap:.9rem;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-base);padding:.9rem 1rem}.module-card .module-status-icon{flex-shrink:0;width:2.1rem;height:2.1rem;border-radius:999px;display:flex;align-items:center;justify-content:center;font-size:.95rem}.module-card .module-info{min-width:0}.module-card .module-number{display:block;font-size:.75rem;text-transform:uppercase;letter-spacing:.04em;color:var(--color-text-muted)}.module-card .module-title{font-weight:600;font-size:.98rem;text-decoration:none;color:var(--color-text)}.module-card .module-meta{display:block;font-size:.8rem;color:var(--color-text-muted);margin-top:.15rem}.module-card.is-approved .module-status-icon{background:var(--color-success-soft);color:var(--color-success)}.module-card.is-available .module-status-icon{background:var(--color-primary-soft);color:var(--color-primary-dark)}.module-card.is-current{border-color:var(--color-primary);box-shadow:0 0 0 1px var(--color-primary)}.module-card.is-current .module-title{color:var(--color-primary-dark)}.module-card.is-locked{opacity:.6}.module-card.is-locked .module-status-icon{background:var(--color-code-background);color:var(--color-locked)}.content-section{margin:0 0 1.5rem}.content-section>h2{font-size:1.05rem;margin:0 0 .6rem}.item-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.5rem}.item-list a.item-link{display:flex;align-items:center;gap:.7rem;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-small);padding:.7rem .9rem;text-decoration:none;color:var(--color-text);font-size:.95rem}.item-list a.item-link:hover{border-color:var(--color-primary)}.item-list .item-kind{flex-shrink:0;font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--color-primary-dark);background:var(--color-primary-soft);border-radius:999px;padding:.15rem .55rem}.evaluation-note{background:var(--color-primary-soft);border:1px solid var(--color-primary);border-radius:var(--radius-small);color:var(--color-primary-dark);font-size:.88rem;padding:.6rem .9rem;margin:1rem 0 0}.starter-files{margin:1.5rem 0 0}.starter-files h2{font-size:1rem;margin:0 0 .5rem}.starter-files a{word-break:break-all}.prose{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-base);padding:1.25rem 1rem;overflow-wrap:break-word}.prose>:first-child{margin-top:0}.prose>:last-child{margin-bottom:0}.prose h1{font-size:1.4rem;line-height:1.3}.prose h2{font-size:1.2rem;margin-top:1.75em}.prose h3{font-size:1.05rem}.prose code{background:var(--color-code-background);border:1px solid var(--color-border);border-radius:.3em;padding:.1em .35em;font-size:.88em;font-family:ui-monospace,Cascadia Code,Consolas,monospace}.prose pre{background:var(--color-code-background);border:1px solid var(--color-border);border-radius:var(--radius-small);padding:.9rem 1rem;overflow-x:auto;line-height:1.5}.prose pre code{background:transparent;border:none;padding:0;font-size:.85rem}.prose pre.mermaid{background:var(--color-surface);text-align:center}.prose blockquote{margin:1em 0;padding:.25rem 1rem;border-left:4px solid var(--color-primary);background:var(--color-primary-soft);border-radius:0 var(--radius-small) var(--radius-small) 0;color:var(--color-text)}.prose img{max-width:100%;height:auto;border-radius:var(--radius-small)}.prose table{border-collapse:collapse;width:100%;display:block;overflow-x:auto;font-size:.9rem}.prose th,.prose td{border:1px solid var(--color-border);padding:.45rem .7rem;text-align:left}.prose th{background:var(--color-code-background)}.prose hr{border:none;border-top:1px solid var(--color-border);margin:2rem 0}.lesson-nav{display:flex;flex-direction:column;gap:.5rem;margin-top:1.25rem}.lesson-nav a{display:block;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-small);padding:.7rem .9rem;text-decoration:none;color:var(--color-text);font-size:.9rem}.lesson-nav a:hover{border-color:var(--color-primary)}.lesson-nav .nav-label{display:block;font-size:.72rem;text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-muted)}.evaluation-submission{margin-top:1rem}.badge{display:inline-block;font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;border-radius:999px;padding:.15rem .6rem;white-space:nowrap}.badge-pending{background:var(--color-warning-soft);color:var(--color-warning)}.badge-approved,.badge-approved_with_notes{background:var(--color-success-soft);color:var(--color-success)}.badge-rejected{background:var(--color-danger-soft);color:var(--color-danger)}.submission-status{margin:0 0 1.25rem}.submission-status p{margin:.5rem 0 0;font-size:.92rem}.feedback-box{background:var(--color-code-background);border:1px solid var(--color-border);border-radius:var(--radius-small);padding:.75rem .9rem;margin-top:.75rem;font-size:.9rem}.feedback-box p{margin:.35rem 0 0;white-space:pre-line}.submission-form h3,.submission-history h3{font-size:1rem;margin:0 0 .75rem}.submission-form textarea{width:100%;padding:.6rem .75rem;border:1px solid var(--color-border);border-radius:var(--radius-small);font-size:.95rem;font-family:inherit;line-height:1.5;background:var(--color-surface);color:var(--color-text);margin-bottom:.75rem;resize:vertical}.submission-form input[type=file]{display:block;width:100%;font-size:.9rem;margin:.25rem 0 .75rem;color:var(--color-text-muted)}.upload-hint{font-size:.8rem;color:var(--color-text-muted);margin:0 0 .35rem}.selected-files{list-style:none;margin:0 0 .75rem;padding:0;font-size:.85rem;color:var(--color-text-muted)}.submission-history{margin-top:1.5rem;border-top:1px solid var(--color-border);padding-top:1rem}.attempt-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.75rem}.attempt-item{border:1px solid var(--color-border);border-radius:var(--radius-small);padding:.7rem .9rem;font-size:.9rem}.attempt-head{display:flex;align-items:center;justify-content:space-between;gap:.5rem;flex-wrap:wrap}.attempt-date{display:block;font-size:.8rem;color:var(--color-text-muted);margin-top:.2rem}.attempt-files{list-style:none;margin:.5rem 0 0;padding:0;display:flex;flex-direction:column;gap:.25rem}.attempt-files a{font-size:.85rem;word-break:break-all}.error-card{max-width:26rem;margin:2.5rem auto 0;text-align:center;padding:2rem 1.5rem}.error-card .error-icon{font-size:2rem;display:block;margin-bottom:.5rem}.error-card h1{font-size:1.15rem;margin:0 0 .6rem}.error-card p{color:var(--color-text-muted);font-size:.92rem;margin:0 0 1.25rem}.error-card a{font-weight:600}@media(min-width:640px){main{padding:2rem 1.5rem 4rem}.page-title{font-size:1.6rem}.prose{padding:1.75rem 2rem}.lesson-nav{flex-direction:row}.lesson-nav a{flex:1}.lesson-nav a.nav-next{text-align:right}}
