.ui-spinner{border:2px solid var(--color-hairline);border-top-color:var(--color-primary);border-radius:var(--radius-full);animation:.6s linear infinite ui-spinner-spin;display:inline-block}.ui-spinner--sm{width:16px;height:16px}.ui-spinner--md{width:20px;height:20px}@keyframes ui-spinner-spin{to{transform:rotate(360deg)}}.ui-btn{justify-content:center;align-items:center;gap:var(--space-xs);height:var(--control-height);padding:0 var(--space-xl);border-radius:var(--radius-none);cursor:pointer;font-family:var(--font-sans);font-size:var(--font-button-size);font-weight:var(--font-button-weight);line-height:var(--font-button-line);letter-spacing:var(--font-button-spacing);transition:background-color var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out), color var(--duration-fast) var(--ease-out);white-space:nowrap;border:none;display:inline-flex}.ui-btn:disabled{cursor:not-allowed}.ui-btn--full{width:100%}.ui-btn__content{align-items:center;gap:var(--space-xs);display:inline-flex}.ui-btn__label{visibility:hidden;width:0;height:0;position:absolute;overflow:hidden}.ui-btn--primary{background:var(--color-primary);color:var(--color-on-primary)}.ui-btn--primary:hover:not(:disabled){background:var(--color-primary-active)}.ui-btn--primary:disabled{background:var(--color-primary-disabled);color:var(--color-muted)}.ui-btn--secondary{background:var(--color-canvas);color:var(--color-ink);border:1px solid var(--color-hairline-strong)}.ui-btn--secondary:hover:not(:disabled){border-color:var(--color-ink)}.ui-btn--secondary:disabled{color:var(--color-muted-soft);border-color:var(--color-hairline)}.ui-btn--secondary-on-dark{color:var(--color-on-dark);border:1px solid var(--color-on-dark);background:0 0}.ui-btn--secondary-on-dark:hover:not(:disabled){background:var(--color-surface-dark-elevated)}.ui-btn--danger{background:var(--color-error);color:var(--color-on-primary)}.ui-btn--danger:hover:not(:disabled){background:var(--color-m-red)}.ui-btn--text-link{color:var(--color-ink);height:auto;padding:var(--space-xs) 0;font-size:var(--font-label-uppercase-size);font-weight:var(--font-label-uppercase-weight);letter-spacing:var(--font-label-uppercase-spacing);text-transform:uppercase;background:0 0}.ui-btn--text-link:hover:not(:disabled){color:var(--color-primary)}.dashboard-header{background:var(--color-surface-dark);padding:var(--space-md) var(--space-xl);align-items:center;gap:var(--space-md);z-index:100;min-height:64px;display:flex;position:sticky;top:0}.dashboard-header h1{font-size:var(--font-title-sm-size);font-weight:var(--font-title-sm-weight);color:var(--color-on-dark)}.dashboard-header .ef-badge{background:var(--color-primary);color:var(--color-on-primary);font-size:var(--font-caption-size);letter-spacing:var(--font-label-uppercase-spacing);padding:var(--space-xxs) var(--space-sm);border-radius:var(--radius-none);text-transform:uppercase;font-weight:700}.dashboard-header .user-info{font-size:var(--font-nav-link-size);color:var(--color-on-dark-soft);align-items:center;gap:var(--space-sm);margin-left:auto;display:flex}.header-link{color:var(--color-on-dark-soft);font-size:var(--font-nav-link-size);transition:color var(--duration-fast) var(--ease-out);text-decoration:none}.header-link:hover{color:var(--color-on-dark)}.dashboard-header .logout-btn{height:var(--control-height);padding:0 var(--space-md);border:1px solid var(--color-on-dark-soft);border-radius:var(--radius-none);color:var(--color-on-dark);font-size:var(--font-button-size);font-weight:var(--font-button-weight);cursor:pointer;transition:background-color var(--duration-fast) var(--ease-out);background:0 0}.dashboard-header .logout-btn:hover{background:var(--color-surface-dark-elevated)}.dashboard-shell{background:var(--color-canvas);min-height:100vh}.dashboard-inner{max-width:var(--max-content-width);padding:var(--space-xl) var(--space-lg);margin:0 auto}.dashboard-shell.variant-student .dashboard-inner{max-width:960px}.dashboard-shell-main{animation:dashboard-fade-in .3s var(--ease-out) both}@keyframes dashboard-fade-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.assign-form{gap:var(--space-md);grid-template-columns:repeat(auto-fill,minmax(200px,1fr));display:grid}.assign-form .full-width{grid-column:1/-1}.checkbox-group{gap:var(--space-xs);margin-top:var(--space-xs);flex-direction:column;display:flex}.results-preview-link{font-size:var(--font-body-sm-size);color:var(--color-primary);text-decoration:none}.results-preview-link:hover{text-decoration:underline}.stat-grid{gap:var(--space-lg);flex-wrap:wrap;display:flex}.stat-cell{text-align:center}.stat-value{font-size:var(--font-display-sm-size);font-weight:var(--font-display-sm-weight)}.stat-label{font-size:var(--font-caption-size);color:var(--color-muted);text-transform:uppercase;letter-spacing:var(--font-caption-spacing)}.exam-card{justify-content:space-between;align-items:center;gap:var(--space-md);padding:var(--space-md) var(--space-lg);border:1px solid var(--color-hairline);border-radius:var(--radius-none);margin-bottom:var(--space-xs);background:var(--color-canvas);display:flex}.exam-card h3{font-size:var(--font-title-sm-size);font-weight:var(--font-title-sm-weight);color:var(--color-ink);margin-bottom:var(--space-xxs)}.exam-card p{font-size:var(--font-body-sm-size);color:var(--color-muted)}.exam-status{font-size:var(--font-caption-size);color:var(--color-muted);text-transform:uppercase;letter-spacing:var(--font-caption-spacing)}.status-available{color:var(--color-success)}.status-submitted{color:var(--color-primary)}.status-expired{color:var(--color-error)}.result-card{justify-content:space-between;align-items:center;gap:var(--space-md);padding:var(--space-md) var(--space-lg);border:1px solid var(--color-hairline);border-radius:var(--radius-none);margin-bottom:var(--space-xs);display:flex}.result-card .score{font-size:var(--font-title-lg-size);font-weight:var(--font-title-lg-weight);color:var(--color-primary)}.result-card .score-detail{font-size:var(--font-caption-size);color:var(--color-muted)}.stat-value--primary{color:var(--color-primary)}.stat-value--success{color:var(--color-success)}.stat-value--error{color:var(--color-error)}.results-preview-link--inline{margin-left:var(--space-sm)}.class-detail-heading{margin:var(--space-md) 0 var(--space-sm)}.submission-date{text-align:right;min-width:160px}.ui-data-state-loading{gap:var(--space-sm);flex-direction:column;display:flex}.panel-loading-hint{align-items:center;gap:var(--space-sm);margin-bottom:var(--space-md);color:var(--color-muted);display:flex}.results-stats-card{margin-bottom:var(--space-md)}.gradebook-scroll{border:1px solid var(--color-hairline);background:var(--color-surface);width:100%;overflow-x:auto}.gradebook-table{width:max-content;min-width:100%;font-size:var(--font-body-sm-size)}.gradebook-table th,.gradebook-table td{padding:var(--space-sm) var(--space-md);border-bottom:1px solid var(--color-hairline);text-align:left;white-space:nowrap;vertical-align:middle}.gradebook-table thead th{background:var(--color-canvas);font-weight:600}.gradebook-sticky{z-index:1;background:var(--color-surface);min-width:160px;box-shadow:1px 0 0 var(--color-hairline);position:sticky;left:0}.gradebook-table thead .gradebook-sticky{background:var(--color-canvas);z-index:2}.gradebook-col-kind{color:var(--color-muted);font-size:var(--font-caption-size);font-weight:500;display:block}.gradebook-col-label{display:block}.gradebook-score-btn{color:var(--color-primary);font:inherit;cursor:pointer;text-underline-offset:2px;background:0 0;border:none;padding:0;text-decoration:underline}.gradebook-score-btn:hover{color:var(--color-ink)}.gradebook-cell--did{color:var(--color-success)}.gradebook-cell--missed,.gradebook-cell--na{color:var(--color-muted)}.course-manage-section{margin-top:var(--space-lg)}.course-manage-heading{margin-bottom:var(--space-sm)}.course-manage-module{margin-bottom:var(--space-md)}.course-manage-item{margin-left:var(--space-md)}.course-grants-count{align-self:center}.result-detail-grid{gap:var(--space-xs);flex-direction:column;display:flex}.result-detail-section{margin-top:var(--space-lg)}.result-detail-json{margin-top:var(--space-sm);padding:var(--space-md);border:1px solid var(--color-hairline);background:var(--color-canvas);color:var(--color-ink);font-size:var(--font-body-sm-size);overflow:auto}.task-submission-body{white-space:pre-wrap;word-break:break-word}.task-submission-links{margin:var(--space-sm) 0 0;padding-left:var(--space-lg);gap:var(--space-xs);flex-direction:column;display:flex}.page-error-wrap{min-height:100vh;padding:var(--space-xl);justify-content:center;align-items:center;display:flex}.course-module-section{margin-top:var(--space-xl)}.result-score-cell{text-align:right}.exam-card-actions{align-items:center;gap:var(--space-sm);display:flex}.ui-alert{padding:var(--space-md) var(--space-lg);border-radius:var(--radius-none);font-size:var(--font-body-sm-size);font-weight:var(--font-body-sm-weight);line-height:var(--font-body-sm-line)}.ui-alert--info{background:var(--color-surface-soft);color:var(--color-body);border:1px solid var(--color-hairline)}.ui-alert--success{background:color-mix(in srgb, var(--color-success) 10%, var(--color-canvas));color:var(--color-body-strong);border:1px solid var(--color-success)}.ui-alert--warning{background:color-mix(in srgb, var(--color-warning) 10%, var(--color-canvas));color:var(--color-body-strong);border:1px solid var(--color-warning)}.ui-alert--error{background:color-mix(in srgb, var(--color-error) 10%, var(--color-canvas));color:var(--color-body-strong);border:1px solid var(--color-error)}.ui-back-link{margin-bottom:var(--space-md);color:var(--color-primary);text-decoration:none;display:inline-block}.ui-back-link:hover{text-decoration:underline}.ui-badge{padding:var(--space-xxs) var(--space-sm);border-radius:var(--radius-none);font-size:var(--font-caption-size);font-weight:var(--font-caption-weight);letter-spacing:var(--font-caption-spacing);line-height:var(--font-caption-line);white-space:nowrap;align-items:center;display:inline-flex}.ui-badge--default{background:var(--color-surface-strong);color:var(--color-ink)}.ui-badge--success{background:color-mix(in srgb, var(--color-success) 15%, var(--color-canvas));color:var(--color-success)}.ui-badge--warning{background:color-mix(in srgb, var(--color-warning) 15%, var(--color-canvas));color:var(--color-warning)}.ui-badge--error{background:color-mix(in srgb, var(--color-error) 15%, var(--color-canvas));color:var(--color-error)}.ui-badge--score-high{background:color-mix(in srgb, var(--color-success) 15%, var(--color-canvas));color:var(--color-success)}.ui-badge--score-mid{background:color-mix(in srgb, var(--color-warning) 15%, var(--color-canvas));color:var(--color-warning)}.ui-badge--score-low{background:color-mix(in srgb, var(--color-error) 15%, var(--color-canvas));color:var(--color-error)}.ui-card{background:var(--color-canvas);border:1px solid var(--color-hairline);border-radius:var(--radius-none);padding:var(--space-lg)}.ui-card__header{justify-content:space-between;align-items:center;gap:var(--space-md);margin-bottom:var(--space-md);padding-bottom:var(--space-md);border-bottom:1px solid var(--color-hairline);display:flex}.ui-card__footer{margin-top:var(--space-md);padding-top:var(--space-md);border-top:1px solid var(--color-hairline)}.ui-checkbox{align-items:center;gap:var(--space-xs);cursor:pointer;display:inline-flex}.ui-checkbox__input{width:18px;height:18px;accent-color:var(--color-primary);cursor:pointer}.ui-checkbox__label{color:var(--color-body)}.ui-modal-overlay{z-index:1000;background:color-mix(in srgb, var(--color-surface-dark) 60%, transparent);padding:var(--space-lg);justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.ui-modal{background:var(--color-canvas);border-radius:var(--radius-none);width:100%;max-width:480px;padding:var(--space-lg)}.ui-modal__title{margin-bottom:var(--space-md)}.ui-modal__body{color:var(--color-body);font-size:var(--font-body-sm-size);font-weight:var(--font-body-sm-weight);line-height:var(--font-body-sm-line)}.ui-modal__footer{justify-content:flex-end;gap:var(--space-sm);margin-top:var(--space-lg);display:flex}.ui-empty-state{padding:var(--space-xxl) var(--space-lg);text-align:center;color:var(--color-muted);border:1px dashed var(--color-hairline);border-radius:var(--radius-none)}.ui-skeleton{background:var(--color-surface-strong);border-radius:var(--radius-none);animation:1.5s ease-in-out infinite ui-skeleton-pulse;display:block}.ui-skeleton--text{width:100%;height:1em}.ui-skeleton--circle{border-radius:var(--radius-full)}@keyframes ui-skeleton-pulse{0%,to{opacity:1}50%{opacity:.5}}.ui-drawer-overlay{z-index:1000;background:color-mix(in srgb, var(--color-surface-dark) 60%, transparent);animation:ui-drawer-overlay-in var(--duration-fast) var(--ease-out) both;justify-content:flex-end;display:flex;position:fixed;inset:0}.ui-drawer{background:var(--color-canvas);height:100%;max-height:100%;box-shadow:-4px 0 24px color-mix(in srgb, var(--color-ink) 12%, transparent);animation:ui-drawer-slide-in var(--duration-fast) var(--ease-out) both;outline:none;flex-direction:column;display:flex}.ui-drawer--sm{width:min(360px,100%)}.ui-drawer--md{width:min(480px,100%)}.ui-drawer--lg{width:min(720px,100%)}.ui-drawer__header{padding:var(--space-lg);border-bottom:1px solid var(--color-hairline);flex-shrink:0}.ui-drawer__title{margin:0}.ui-drawer__description{margin:var(--space-xs) 0 0;color:var(--color-muted)}.ui-drawer__body{padding:var(--space-lg);color:var(--color-body);flex:1;overflow-y:auto}.ui-drawer__footer{justify-content:flex-end;gap:var(--space-sm);padding:var(--space-lg);border-top:1px solid var(--color-hairline);flex-shrink:0;display:flex}@keyframes ui-drawer-overlay-in{0%{opacity:0}to{opacity:1}}@keyframes ui-drawer-slide-in{0%{transform:translate(100%)}to{transform:translate(0)}}@media (width<=640px){.ui-drawer--sm,.ui-drawer--md,.ui-drawer--lg{width:100%}}.ui-field{gap:var(--space-xs);margin-bottom:var(--space-md);flex-direction:column;display:flex}.ui-field__label{display:block}.ui-field__error{color:var(--color-error)}.ui-field__hint{color:var(--color-muted)}.ui-field--error .ui-input,.ui-field--error .ui-select{border-color:var(--color-error)}.ui-form{gap:var(--space-xs);flex-direction:column;display:flex}.ui-form .ui-btn[type=submit],.ui-form .ui-btn--primary:last-child{margin-top:var(--space-sm)}.ui-full-page-loader{z-index:2000;justify-content:center;align-items:center;gap:var(--space-md);background:var(--color-canvas);flex-direction:column;display:flex;position:fixed;inset:0}.ui-full-page-loader__text{color:var(--color-muted)}.ui-icon-btn{width:var(--control-height);height:var(--control-height);border-radius:var(--radius-full);cursor:pointer;transition:background-color var(--duration-fast) var(--ease-out);border:none;justify-content:center;align-items:center;display:inline-flex}.ui-icon-btn--default{background:var(--color-surface-soft);color:var(--color-ink)}.ui-icon-btn--default:hover:not(:disabled){background:var(--color-surface-strong)}.ui-icon-btn--on-dark{color:var(--color-on-dark);background:0 0}.ui-icon-btn--on-dark:hover:not(:disabled){background:var(--color-surface-dark-elevated)}.ui-icon-btn:disabled{opacity:.5;cursor:not-allowed}.ui-input{width:100%;height:var(--control-height);padding:14px var(--space-md);background:var(--color-canvas);color:var(--color-ink);border:1px solid var(--color-hairline);border-radius:var(--radius-none);transition:border-color var(--duration-fast) var(--ease-out)}.ui-input::placeholder{color:var(--color-muted-soft)}.ui-input:focus{border-color:var(--color-ink);padding:13px calc(var(--space-md) - 1px);border-width:2px;outline:none}.ui-input:disabled{background:var(--color-surface-soft);color:var(--color-muted-soft);cursor:not-allowed}.ui-list-row{justify-content:space-between;align-items:center;gap:var(--space-md);padding:var(--space-md) var(--space-lg);border:1px solid var(--color-hairline);border-radius:var(--radius-none);background:var(--color-canvas);margin-bottom:var(--space-xs);display:flex}.ui-list-row--interactive{cursor:pointer;transition:background-color var(--duration-fast) var(--ease-out)}.ui-list-row--interactive:hover{background:var(--color-surface-soft)}.ui-list-row--selected{border-color:var(--color-primary);background:color-mix(in srgb, var(--color-primary) 5%, var(--color-canvas))}.ui-list-row__content{align-items:center;gap:var(--space-md);flex-wrap:wrap;flex:1;min-width:0;display:flex}.ui-list-row__actions{align-items:center;gap:var(--space-sm);flex-shrink:0;display:flex}.ui-page-section{margin-bottom:var(--space-xl)}.ui-page-section__head{justify-content:space-between;align-items:center;gap:var(--space-md);margin-bottom:var(--space-lg);display:flex}.ui-page-section__title{margin:0}.ui-page-section__actions{align-items:center;gap:var(--space-sm);display:flex}.ui-search-input{flex:1;min-width:200px;margin-bottom:0}.ui-select-wrap{width:100%;position:relative}.ui-select{width:100%;height:var(--control-height);padding:14px calc(var(--space-md) + 24px) 14px var(--space-md);background:var(--color-canvas);color:var(--color-ink);border:1px solid var(--color-hairline);border-radius:var(--radius-none);cursor:pointer;appearance:none;font-family:var(--font-sans);font-size:var(--font-body-md-size);font-weight:var(--font-body-md-weight);line-height:var(--font-body-md-line);letter-spacing:var(--font-body-md-spacing);transition:border-color var(--duration-fast) var(--ease-out)}.ui-select-wrap:after{content:"";right:var(--space-md);border-right:2px solid var(--color-ink);border-bottom:2px solid var(--color-ink);pointer-events:none;width:8px;height:8px;position:absolute;top:50%;transform:translateY(-70%)rotate(45deg)}.ui-select:focus{border-color:var(--color-ink);padding:13px calc(var(--space-md) + 23px) 13px calc(var(--space-md) - 1px);border-width:2px;outline:none}.ui-select:disabled{background:var(--color-surface-soft);color:var(--color-muted-soft);cursor:not-allowed}.ui-select-wrap:has(.ui-select:disabled):after{border-color:var(--color-muted-soft)}.ui-tabs{border-bottom:1px solid var(--color-hairline);margin-bottom:var(--space-lg);gap:0;display:flex;overflow-x:auto}.ui-tabs__tab{padding:var(--space-sm) var(--space-lg);cursor:pointer;color:var(--color-muted);white-space:nowrap;transition:color var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out);background:0 0;border:none;border-bottom:2px solid #0000}.ui-tabs__tab:hover{color:var(--color-ink)}.ui-tabs__tab--active{color:var(--color-ink);border-bottom-color:var(--color-ink)}.ui-tabs__panel{min-height:200px}.ui-textarea{width:100%;min-height:calc(var(--control-height) * 3);padding:14px var(--space-md);background:var(--color-canvas);color:var(--color-ink);border:1px solid var(--color-hairline);border-radius:var(--radius-none);resize:vertical;transition:border-color var(--duration-fast) var(--ease-out)}.ui-textarea::placeholder{color:var(--color-muted-soft)}.ui-textarea:focus{border-color:var(--color-ink);padding:13px calc(var(--space-md) - 1px);border-width:2px;outline:none}.ui-textarea:disabled{background:var(--color-surface-soft);color:var(--color-muted-soft);cursor:not-allowed}.ui-toast-container{bottom:var(--space-lg);left:var(--space-lg);z-index:2000;align-items:flex-start;gap:var(--space-xs);width:min(22.5rem, calc(100vw - 720px - var(--space-lg) * 2));pointer-events:none;flex-direction:column;display:flex;position:fixed}.ui-toast{box-sizing:border-box;width:100%;padding:var(--space-md) var(--space-lg);border-radius:var(--radius-none);font-size:var(--font-body-sm-size);font-weight:var(--font-body-sm-weight);pointer-events:auto;animation:ui-toast-in var(--duration-fast) var(--ease-out)}.ui-toast--success{background:var(--color-ink);color:var(--color-on-dark)}.ui-toast--error{background:var(--color-error);color:var(--color-on-primary)}.ui-toast--info{background:var(--color-surface-dark);color:var(--color-on-dark)}@keyframes ui-toast-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@media (width<=1128px){.ui-toast-container{top:var(--space-lg);width:min(22.5rem, calc(100vw - var(--space-lg) * 2));bottom:auto}}.ui-toolbar{gap:var(--space-sm);margin-bottom:var(--space-lg);flex-wrap:wrap;align-items:flex-end;display:flex}.ui-toolbar .ui-field{margin-bottom:0}.ui-toolbar .ui-btn{flex-shrink:0;align-self:flex-end}.ui-top-progress{z-index:3000;pointer-events:none;opacity:0;height:3px;transition:opacity var(--duration-fast) var(--ease-out);position:fixed;top:0;left:0;right:0;overflow:hidden}.ui-top-progress--active{opacity:1}.ui-top-progress:after{content:"";background:var(--color-primary);position:absolute;inset:0;transform:translate(-100%)}.ui-top-progress--active:after{animation:ui-top-progress-sweep 1.1s var(--ease-out) infinite}@keyframes ui-top-progress-sweep{0%{transform:translate(-100%)}50%{transform:translate(0%)}to{transform:translate(100%)}}.lesson-page-toolbar{margin-bottom:var(--space-lg)}.lesson-page-layout{gap:var(--space-xxl);grid-template-columns:1fr 280px;align-items:start;display:grid}@media (width<=768px){.lesson-page-layout{grid-template-columns:1fr}}.lesson-page-body section{margin-bottom:var(--space-xl)}.lesson-page-body--spaced{margin-top:var(--space-xl)}.lesson-page-body h2{margin-bottom:var(--space-sm);font-size:1.25rem;font-weight:700}.lesson-page-body pre{background:var(--color-surface-soft);padding:var(--space-sm);font-size:13px;overflow-x:auto}.lesson-page-body details{margin-top:var(--space-md);padding:var(--space-sm);border:1px solid var(--color-hairline)}.lesson-page-sidebar{border-left:1px solid var(--color-hairline);padding-left:var(--space-lg)}.lesson-objectives{margin:var(--space-sm) 0 var(--space-lg);padding-left:20px}.lesson-page-actions{gap:var(--space-sm);flex-direction:column;display:flex}.lesson-preview-shell{max-width:900px;padding:var(--space-xxl) var(--space-lg)}.auth-card-wrap{min-height:100vh;padding:var(--space-lg);background:var(--color-canvas);justify-content:center;align-items:center;display:flex}.auth-card{background:var(--color-canvas);border:1px solid var(--color-hairline);border-radius:var(--radius-none);padding:var(--space-xxl) var(--space-xl);width:100%;max-width:420px}.ef-badge-host{margin-bottom:var(--space-lg);background:var(--color-primary);color:var(--color-on-primary);font-size:var(--font-caption-size);letter-spacing:var(--font-label-uppercase-spacing);padding:var(--space-xxs) var(--space-sm);border-radius:var(--radius-none);text-transform:uppercase;font-weight:700;display:inline-block}.auth-card-heading h1{font-size:var(--font-display-sm-size);font-weight:var(--font-display-sm-weight);color:var(--color-ink);margin:0 0 var(--space-xs)}.subtitle{font-size:var(--font-body-sm-size);font-weight:var(--font-body-sm-weight);color:var(--color-muted);margin:0 0 var(--space-xl)}.auth-card-alerts{margin-bottom:var(--space-md)}.auth-card-footer{margin-top:var(--space-lg);font-size:var(--font-body-sm-size);color:var(--color-muted)}.auth-card-footer a{color:var(--color-primary);text-decoration:none}.auth-card-footer a:hover{text-decoration:underline}.toggle-mode a{color:var(--color-primary);text-decoration:none}.forgot-row{text-align:right;margin-bottom:var(--space-sm)}.forgot-row a{font-size:var(--font-body-sm-size);color:var(--color-primary);text-decoration:none}.forgot-row a:hover{text-decoration:underline}.activity-timeline{gap:var(--space-lg);flex-direction:column;display:flex}.activity-timeline__group-title{margin-bottom:var(--space-sm);color:var(--color-muted)}.activity-timeline__group--overdue .activity-timeline__group-title{color:var(--color-warning)}.activity-timeline__list{gap:var(--space-xs);padding:0 0 0 var(--space-lg);flex-direction:column;margin:0;list-style:none;display:flex;position:relative}.activity-timeline__list:before{content:"";top:var(--space-xs);bottom:var(--space-xs);left:var(--space-xs);background:var(--color-hairline-strong);width:1px;position:absolute}.activity-timeline__item{justify-content:space-between;align-items:center;gap:var(--space-md);padding:var(--space-md) var(--space-lg);border:1px solid var(--color-hairline);background:var(--color-canvas);transition:border-color var(--duration-fast) var(--ease-out), opacity var(--duration-fast) var(--ease-out);display:flex;position:relative}.activity-timeline__item:hover{border-color:var(--color-hairline-strong)}.activity-timeline__item--overdue{border-color:var(--color-warning);background:color-mix(in srgb, var(--color-warning) 6%, var(--color-canvas))}.activity-timeline__item--done{background:var(--color-surface-card)}.activity-timeline__item--done .activity-timeline__title{color:var(--color-muted)}.activity-timeline__dot{top:50%;left:calc(var(--space-xs) - var(--space-lg));width:var(--space-xs);height:var(--space-xs);border:2px solid var(--color-canvas);border-radius:var(--radius-full);box-sizing:content-box;position:absolute;transform:translate(-50%,-50%)}.activity-timeline__item--exam .activity-timeline__dot{background:var(--color-primary)}.activity-timeline__item--exercise .activity-timeline__dot{background:var(--color-m-blue-light)}.activity-timeline__item--task .activity-timeline__dot{background:var(--color-surface-dark)}.activity-timeline__item--done .activity-timeline__dot{background:var(--color-muted-soft)}.activity-timeline__content{gap:var(--space-xxs);flex-direction:column;min-width:0;display:flex}.activity-timeline__meta{align-items:center;gap:var(--space-xs);flex-wrap:wrap;display:flex}.activity-timeline__title{color:var(--color-ink);overflow-wrap:anywhere}.activity-timeline__scope{color:var(--color-muted)}.activity-timeline__tag{padding:0 var(--space-xs);border-radius:var(--radius-xs);align-items:center;display:inline-flex}.activity-timeline__tag--exam{background:var(--color-primary);color:var(--color-on-primary)}.activity-timeline__tag--exercise{background:color-mix(in srgb, var(--color-m-blue-light) 15%, var(--color-canvas));color:var(--color-m-blue-light)}.activity-timeline__tag--task{background:var(--color-surface-dark);color:var(--color-on-dark)}.activity-timeline__due{color:var(--color-muted)}.activity-timeline__due--alert{color:var(--color-error)}.activity-timeline__aside{justify-content:flex-end;align-items:center;gap:var(--space-sm);flex-wrap:wrap;flex-shrink:0;display:flex}.activity-timeline--past .activity-timeline__item{opacity:.8}.activity-timeline--past .activity-timeline__item:hover{opacity:1}@media (width<=640px){.activity-timeline__item{flex-direction:column;align-items:flex-start}.activity-timeline__aside{justify-content:flex-start}}.student-home{gap:var(--space-xl);flex-direction:column;display:flex}.student-home__next{border-left:var(--space-xxs) solid var(--color-primary)}.student-home__next-label{color:var(--color-muted)}.student-home__next-body{justify-content:space-between;align-items:center;gap:var(--space-lg);flex-wrap:wrap;display:flex}.student-home__next-info{gap:var(--space-xs);flex-direction:column;min-width:0;display:flex}.student-home__next-meta{align-items:center;gap:var(--space-xs);flex-wrap:wrap;display:flex}.student-home__next-title{color:var(--color-ink);overflow-wrap:anywhere}.student-home__next-actions{align-items:center;gap:var(--space-sm);flex-wrap:wrap;display:flex}.student-home__muted{color:var(--color-muted)}.student-home__filters{gap:var(--space-xs);flex-wrap:wrap;display:flex}.student-home__section{gap:var(--space-md);flex-direction:column;display:flex}.student-home__section--past{padding-top:var(--space-lg);border-top:1px solid var(--color-hairline)}.student-home__section-title{color:var(--color-ink)}.student-home__toggle{align-items:center;gap:var(--space-xs);color:inherit;font:inherit;cursor:pointer;transition:color var(--duration-fast) var(--ease-out);background:0 0;border:none;padding:0;display:inline-flex}.student-home__toggle:hover{color:var(--color-primary)}.student-home__toggle:focus-visible{box-shadow:var(--focus-ring);outline:none}.student-home__toggle-icon{color:var(--color-muted)}.task-page__meta{gap:var(--space-xs);margin-bottom:var(--space-md);flex-wrap:wrap;align-items:center;display:flex}.task-page__caption{margin-bottom:var(--space-lg)}.task-page__instructions{white-space:pre-wrap}.task-page__block{margin-bottom:var(--space-xl)}.task-page__stack{gap:var(--space-lg);flex-direction:column;display:flex}.task-page__textarea{width:100%;min-height:160px;padding:14px var(--space-md);background:var(--color-canvas);color:var(--color-ink);border:1px solid var(--color-hairline);border-radius:var(--radius-none);resize:vertical;transition:border-color var(--duration-fast) var(--ease-out)}.task-page__textarea:focus{border-color:var(--color-ink);padding:13px calc(var(--space-md) - 1px);border-width:2px;outline:none}.task-page__textarea:disabled{background:var(--color-surface-soft);color:var(--color-muted-soft);cursor:not-allowed}.task-page__link-row{gap:var(--space-xs);margin-bottom:var(--space-xs);align-items:center;display:flex}.task-page__link-row .ui-input{flex:1}.task-page__link-actions{gap:var(--space-xs);margin-top:var(--space-xs);display:flex}.task-page__file-list,.task-page__prev-list{gap:var(--space-xs);margin-top:var(--space-xs);flex-direction:column;list-style:none;display:flex}.task-page__file-list li,.task-page__prev-list li{gap:var(--space-xs);flex-wrap:wrap;align-items:baseline;display:flex}.task-page__resubmit-hint{margin-bottom:var(--space-md)}.task-page__prev-body{white-space:pre-wrap;margin-top:var(--space-sm)}.task-page__actions{gap:var(--space-sm);margin-top:var(--space-md);flex-wrap:wrap;display:flex}:root{--color-primary:#1c69d4;--color-primary-active:#0653b6;--color-primary-disabled:#d6d6d6;--color-ink:#262626;--color-body:#3c3c3c;--color-body-strong:#1a1a1a;--color-muted:#6b6b6b;--color-muted-soft:#9a9a9a;--color-hairline:#e6e6e6;--color-hairline-strong:#ccc;--color-canvas:#fff;--color-surface-soft:#f7f7f7;--color-surface-card:#fafafa;--color-surface-strong:#ebebeb;--color-surface-dark:#1a2129;--color-surface-dark-elevated:#262e38;--color-on-primary:#fff;--color-on-dark:#fff;--color-on-dark-soft:#bbb;--color-m-blue-light:#0066b1;--color-m-blue-dark:#1c69d4;--color-m-red:#e22718;--color-success:#22c55e;--color-warning:#f59e0b;--color-error:#dc2626;--space-xxs:4px;--space-xs:8px;--space-sm:12px;--space-md:16px;--space-lg:24px;--space-xl:32px;--space-xxl:48px;--space-section:80px;--radius-none:0px;--radius-xs:2px;--radius-sm:4px;--radius-md:8px;--radius-lg:12px;--radius-pill:9999px;--radius-full:9999px;--font-sans:"Inter", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, monospace;--font-display-xl-size:64px;--font-display-xl-weight:700;--font-display-xl-line:1.05;--font-display-xl-spacing:0;--font-display-lg-size:48px;--font-display-lg-weight:700;--font-display-lg-line:1.1;--font-display-lg-spacing:0;--font-display-md-size:32px;--font-display-md-weight:700;--font-display-md-line:1.15;--font-display-md-spacing:0;--font-display-sm-size:24px;--font-display-sm-weight:700;--font-display-sm-line:1.25;--font-display-sm-spacing:0;--font-title-lg-size:20px;--font-title-lg-weight:700;--font-title-lg-line:1.3;--font-title-lg-spacing:0;--font-title-md-size:18px;--font-title-md-weight:700;--font-title-md-line:1.4;--font-title-md-spacing:0;--font-title-sm-size:16px;--font-title-sm-weight:700;--font-title-sm-line:1.4;--font-title-sm-spacing:0;--font-body-md-size:16px;--font-body-md-weight:300;--font-body-md-line:1.55;--font-body-md-spacing:0;--font-body-sm-size:14px;--font-body-sm-weight:300;--font-body-sm-line:1.55;--font-body-sm-spacing:0;--font-caption-size:12px;--font-caption-weight:400;--font-caption-line:1.4;--font-caption-spacing:.5px;--font-label-uppercase-size:13px;--font-label-uppercase-weight:700;--font-label-uppercase-line:1.3;--font-label-uppercase-spacing:1.5px;--font-button-size:14px;--font-button-weight:700;--font-button-line:1;--font-button-spacing:.5px;--font-nav-link-size:14px;--font-nav-link-weight:400;--font-nav-link-line:1.4;--font-nav-link-spacing:.3px;--control-height:48px;--duration-fast:.15s;--ease-out:ease-out;--max-content-width:1440px;--focus-ring:0 0 0 2px var(--color-canvas), 0 0 0 4px var(--color-primary)}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%}body{background-color:var(--color-canvas);color:var(--color-body);font-family:var(--font-sans);font-size:var(--font-size-body-md);font-weight:var(--font-weight-body-md);line-height:var(--line-height-body-md);letter-spacing:var(--letter-spacing-body-md);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}img,picture,video,canvas,svg{max-width:100%;display:block}input,button,textarea,select{font:inherit;letter-spacing:inherit;color:inherit}button{cursor:pointer;background:0 0;border:none}a{color:inherit;text-decoration:none}ul,ol{list-style:none}table{border-collapse:collapse;border-spacing:0}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}code,pre,kbd,samp{font-family:var(--font-mono)}#root{isolation:isolate;min-height:100vh}:focus-visible{outline:var(--focus-ring);outline-offset:var(--focus-ring-offset)}.t-display-xl{font-family:var(--font-sans);font-size:var(--font-size-display-xl);font-weight:var(--font-weight-display-xl);line-height:var(--line-height-display-xl);letter-spacing:var(--letter-spacing-display-xl)}.t-display-lg{font-family:var(--font-sans);font-size:var(--font-size-display-lg);font-weight:var(--font-weight-display-lg);line-height:var(--line-height-display-lg);letter-spacing:var(--letter-spacing-display-lg)}.t-display-md{font-family:var(--font-sans);font-size:var(--font-size-display-md);font-weight:var(--font-weight-display-md);line-height:var(--line-height-display-md);letter-spacing:var(--letter-spacing-display-md)}.t-display-sm{font-family:var(--font-sans);font-size:var(--font-size-display-sm);font-weight:var(--font-weight-display-sm);line-height:var(--line-height-display-sm);letter-spacing:var(--letter-spacing-display-sm)}.t-title-lg{font-family:var(--font-sans);font-size:var(--font-size-title-lg);font-weight:var(--font-weight-title-lg);line-height:var(--line-height-title-lg);letter-spacing:var(--letter-spacing-title-lg)}.t-title-md{font-family:var(--font-sans);font-size:var(--font-size-title-md);font-weight:var(--font-weight-title-md);line-height:var(--line-height-title-md);letter-spacing:var(--letter-spacing-title-md)}.t-title-sm{font-family:var(--font-sans);font-size:var(--font-size-title-sm);font-weight:var(--font-weight-title-sm);line-height:var(--line-height-title-sm);letter-spacing:var(--letter-spacing-title-sm)}.t-body-md{font-family:var(--font-sans);font-size:var(--font-size-body-md);font-weight:var(--font-weight-body-md);line-height:var(--line-height-body-md);letter-spacing:var(--letter-spacing-body-md)}.t-body-sm{font-family:var(--font-sans);font-size:var(--font-size-body-sm);font-weight:var(--font-weight-body-sm);line-height:var(--line-height-body-sm);letter-spacing:var(--letter-spacing-body-sm)}.t-caption{font-family:var(--font-sans);font-size:var(--font-size-caption);font-weight:var(--font-weight-caption);line-height:var(--line-height-caption);letter-spacing:var(--letter-spacing-caption)}.t-label-uppercase{font-family:var(--font-sans);font-size:var(--font-size-label-uppercase);font-weight:var(--font-weight-label-uppercase);line-height:var(--line-height-label-uppercase);letter-spacing:var(--letter-spacing-label-uppercase);text-transform:uppercase}.t-button{font-family:var(--font-sans);font-size:var(--font-size-button);font-weight:var(--font-weight-button);line-height:var(--line-height-button);letter-spacing:var(--letter-spacing-button)}.t-nav-link{font-family:var(--font-sans);font-size:var(--font-size-nav-link);font-weight:var(--font-weight-nav-link);line-height:var(--line-height-nav-link);letter-spacing:var(--letter-spacing-nav-link)}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}body.ef-runner-active #root{display:none}:root{--bg:var(--color-canvas);--surface:var(--color-canvas);--surface2:var(--color-surface-card);--border:var(--color-hairline);--accent:var(--color-primary);--accent2:var(--color-success);--accent3:var(--color-error);--accent4:var(--color-m-blue-light);--text:var(--color-ink);--muted:var(--color-muted);--code-bg:var(--color-surface-soft);--success:var(--color-success);--error:var(--color-error);--warn:var(--color-warning);--radius:var(--radius-none)}#ef-header{background:var(--surface);border-bottom:1px solid var(--border);z-index:100;align-items:center;gap:20px;padding:20px 40px;display:flex;position:sticky;top:0}.ef-badge{background:var(--accent);color:#fff;letter-spacing:2px;border-radius:var(--radius-xs);text-transform:uppercase;padding:4px 10px;font-size:10px;font-weight:800}#ef-header h1{font-size:16px;font-weight:600}#ef-header p{color:var(--muted);margin-left:auto;font-family:JetBrains Mono,monospace;font-size:13px}#ef-container{max-width:1100px;margin:0 auto;padding:40px 24px 80px}#ef-intro{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:48px;padding:32px;position:relative;overflow:hidden}#ef-intro:before{content:"";pointer-events:none;background:radial-gradient(circle,#4f46e50f 0%,#0000 70%);width:200px;height:200px;position:absolute;top:-40px;right:-40px}.ef-intro-tag{letter-spacing:3px;text-transform:uppercase;color:var(--accent);margin-bottom:12px;font-family:JetBrains Mono,monospace;font-size:11px;display:block}#ef-intro h2{margin-bottom:12px;font-size:28px;font-weight:800;line-height:1.2}#ef-intro p{color:var(--muted);max-width:680px;font-size:15px;line-height:1.7}.ef-api-badge{background:var(--surface2);border:1px solid var(--border);border-radius:var(--radius-none);color:var(--accent4);align-items:center;gap:8px;margin-top:20px;padding:8px 14px;font-family:JetBrains Mono,monospace;font-size:13px;display:inline-flex}.ef-api-badge span{color:var(--muted);font-size:11px}#ef-progress-wrap{align-items:center;gap:16px;margin-bottom:32px;display:flex}#ef-progress-bar{background:var(--border);border-radius:999px;flex:1;height:4px;overflow:hidden}#ef-progress-fill{background:var(--accent);border-radius:999px;width:0%;height:100%;transition:width .4s}#ef-progress-label{color:var(--muted);white-space:nowrap;font-family:JetBrains Mono,monospace;font-size:12px}.ef-exercise{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);margin-bottom:32px;transition:border-color .2s;overflow:hidden}.ef-exercise:hover{border-color:#c4cad6}.ef-exercise.completed{border-color:#05966966}.ef-exercise.completed .ef-ex-header{border-bottom-color:#05966926}.ef-ex-header{background:var(--surface);border-bottom:1px solid var(--border);align-items:flex-start;gap:16px;padding:20px 24px;display:flex}.ef-ex-num{border-radius:var(--radius-none);justify-content:center;align-items:center;width:36px;min-width:36px;height:36px;font-family:JetBrains Mono,monospace;font-size:14px;font-weight:800;display:flex}.ef-ex-meta{flex:1}.ef-ex-title{margin-bottom:4px;font-size:17px;font-weight:700}.ef-ex-desc{color:var(--muted);font-size:14px;line-height:1.5}.ef-ex-tags{flex-wrap:wrap;gap:6px;margin-top:10px;display:flex}.ef-tag{letter-spacing:1px;text-transform:uppercase;border-radius:var(--radius-xs);border:1px solid;padding:3px 8px;font-family:JetBrains Mono,monospace;font-size:10px}.ef-ex-body{background:var(--surface2);padding:24px}.ef-code-label{letter-spacing:2px;text-transform:uppercase;color:var(--muted);align-items:center;gap:8px;margin-bottom:8px;font-family:JetBrains Mono,monospace;font-size:11px;display:flex}.ef-code-label:after{content:"";background:var(--border);flex:1;height:1px}.ef-skeleton{background:var(--code-bg);border:1px solid var(--border);border-radius:var(--radius-none);color:#475569;white-space:pre;margin-bottom:20px;padding:20px;font-family:JetBrains Mono,monospace;font-size:13px;line-height:1.8;overflow-x:auto}.sk-kw{color:#7c3aed}.sk-fn{color:#2563eb}.sk-str{color:#059669}.sk-num{color:#c2410c}.sk-cmt{color:#94a3b8;font-style:italic}.sk-todo{color:#92400e;background:#d977061a;border-radius:3px;padding:0 4px;font-weight:600}.sk-ok{color:var(--accent2)}.sk-err{color:var(--accent3)}.ef-editor{background:var(--code-bg);border:1px solid var(--border);border-radius:var(--radius-none);color:var(--text);resize:vertical;tab-size:2;outline:none;width:100%;min-height:160px;padding:20px;font-family:JetBrains Mono,monospace;font-size:13px;line-height:1.8;transition:border-color .2s}.ef-editor:focus{border-color:var(--accent)}.ef-editor-mount{background:var(--code-bg);border:1px solid var(--border);border-radius:var(--radius-none);transition:border-color .2s;overflow:hidden}.ef-editor-mount:focus-within{border-color:var(--accent)}.ef-editor-mount .ef-cm-host,.ef-editor-mount .cm-editor{height:100%}.ef-editor-mount .cm-editor.cm-focused{outline:none}.ef-runtime-missing{color:var(--error);margin:0;padding:16px;font-size:13px}.ef-tests{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-none);margin-top:16px;display:none;overflow:hidden}.ef-tests.visible{display:block}.ef-tests-header{border-bottom:1px solid var(--border);letter-spacing:1px;text-transform:uppercase;color:var(--muted);background:#00000005;justify-content:space-between;align-items:center;gap:12px;padding:8px 16px;font-family:JetBrains Mono,monospace;font-size:11px;display:flex}.ef-tests-summary{font-variant-numeric:tabular-nums;color:var(--text)}.ef-tests-list{max-height:280px;margin:0;padding:0;list-style:none;overflow-y:auto}.ef-test-item{border-bottom:1px solid var(--border);align-items:flex-start;gap:10px;padding:10px 16px;font-size:13px;line-height:1.45;display:flex}.ef-test-item:last-child{border-bottom:none}.ef-test-icon{min-width:1ch;font-family:JetBrains Mono,monospace;font-weight:700}.ef-test-pass .ef-test-icon{color:var(--success)}.ef-test-fail .ef-test-icon{color:var(--error)}.ef-test-body{flex-direction:column;gap:2px;min-width:0;display:flex}.ef-test-body strong{color:var(--text);font-weight:600}.ef-test-body span{color:var(--muted);word-break:break-word;font-size:12px}.ef-test-pass .ef-test-body span{color:var(--success)}.ef-test-fail .ef-test-body span{color:var(--error)}.ef-preview{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-none);margin-top:16px;overflow:hidden}.ef-preview-header{border-bottom:1px solid var(--border);letter-spacing:1px;text-transform:uppercase;color:var(--muted);background:#00000005;padding:8px 16px;font-family:JetBrains Mono,monospace;font-size:11px}.ef-preview-body{background:#fff;height:280px;min-height:220px}.ef-preview-iframe{background:#fff;border:0;width:100%;height:100%;display:block}.ef-actions{flex-wrap:wrap;align-items:center;gap:10px;margin-top:16px;display:flex}.ef-btn{border-radius:var(--radius-none);cursor:pointer;letter-spacing:.5px;border:none;align-items:center;gap:8px;padding:10px 20px;font-family:JetBrains Mono,monospace;font-size:13px;font-weight:600;transition:all .15s;display:flex}.ef-btn:active{transform:scale(.97)}.ef-btn:disabled{opacity:.6;cursor:not-allowed}.ef-btn-run{background:var(--accent);color:#fff}.ef-btn-run:hover:not(:disabled){background:var(--color-primary-active)}.ef-btn-hint{color:var(--muted);border:1px solid var(--border);background:0 0}.ef-btn-hint:hover{border-color:var(--accent);color:var(--accent)}.ef-btn-reset{color:var(--muted);border:1px solid var(--border);background:0 0;margin-left:auto}.ef-btn-reset:hover{border-color:var(--accent3);color:var(--accent3)}.ef-hint{border-radius:var(--radius-none);color:var(--muted);background:#4f46e50a;border:1px solid #4f46e526;margin-top:12px;padding:16px;font-size:13px;line-height:1.7;display:none}.ef-hint.visible{display:block}.ef-hint strong{color:var(--accent)}.ef-hint code{border-radius:var(--radius-xs);background:#4f46e514;padding:1px 5px;font-family:JetBrains Mono,monospace;font-size:12px}.ef-output{background:var(--code-bg);border:1px solid var(--border);border-radius:var(--radius-none);margin-top:16px;display:none;overflow:hidden}.ef-output.visible{display:block}.ef-output-header{border-bottom:1px solid var(--border);color:var(--muted);background:#00000005;align-items:center;gap:8px;padding:8px 16px;font-family:JetBrains Mono,monospace;font-size:11px;display:flex}.ef-dot{background:var(--muted);border-radius:50%;width:8px;height:8px}.ef-dot-green{background:var(--success)}.ef-dot-red{background:var(--error)}.ef-dot-yellow{background:var(--warn);animation:1s infinite ef-pulse}@keyframes ef-pulse{0%,to{opacity:1}50%{opacity:.4}}.ef-output-content{color:var(--text);white-space:pre-wrap;word-break:break-word;max-height:320px;padding:16px;font-family:JetBrains Mono,monospace;font-size:13px;line-height:1.7;overflow-y:auto}.ef-output-content .log-ok{color:var(--accent2)}.ef-output-content .log-err{color:var(--accent3)}.ef-output-content .log-info{color:var(--accent4)}.ef-output-content .log-warn{color:var(--warn)}.ef-extra{margin-top:16px}.ef-spinner{border:2px solid #ffffff4d;border-top-color:#fff;border-radius:50%;width:12px;height:12px;animation:.6s linear infinite ef-spin;display:inline-block}@keyframes ef-spin{to{transform:rotate(360deg)}}.ef-options{flex-direction:column;gap:10px;margin-bottom:4px;display:flex}.ef-option{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-none);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:12px;padding:14px 18px;transition:border-color .15s,background .15s;display:flex}.ef-option:hover{background:#4f46e505;border-color:#b0b8c9}.ef-option.selected{border-color:var(--accent);background:#4f46e50a}.ef-option.correct{border-color:var(--success);background:#16a34a0f}.ef-option.wrong{border-color:var(--error);background:#dc26260f}.ef-option input{display:none}.ef-option-marker{border:2px solid var(--border);border-radius:50%;width:20px;min-width:20px;height:20px;transition:border-color .15s,background .15s;position:relative}.ef-option.selected .ef-option-marker{border-color:var(--accent)}.ef-option.selected .ef-option-marker:after{content:"";background:var(--accent);border-radius:50%;width:8px;height:8px;position:absolute;top:4px;left:4px}.ef-option.correct .ef-option-marker{border-color:var(--success);background:var(--success)}.ef-option.correct .ef-option-marker:after{content:"✓";color:#fff;background:0 0;border-radius:0;width:auto;height:auto;font-size:12px;font-weight:800;position:absolute;top:-1px;left:2px}.ef-option.wrong .ef-option-marker{border-color:var(--error);background:var(--error)}.ef-option.wrong .ef-option-marker:after{content:"✕";color:#fff;background:0 0;border-radius:0;width:auto;height:auto;font-size:12px;font-weight:800;position:absolute;top:-1px;left:3px}.ef-option-text{color:var(--text);font-size:14px;line-height:1.5}.ef-option.correct .ef-option-text{color:var(--success)}.ef-option.wrong .ef-option-text{color:var(--error);opacity:.7}input[type=checkbox]+.ef-option-marker{border-radius:var(--radius-xs)}input[type=checkbox]+.ef-option-marker:after{border-radius:2px}.ef-open-editor{background:var(--code-bg);border:1px solid var(--border);border-radius:var(--radius-none);color:var(--text);resize:vertical;outline:none;width:100%;min-height:120px;padding:20px;font-family:Inter,sans-serif;font-size:14px;line-height:1.7;transition:border-color .2s}.ef-open-editor:focus{border-color:var(--accent)}.ef-char-count{color:var(--muted);margin-top:6px;font-family:JetBrains Mono,monospace;font-size:11px;transition:color .2s}.ef-char-count.ef-char-ok{color:var(--success)}.ef-exam-timer{color:var(--text);border:1px solid var(--border);border-radius:var(--radius-none);background:var(--surface);letter-spacing:2px;margin-left:auto;padding:6px 14px;font-family:JetBrains Mono,monospace;font-size:16px;font-weight:700;transition:color .3s,border-color .3s}.ef-timer-warn{color:var(--warn);border-color:#d9770666;animation:1s infinite ef-pulse}.ef-timer-critical{color:var(--error);border-color:#dc262666;animation:.5s infinite ef-pulse}#ef-exam-submit-wrap{flex-wrap:wrap;justify-content:center;gap:12px;margin-top:40px;display:flex}.ef-btn-exam-submit{border-radius:var(--radius-none);cursor:pointer;background:var(--accent);color:#fff;letter-spacing:1px;border:none;align-items:center;gap:10px;padding:14px 40px;font-family:JetBrains Mono,monospace;font-size:15px;font-weight:700;transition:all .15s;display:flex}.ef-btn-exam-submit:hover:not(:disabled){background:var(--color-primary-active)}.ef-btn-exam-submit:active{transform:scale(.97)}.ef-btn-exam-submit:disabled{opacity:.5;cursor:not-allowed}#ef-exam-score-overlay{-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);z-index:1000;background:#ffffffb3;justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}.ef-exam-score{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-none);text-align:center;width:100%;max-width:520px;padding:40px}.ef-score-header{letter-spacing:3px;text-transform:uppercase;color:var(--muted);margin-bottom:20px;font-family:JetBrains Mono,monospace;font-size:12px}.ef-score-pct{color:var(--accent);margin-bottom:8px;font-size:56px;font-weight:800;line-height:1}.ef-score-summary{color:var(--muted);margin-bottom:24px;font-size:15px}.ef-score-pending-note{color:var(--warn);margin-bottom:20px;font-size:13px;font-style:italic}.ef-score-details{text-align:left;max-height:260px;margin-bottom:24px;overflow-y:auto}.ef-score-row{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:10px 12px;font-size:13px;display:flex}.ef-score-row:last-child{border-bottom:none}.ef-score-title{color:var(--text);flex:1;margin-right:12px}.ef-score-ok{color:var(--success)}.ef-score-fail{color:var(--error)}.ef-score-pending{color:var(--warn);font-family:JetBrains Mono,monospace;font-size:11px}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.ef-preview-banner{border-radius:var(--radius);color:var(--text);background:#16a34a1a;border:1px solid #16a34a59;margin-top:14px;padding:10px 14px;font-size:13px;line-height:1.45}.ef-gabarito-panel{background:var(--surface2);border:1px solid var(--border);border-radius:var(--radius);margin-top:14px;padding:14px 16px;font-size:13px;line-height:1.5}.ef-gabarito-title{text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin-bottom:8px;font-family:JetBrains Mono,monospace;font-size:11px;font-weight:700}.ef-gabarito-code{background:var(--code-bg);border:1px solid var(--border);border-radius:var(--radius-none);white-space:pre-wrap;word-break:break-word;margin-top:8px;padding:12px 14px;font-family:JetBrains Mono,monospace;font-size:12px;overflow-x:auto}.ef-gabarito-inline{border-radius:var(--radius);background:#4f46e50f;border:1px solid #4f46e540;margin-top:14px;padding:12px 14px;font-size:13px;line-height:1.5}.ef-gabarito-inline-title{text-transform:uppercase;letter-spacing:.06em;color:var(--accent);margin-bottom:8px;font-family:JetBrains Mono,monospace;font-size:11px;font-weight:700}.ef-gabarito-inline-list{color:var(--text);margin:0;padding-left:18px}.ef-gabarito-inline-list li{margin-bottom:4px}.ef-gabarito-opt-id{color:var(--success);font-family:JetBrains Mono,monospace;font-weight:700}.ef-gabarito-inline-code{background:var(--code-bg);border:1px solid var(--border);border-radius:var(--radius-none);white-space:pre-wrap;word-break:break-word;margin-top:8px;padding:12px 14px;font-family:JetBrains Mono,monospace;font-size:12px;overflow-x:auto}.ef-preview-omit-note{color:var(--muted);margin-top:12px;font-size:12px;font-style:italic}
