.login-page{display:grid;place-items:center;min-height:100dvh;padding:var(--space-4)}.login-card{width:100%;max-width:400px;background:var(--color-bg-raised);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-10) var(--space-8);box-shadow:var(--shadow-md)}.login-header{text-align:left;margin-bottom:var(--space-8)}.login-header h1{font-family:var(--font-display);font-size:var(--text-2xl);font-weight:700;color:var(--color-text);margin-bottom:var(--space-2)}.login-subtitle{color:var(--color-text-secondary);font-size:var(--text-sm);margin-bottom:0}.login-form{display:flex;flex-direction:column;gap:var(--space-5)}.login-actions{display:flex;gap:var(--space-3);justify-content:space-between;align-items:center}.login-actions .btn-primary{flex:1}.course-page{min-height:100dvh;padding:var(--space-8) var(--space-4)}.course-container{max-width:720px;margin:0 auto}.course-header{margin-bottom:var(--space-10)}.course-header-top{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-4);margin-bottom:var(--space-6)}.course-header h1{font-size:var(--text-3xl);margin-bottom:var(--space-2)}.course-description{color:var(--color-text-secondary);font-size:var(--text-base);max-width:50ch;margin-bottom:0}.course-header-actions{display:flex;align-items:center;gap:var(--space-3);flex-shrink:0}.course-student-name{font-size:var(--text-sm);color:var(--color-text-secondary);font-weight:500}.course-progress{background:var(--color-bg-raised);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-4)}.course-progress-label{display:flex;justify-content:space-between;font-size:var(--text-sm);color:var(--color-text-secondary);margin-bottom:var(--space-2)}.course-progress-percent{font-weight:600;color:var(--color-primary)}.course-progress-track{height:6px;background:var(--color-bg-sunken);border-radius:999px;overflow:hidden}.course-progress-fill{height:100%;background:var(--color-primary);border-radius:999px;transition:width .6s var(--ease-out)}.course-chapters{display:flex;flex-direction:column;gap:var(--space-3)}.course-chapter{display:flex;align-items:center;gap:var(--space-4);padding:var(--space-4) var(--space-5);background:var(--color-bg-raised);border:1px solid var(--color-border);border-radius:var(--radius-md);cursor:pointer;text-align:left;width:100%;font-family:var(--font-body);transition:border-color var(--duration-fast) var(--ease-out),transform var(--duration-fast) var(--ease-out),box-shadow var(--duration-fast) var(--ease-out)}.course-chapter:hover:not(:disabled){border-color:var(--color-border-strong);box-shadow:var(--shadow-sm)}.course-chapter:active:not(:disabled){transform:scale(.99)}.course-chapter--locked{cursor:not-allowed;opacity:.5}.course-chapter--locked:hover{border-color:var(--color-border);box-shadow:none}.course-chapter--completed{border-color:var(--color-success-light)}.course-chapter-number{flex-shrink:0;width:36px;height:36px;display:flex;align-items:center;justify-content:center;border-radius:50%;font-size:var(--text-sm);font-weight:700;color:var(--color-primary);background:var(--color-primary-faint)}.course-chapter--completed .course-chapter-number{color:var(--color-success);background:var(--color-success-light)}.course-chapter--locked .course-chapter-number{color:var(--color-text-tertiary);background:var(--color-bg-sunken)}.course-chapter-content{flex:1;min-width:0}.course-chapter-title{font-size:var(--text-base);font-weight:600;color:var(--color-text);line-height:1.4}.course-chapter-description{font-size:var(--text-sm);color:var(--color-text-secondary);margin-top:2px;line-height:1.4}.course-chapter-arrow{flex-shrink:0;color:var(--color-text-tertiary)}.course-skeleton{display:flex;flex-direction:column;gap:var(--space-4)}.skeleton-line{height:20px;background:var(--color-bg-sunken);border-radius:var(--radius-sm);animation:skeleton-pulse 1.5s ease-in-out infinite}.skeleton-line--wide{width:60%;height:28px}.skeleton-line--medium{width:40%}.skeleton-block{height:64px;background:var(--color-bg-sunken);border-radius:var(--radius-md);animation:skeleton-pulse 1.5s ease-in-out infinite}.skeleton-block:nth-child(4){animation-delay:.1s}.skeleton-block:nth-child(5){animation-delay:.2s}@keyframes skeleton-pulse{0%,to{opacity:.5}50%{opacity:.8}}.course-error{text-align:center;padding:var(--space-16) 0;color:var(--color-text-secondary)}.course-error p{margin-bottom:var(--space-4)}@media (max-width: 640px){.course-header-top{flex-direction:column;gap:var(--space-4)}.course-header-actions{width:100%;justify-content:space-between}.course-header h1{font-size:var(--text-2xl)}.course-chapter{padding:var(--space-3) var(--space-4)}}.content-renderer{display:flex;flex-direction:column;gap:var(--space-6);max-width:760px}.block-text{line-height:1.7}.block-text p,.block-text ul,.block-text ol{max-width:68ch}.block-image{margin:0}.block-image-wrapper{position:relative;border-radius:var(--radius-md);overflow:hidden;background:var(--color-bg-sunken);min-height:120px}.block-image-wrapper img{display:block;width:100%;height:auto;transition:opacity .3s ease-out}.block-image-skeleton{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(90deg,var(--color-bg-sunken) 25%,var(--color-divider) 50%,var(--color-bg-sunken) 75%);background-size:200% 100%;animation:shimmer 1.5s ease-in-out infinite}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.block-image-error{padding:var(--space-8);text-align:center;color:var(--color-text-tertiary);font-size:var(--text-sm)}.block-image figcaption,.block-video figcaption,.block-plotly figcaption{font-size:var(--text-sm);color:var(--color-text-tertiary);margin-top:var(--space-2);font-style:italic}.block-code{border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg-sunken);overflow:hidden}.block-code-header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-2) var(--space-4);border-bottom:1px solid var(--color-border);background:#e3ddd6}.block-code-lang{font-family:var(--font-code);font-size:var(--text-xs);font-weight:500;color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.05em}.block-code-copy{display:inline-flex;align-items:center;gap:var(--space-1);font-family:var(--font-body);font-size:var(--text-xs);color:var(--color-text-secondary);background:transparent;border:none;padding:var(--space-1) var(--space-2);border-radius:var(--radius-sm);cursor:pointer;transition:background var(--duration-fast) var(--ease-out),color var(--duration-fast) var(--ease-out)}.block-code-copy:hover{background:var(--color-border);color:var(--color-text)}.block-code-copy:active{transform:scale(.97)}.block-video{margin:0}.block-video-wrapper{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:var(--radius-md);background:var(--color-bg-sunken)}.block-video-wrapper iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:none}.block-video-error{padding:var(--space-6);text-align:center;color:var(--color-text-tertiary);font-size:var(--text-sm);background:var(--color-bg-sunken);border-radius:var(--radius-md)}.block-video-error a{color:var(--color-primary)}.block-plotly{margin:0}.block-plotly-placeholder{display:flex;align-items:center;justify-content:center;gap:var(--space-3);min-height:300px;background:var(--color-bg-sunken);border:1px solid var(--color-border);border-radius:var(--radius-md);color:var(--color-text-tertiary);font-size:var(--text-sm)}.block-plotly-spinner{width:20px;height:20px;border:2px solid var(--color-border-strong);border-top-color:var(--color-primary);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.block-plotly-chart{border-radius:var(--radius-md);overflow:hidden}.block-plotly-chart .plotly .modebar{opacity:.5;transition:opacity .2s ease}.block-plotly-chart .plotly:hover .modebar{opacity:1}.block-plotly-error{padding:var(--space-6);text-align:center;color:var(--color-error);background:var(--color-error-light);border-radius:var(--radius-md);font-size:var(--text-sm)}.block-exercise{border:1px solid var(--color-border);border-radius:var(--radius-lg);background:var(--color-bg-raised);padding:var(--space-6);margin:var(--space-4) 0}.block-exercise-header{margin-bottom:var(--space-4)}.block-exercise-badge{display:inline-block;font-family:var(--font-body);font-size:var(--text-xs);font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--color-primary);background:var(--color-primary-faint);padding:var(--space-1) var(--space-3);border-radius:999px}.block-exercise-instruction{font-size:var(--text-base);color:var(--color-text);margin-bottom:var(--space-4);max-width:68ch;line-height:1.6}.block-exercise--submitted .block-exercise-badge{color:var(--color-success);background:var(--color-success-light)}.block-exercise-questions{display:flex;flex-direction:column;gap:var(--space-6);margin-bottom:var(--space-5)}.exercise-question{display:flex;gap:var(--space-3)}.exercise-question-number{flex-shrink:0;font-family:var(--font-body);font-size:var(--text-sm);font-weight:700;color:var(--color-primary);width:28px;height:28px;display:flex;align-items:center;justify-content:center;background:var(--color-primary-faint);border-radius:50%;margin-top:2px}.exercise-question-prompt{margin-bottom:var(--space-3);max-width:65ch}.exercise-question-prompt p{margin-bottom:0}.exercise-mcq{flex:1;min-width:0}.exercise-mcq-options{display:flex;flex-direction:column;gap:var(--space-2)}.exercise-mcq-option{display:flex;align-items:flex-start;gap:var(--space-3);padding:var(--space-3) var(--space-4);border:1px solid var(--color-border);border-radius:var(--radius-md);cursor:pointer;transition:border-color var(--duration-fast) var(--ease-out),background var(--duration-fast) var(--ease-out)}.exercise-mcq-option:hover:not(.exercise-mcq-option--locked){border-color:var(--color-border-strong);background:var(--color-bg-sunken)}.exercise-mcq-option--selected{border-color:var(--color-primary);background:var(--color-primary-faint)}.exercise-mcq-option--selected:hover:not(.exercise-mcq-option--locked){background:var(--color-primary-faint)}.exercise-mcq-option--locked{cursor:default;opacity:.85}.exercise-mcq-option input[type=radio]{position:absolute;opacity:0;width:0;height:0}.exercise-mcq-indicator{flex-shrink:0;width:18px;height:18px;border:2px solid var(--color-border-strong);border-radius:50%;margin-top:2px;position:relative;transition:border-color var(--duration-fast) var(--ease-out)}.exercise-mcq-option--selected .exercise-mcq-indicator{border-color:var(--color-primary)}.exercise-mcq-option--selected .exercise-mcq-indicator:after{content:"";position:absolute;top:3px;left:3px;width:8px;height:8px;border-radius:50%;background:var(--color-primary)}.exercise-mcq-label{font-size:var(--text-base);line-height:1.5}.exercise-open-text{flex:1;min-width:0}.exercise-open-text-input{width:100%;font-family:var(--font-body);font-size:var(--text-base);line-height:1.6;padding:var(--space-3) var(--space-4);border:1px solid var(--color-border-strong);border-radius:var(--radius-md);background:var(--color-bg-input);color:var(--color-text);resize:vertical;min-height:100px;transition:border-color var(--duration-fast) var(--ease-out),box-shadow var(--duration-fast) var(--ease-out);outline:none}.exercise-open-text-input::placeholder{color:var(--color-text-tertiary)}.exercise-open-text-input:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-faint)}.exercise-open-text-locked{padding:var(--space-3) var(--space-4);background:var(--color-bg-sunken);border:1px solid var(--color-border);border-radius:var(--radius-md);font-size:var(--text-base);line-height:1.6;color:var(--color-text);white-space:pre-wrap}.exercise-open-text-count{font-size:var(--text-xs);color:var(--color-text-tertiary);margin-top:var(--space-1);text-align:right}.exercise-open-text-count--met{color:var(--color-success)}.block-exercise-submit{width:100%;margin-top:var(--space-2)}.block-exercise-error{font-size:var(--text-sm);color:var(--color-error);background:var(--color-error-light);padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);margin-bottom:var(--space-3)}.block-exercise-solution{margin-top:var(--space-6);padding-top:var(--space-5);border-top:1px solid var(--color-border)}.block-exercise-solution-header{font-family:var(--font-body);font-size:var(--text-xs);font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--color-success);margin-bottom:var(--space-4)}.block-caption{font-size:var(--text-sm);color:var(--color-text-tertiary);margin-top:var(--space-2);font-style:italic}@media (max-width: 640px){.content-renderer{gap:var(--space-4)}.block-code-header{padding:var(--space-1) var(--space-3)}.block-exercise{padding:var(--space-4)}}.chapter-page{min-height:100dvh;padding:var(--space-6) var(--space-4) var(--space-16)}.chapter-container{max-width:760px;margin:0 auto}.chapter-nav{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-8)}.chapter-nav .btn-secondary{display:flex;align-items:center;gap:var(--space-2)}.chapter-nav-student{font-size:var(--text-sm);color:var(--color-text-tertiary)}.chapter-header{margin-bottom:var(--space-10)}.chapter-header h1{font-size:var(--text-3xl);margin-bottom:var(--space-2)}.chapter-description{color:var(--color-text-secondary);font-size:var(--text-lg);max-width:60ch;margin-bottom:0}.chapter-footer{margin-top:var(--space-12);padding-top:var(--space-8);border-top:1px solid var(--color-divider)}.chapter-complete-btn{width:100%;padding:var(--space-4) var(--space-6);font-size:var(--text-base)}.chapter-complete-error{font-size:var(--text-sm);color:var(--color-error);background:var(--color-error-light);padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);margin-bottom:var(--space-4)}.chapter-completed-banner{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-4) var(--space-5);background:var(--color-success-light);color:var(--color-success);border-radius:var(--radius-md);font-weight:600;font-size:var(--text-base)}.chapter-footer-nav{display:flex;gap:var(--space-3);justify-content:space-between;align-items:center;margin-top:var(--space-6)}.chapter-course-done{font-size:var(--text-base);font-weight:600;color:var(--color-primary);font-family:var(--font-display)}.chapter-skeleton{display:flex;flex-direction:column;gap:var(--space-4);padding-top:var(--space-12)}.chapter-error{text-align:center;padding:var(--space-16) 0;color:var(--color-text-secondary)}.chapter-error p{margin-bottom:var(--space-4)}@media (max-width: 640px){.chapter-header h1{font-size:var(--text-2xl)}.chapter-page{padding:var(--space-4) var(--space-3) var(--space-12)}.chapter-footer-nav{flex-direction:column}.chapter-footer-nav .btn-primary,.chapter-footer-nav .btn-secondary{width:100%;text-align:center;justify-content:center}}.instructor-page{min-height:100dvh;padding:var(--space-8) var(--space-4)}.instructor-container{max-width:960px;margin:0 auto}.instructor-header{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-4);margin-bottom:var(--space-8)}.instructor-header h1{font-size:var(--text-2xl);margin-bottom:var(--space-1)}.instructor-subtitle{color:var(--color-text-secondary);font-size:var(--text-sm);margin-bottom:0}.instructor-header-actions{display:flex;gap:var(--space-2);flex-shrink:0}.instructor-table{width:100%;border-collapse:collapse;font-size:var(--text-sm)}.instructor-table th{text-align:left;font-weight:600;color:var(--color-text-secondary);font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.05em;padding:var(--space-3) var(--space-4);border-bottom:2px solid var(--color-border)}.instructor-table td{padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--color-divider);vertical-align:middle}.instructor-table tbody tr:hover{background:var(--color-bg-sunken)}.instructor-student-link{font-family:var(--font-body);font-size:var(--text-sm);font-weight:600;color:var(--color-primary);background:none;border:none;cursor:pointer;padding:0;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px}.instructor-student-link:hover{color:var(--color-primary-hover)}.access-code{font-family:var(--font-code);font-size:var(--text-xs);background:var(--color-bg-sunken);padding:2px 6px;border-radius:var(--radius-sm);letter-spacing:.03em}.instructor-date{color:var(--color-text-tertiary);font-size:var(--text-xs);white-space:nowrap}.instructor-progress-cell{display:flex;align-items:center;gap:var(--space-2)}.instructor-progress-bar{flex:1;height:4px;background:var(--color-bg-sunken);border-radius:999px;overflow:hidden;max-width:80px}.instructor-progress-fill{height:100%;background:var(--color-primary);border-radius:999px;transition:width .4s var(--ease-out)}.instructor-progress-text{font-size:var(--text-xs);color:var(--color-text-tertiary);white-space:nowrap}.instructor-badge{display:inline-block;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;padding:2px 8px;border-radius:999px;margin-left:var(--space-2);white-space:nowrap}.instructor-badge--done{color:var(--color-success);background:var(--color-success-light)}.instructor-badge--pending{color:var(--color-text-tertiary);background:var(--color-bg-sunken)}.instructor-badge--correct{color:var(--color-success);background:var(--color-success-light)}.instructor-badge--wrong{color:var(--color-error);background:var(--color-error-light)}.instructor-upload-panel{background:var(--color-bg-raised);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-6);margin-bottom:var(--space-8)}.instructor-upload-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-3)}.instructor-upload-header h2{font-size:var(--text-lg);margin:0}.instructor-upload-close{font-family:var(--font-body);font-size:var(--text-sm);color:var(--color-text-secondary);background:none;border:none;cursor:pointer;padding:var(--space-1) var(--space-2)}.instructor-upload-close:hover{color:var(--color-text)}.instructor-upload-help{font-size:var(--text-sm);color:var(--color-text-secondary);margin-bottom:var(--space-4)}.instructor-upload-help code{font-size:.85em}.instructor-upload-textarea{width:100%;font-family:var(--font-code);font-size:var(--text-sm);line-height:1.6;padding:var(--space-3) var(--space-4);border:1px solid var(--color-border-strong);border-radius:var(--radius-md);background:var(--color-bg-input);color:var(--color-text);resize:vertical;margin-bottom:var(--space-3);outline:none}.instructor-upload-textarea:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-faint)}.instructor-upload-results{margin-top:var(--space-5);padding-top:var(--space-4);border-top:1px solid var(--color-divider)}.instructor-upload-results h3{font-size:var(--text-base);margin-bottom:var(--space-2)}.instructor-upload-hint{font-size:var(--text-sm);color:var(--color-text-secondary);margin-bottom:var(--space-3)}.instructor-loading{text-align:center;padding:var(--space-16) 0;color:var(--color-text-tertiary)}.instructor-error{text-align:center;padding:var(--space-8) 0;color:var(--color-text-secondary)}.instructor-error p{margin-bottom:var(--space-3)}.instructor-empty{text-align:center;padding:var(--space-16) 0;color:var(--color-text-tertiary)}.instructor-empty p{margin-bottom:var(--space-4)}.instructor-detail-nav{margin-bottom:var(--space-6)}.instructor-detail-nav .btn-secondary{display:flex;align-items:center;gap:var(--space-2)}.instructor-detail-header{margin-bottom:var(--space-8)}.instructor-detail-header h1{font-size:var(--text-2xl);margin-bottom:var(--space-1)}.instructor-chapters{display:flex;flex-direction:column;gap:var(--space-8)}.instructor-chapter-section{border-top:1px solid var(--color-border);padding-top:var(--space-5)}.instructor-chapter-heading{display:flex;align-items:baseline;gap:var(--space-3);margin-bottom:var(--space-4);flex-wrap:wrap}.instructor-chapter-heading h2{font-size:var(--text-lg);margin:0}.instructor-no-exercises{font-size:var(--text-sm);color:var(--color-text-tertiary);font-style:italic}.instructor-exercise{background:var(--color-bg-raised);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-4);margin-bottom:var(--space-3)}.instructor-exercise-header{display:flex;align-items:center;gap:var(--space-3);margin-bottom:var(--space-3)}.instructor-exercise-id{font-family:var(--font-code);font-size:var(--text-xs);color:var(--color-text-secondary)}.instructor-answers{display:flex;flex-direction:column;gap:var(--space-3)}.instructor-answer{padding-left:var(--space-4);border-left:2px solid var(--color-divider)}.instructor-answer-header{display:flex;align-items:center;gap:var(--space-2);margin-bottom:var(--space-1)}.instructor-answer-qid{font-family:var(--font-code);font-size:var(--text-xs);color:var(--color-text-tertiary)}.instructor-answer-type{font-size:10px;text-transform:uppercase;color:var(--color-text-tertiary);letter-spacing:.05em}.instructor-answer-value{font-size:var(--text-sm);color:var(--color-text);line-height:1.5}.instructor-answer-value--long{white-space:pre-wrap;background:var(--color-bg-sunken);padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);font-size:var(--text-sm)}@media (max-width: 768px){.instructor-header{flex-direction:column}.instructor-header-actions{width:100%;justify-content:flex-end}.instructor-student-table{font-size:var(--text-xs)}.instructor-student-table th:nth-child(2),.instructor-student-table td:nth-child(2){display:none}}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--color-bg: oklch(95.5% .015 70);--color-bg-raised: oklch(97% .012 70);--color-bg-sunken: oklch(92% .018 70);--color-bg-input: oklch(98% .008 70);--color-primary: oklch(42% .14 25);--color-primary-hover: oklch(37% .14 25);--color-primary-light: oklch(90% .04 25);--color-primary-faint: oklch(95% .02 25);--color-text: oklch(25% .01 70);--color-text-secondary: oklch(45% .01 70);--color-text-tertiary: oklch(60% .008 70);--color-text-on-primary: oklch(97% .005 70);--color-border: oklch(85% .01 70);--color-border-strong: oklch(75% .012 70);--color-divider: oklch(88% .008 70);--color-success: oklch(52% .1 145);--color-success-light: oklch(92% .03 145);--color-error: oklch(52% .15 25);--color-error-light: oklch(93% .03 25);--color-warning: oklch(60% .12 75);--font-display: "Source Serif 4", "Georgia", serif;--font-body: "Karla", system-ui, sans-serif;--font-code: "Fira Code", "Consolas", monospace;--text-xs: .75rem;--text-sm: .875rem;--text-base: 1rem;--text-lg: 1.125rem;--text-xl: 1.25rem;--text-2xl: 1.5rem;--text-3xl: 1.875rem;--text-4xl: 2.25rem;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--space-10: 40px;--space-12: 48px;--space-16: 64px;--space-24: 96px;--radius-sm: 4px;--radius-md: 8px;--radius-lg: 12px;--shadow-sm: 0 1px 3px oklch(50% .01 70 / .1);--shadow-md: 0 4px 12px oklch(50% .01 70 / .1);--ease-out: cubic-bezier(.16, 1, .3, 1);--duration-fast: .15s;--duration-normal: .25s}html{font-size:16px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{font-family:var(--font-body);font-size:var(--text-base);line-height:1.6;color:var(--color-text);background-color:var(--color-bg);min-height:100dvh}h1,h2,h3,h4{font-family:var(--font-display);font-weight:600;line-height:1.25;color:var(--color-text);letter-spacing:-.01em}h1{font-size:var(--text-3xl);margin-bottom:var(--space-6)}h2{font-size:var(--text-2xl);margin-top:var(--space-10);margin-bottom:var(--space-4)}h3{font-size:var(--text-xl);margin-top:var(--space-8);margin-bottom:var(--space-3)}h4{font-size:var(--text-lg);margin-top:var(--space-6);margin-bottom:var(--space-2)}p{margin-bottom:var(--space-4);max-width:68ch}strong{font-weight:600}em{font-style:italic}a{color:var(--color-primary);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px;transition:color var(--duration-fast) var(--ease-out)}a:hover{color:var(--color-primary-hover)}code{font-family:var(--font-code);font-size:.9em;background:var(--color-bg-sunken);padding:2px 6px;border-radius:var(--radius-sm)}pre{font-family:var(--font-code);font-size:var(--text-sm);line-height:1.7;background:var(--color-bg-sunken);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-4);overflow-x:auto;margin-bottom:var(--space-4)}pre code{background:none;padding:0;font-size:inherit}ul,ol{margin-bottom:var(--space-4);padding-left:var(--space-6)}li{margin-bottom:var(--space-2)}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}.btn-primary{font-family:var(--font-body);font-size:var(--text-base);font-weight:600;color:var(--color-text-on-primary);background:var(--color-primary);border:none;border-radius:var(--radius-md);padding:var(--space-3) var(--space-6);cursor:pointer;transition:background var(--duration-fast) var(--ease-out),transform var(--duration-fast) var(--ease-out)}.btn-primary:hover:not(:disabled){background:var(--color-primary-hover)}.btn-primary:active:not(:disabled){transform:scale(.97)}.btn-primary:disabled{opacity:.5;cursor:not-allowed}.btn-secondary{font-family:var(--font-body);font-size:var(--text-sm);font-weight:500;color:var(--color-text-secondary);background:transparent;border:1px solid var(--color-border-strong);border-radius:var(--radius-md);padding:var(--space-3) var(--space-5);cursor:pointer;transition:background var(--duration-fast) var(--ease-out),transform var(--duration-fast) var(--ease-out)}.btn-secondary:hover:not(:disabled){background:var(--color-bg-sunken)}.btn-secondary:active:not(:disabled){transform:scale(.97)}.btn-sm{font-size:var(--text-xs);padding:var(--space-2) var(--space-3)}.form-group{display:flex;flex-direction:column;gap:var(--space-2)}.form-group label{font-size:var(--text-sm);font-weight:600;color:var(--color-text)}.form-group input{font-family:var(--font-body);font-size:var(--text-base);padding:var(--space-3) var(--space-4);border:1px solid var(--color-border-strong);border-radius:var(--radius-md);background:var(--color-bg-input);color:var(--color-text);transition:border-color var(--duration-fast) var(--ease-out),box-shadow var(--duration-fast) var(--ease-out);outline:none}.form-group input::placeholder{color:var(--color-text-tertiary)}.form-group input:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-faint)}.form-group input:disabled{opacity:.6;cursor:not-allowed}.form-helper{font-size:var(--text-xs);color:var(--color-text-tertiary)}.form-error{font-size:var(--text-sm);color:var(--color-error);background:var(--color-error-light);padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);margin:0}
