:root{--bg:#0f1418;--bg-elevated:#161d24;--bg-card:#1b232b;--border:#2a343d;--text:#e6edf3;--text-muted:#8b98a5;--accent:#4fb3ff;--accent-strong:#2f8fe0;--success:#3fbf7f;--danger:#e0554f;--radius:8px}*{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--bg);color:var(--text);margin:0;font-family:Pretendard,Apple SD Gothic Neo,Noto Sans KR,-apple-system,BlinkMacSystemFont,system-ui,sans-serif;line-height:1.5}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}button{font-family:inherit}.app-shell{flex-direction:column;min-height:100%;display:flex}.topbar{background:var(--bg-elevated);border-bottom:1px solid var(--border);z-index:10;align-items:center;gap:24px;height:56px;padding:0 24px;display:flex;position:sticky;top:0}.brand{color:var(--text);white-space:nowrap;font-size:1rem;font-weight:700}.brand:hover{color:var(--accent);text-decoration:none}.topbar-nav{flex:1;gap:16px;display:flex}.topbar-nav a{color:var(--text-muted)}.topbar-nav a:hover{color:var(--text);text-decoration:none}.topbar-actions{align-items:center;gap:12px;display:flex}.username{color:var(--text-muted);font-size:.9rem}.subject-badge{border:1px solid var(--accent-strong);border-radius:var(--radius);background:#2f8fe01f;align-items:center;gap:10px;padding:6px 8px 6px 14px;display:flex}.subject-badge-icon{font-size:1rem}.subject-badge-label{flex-direction:column;line-height:1.2;display:flex}.subject-badge-caption{color:var(--text-muted);font-size:.7rem}.subject-badge-title{color:var(--text);font-size:.9rem;font-weight:700}.subject-badge-empty{color:var(--text-muted);font-style:italic}.subject-badge-switch{border:1px solid var(--accent-strong);border-radius:var(--radius);background:var(--accent-strong);color:#fff;cursor:pointer;white-space:nowrap;padding:5px 12px;font-size:.8rem;font-weight:600;transition:background .12s}.subject-badge-switch:hover{background:var(--accent)}.version-banner{border:1px solid var(--accent-strong);border-radius:var(--radius);color:var(--text);background:#2f8fe01a;border-left-width:4px;justify-content:space-between;align-items:center;gap:8px;margin-bottom:20px;padding:10px 14px;font-size:.9rem;display:flex}.version-banner strong{color:var(--accent)}.version-banner-link{white-space:nowrap;color:var(--accent);font-weight:600;text-decoration:none}.version-banner-link:hover{text-decoration:underline}.subjects-page{flex-direction:column;gap:20px;display:flex}.subjects-grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px;display:grid}.subject-card{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-elevated);flex-direction:column;gap:10px;padding:20px;display:flex}.subject-card.subject-card-current{border-color:var(--accent-strong);box-shadow:0 0 0 1px var(--accent-strong)}.subject-card-title{margin:0;font-size:1.1rem}.subject-card-desc{color:var(--text-muted);flex:1;font-size:.9rem}.subject-card-meta{color:var(--text-muted);gap:12px;font-size:.85rem;display:flex}.app-main{flex:1;width:100%;max-width:960px;margin:0 auto;padding:32px 24px 64px}.app-loading{text-align:center;color:var(--text-muted);padding:48px}.btn{border-radius:var(--radius);cursor:pointer;border:1px solid #0000;justify-content:center;align-items:center;padding:8px 16px;font-size:.9rem;transition:background-color .15s;display:inline-flex}.btn:disabled{opacity:.6;cursor:not-allowed}.btn-primary{background:var(--accent-strong);color:#fff}.btn-primary:hover:not(:disabled){background:var(--accent)}.btn-secondary{border-color:var(--border);color:var(--text);background:0 0}.btn-secondary:hover:not(:disabled){border-color:var(--accent)}.btn-ghost{color:var(--text-muted);background:0 0}.btn-ghost:hover:not(:disabled){color:var(--text)}.field{flex-direction:column;gap:6px;margin-bottom:16px;font-size:.9rem;display:flex}.field input{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);padding:10px 12px;font-size:.95rem}.field input:focus{border-color:var(--accent);outline:none}.form-error{color:var(--danger);font-size:.85rem}.auth-page{justify-content:center;align-items:center;min-height:100%;padding:24px;display:flex}.auth-card{background:var(--bg-card);border:1px solid var(--border);border-radius:12px;width:100%;max-width:360px;padding:32px}.auth-title{margin:0 0 4px;font-size:1.3rem}.auth-subtitle{color:var(--text-muted);margin:0 0 24px;font-size:.85rem}.auth-card .btn{width:100%}.auth-footnote{text-align:center;color:var(--text-muted);margin:16px 0 0;font-size:.85rem}.badge{background:var(--bg);border:1px solid var(--border);color:var(--text-muted);border-radius:999px;align-items:center;padding:2px 8px;font-size:.75rem;display:inline-flex}.badge-success{border-color:var(--success);color:var(--success)}.progress-bar{align-items:center;gap:10px;margin:10px 0;display:flex}.progress-bar-track{background:var(--border);border-radius:999px;flex:1;height:6px;overflow:hidden}.progress-bar-fill{background:var(--accent);border-radius:999px;height:100%;transition:width .2s}.progress-bar-label{color:var(--text-muted);white-space:nowrap;font-size:.75rem}.home-page h1{margin-top:0}.home-page .lead{color:var(--text-muted);max-width:640px;margin-bottom:24px}.home-continue{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;align-items:flex-start;gap:10px;margin-bottom:24px;padding:16px 20px;display:flex}.home-continue-label{color:var(--text-muted);margin:0;font-size:.85rem}.home-tiles{grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;max-width:640px;margin-bottom:28px;display:grid}.home-tile{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;gap:4px;padding:16px;display:flex}.home-tile-value{font-size:1.6rem;font-weight:700}.home-tile-label{color:var(--text-muted);font-size:.8rem}.home-links{gap:12px;display:flex}.me-page h1{margin-top:0}.me-page h2{margin-top:32px;font-size:1.1rem}.me-empty{color:var(--text-muted)}.me-enrollment-grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px;display:grid}.me-enrollment-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;gap:8px;padding:16px;display:flex}.me-enrollment-head{justify-content:space-between;align-items:center;gap:8px;display:flex}.me-enrollment-head h3{margin:0;font-size:1rem}.me-enrollment-version{color:var(--text-muted);margin:0;font-size:.8rem}.me-enrollment-stats{gap:24px;margin:4px 0 0;display:flex}.me-enrollment-stats dt{color:var(--text-muted);font-size:.75rem}.me-enrollment-stats dd{margin:0;font-weight:600}.me-attempts-table{border-collapse:collapse;width:100%;margin-top:12px}.me-attempts-table th,.me-attempts-table td{text-align:left;border-bottom:1px solid var(--border);padding:8px 12px;font-size:.85rem}.me-attempts-table th{color:var(--text-muted);font-weight:500}.me-result-passed{color:var(--success)}.me-result-failed{color:var(--danger)}.catalog-page h1{margin-top:0;margin-bottom:20px}.track-accordion{border:1px solid var(--border);border-radius:var(--radius);margin-bottom:12px;overflow:hidden}.track-header{background:var(--bg-elevated);width:100%;color:var(--text);cursor:pointer;text-align:left;border:none;align-items:center;gap:12px;padding:14px 16px;font-size:1rem;display:flex}.track-title{flex:1;font-weight:600}.chevron{color:var(--text-muted)}.track-body{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px;padding:16px;display:grid}.course-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;gap:8px;padding:16px;display:flex}.course-card-head{justify-content:space-between;align-items:center;gap:8px;display:flex}.course-card-head h3{margin:0;font-size:1rem}.course-desc{color:var(--text-muted);margin:0;font-size:.85rem}.course-meta{color:var(--text-muted);gap:12px;font-size:.8rem;display:flex}.course-not-enrolled{color:var(--text-muted);margin:4px 0;font-size:.8rem}.course-actions{margin-top:4px}.course-header{margin-bottom:32px}.course-header h1{margin-top:0;margin-bottom:4px}.course-modules{flex-direction:column;gap:24px;margin-bottom:32px;display:flex}.module-block h2{color:var(--text-muted);margin-bottom:8px;font-size:1rem}.lesson-list,.lab-list{flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.lesson-list li a,.lab-list li a{border:1px solid var(--border);border-radius:var(--radius);color:var(--text);align-items:center;gap:8px;padding:10px 12px;display:flex}.lesson-list li a:hover,.lab-list li a:hover{border-color:var(--accent);text-decoration:none}.lesson-state{font-size:.9rem}.course-labs{margin-bottom:32px}.course-labs h2{color:var(--text-muted);margin-bottom:8px;font-size:1rem}.course-final{align-items:center;gap:12px;display:flex}.lesson-page h1{margin-top:0}.lesson-objectives{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:24px;padding:16px 20px}.lesson-objectives h2{color:var(--text-muted);margin:0 0 8px;font-size:.9rem}.lesson-objectives ul{margin:0;padding-left:20px}.markdown-view{line-height:1.7}.markdown-view :is(h1,h2,h3){margin-top:1.6em}.markdown-view code{background:var(--bg-elevated);border-radius:4px;padding:1px 5px;font-size:.9em}.markdown-view pre{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius);padding:12px 16px;overflow-x:auto}.markdown-view pre code{background:0 0;padding:0}.markdown-view table{border-collapse:collapse;width:100%}.markdown-view th,.markdown-view td{border:1px solid var(--border);text-align:left;padding:6px 10px}.delta-card{background:var(--bg-card);border:1px solid var(--accent-strong);border-radius:var(--radius);margin:16px 0;padding:12px 16px}.delta-card-summary{cursor:pointer;color:var(--accent);font-weight:600}.delta-card-subtitle{color:var(--text-muted);margin:10px 0 4px;font-size:.85rem}.delta-card-body{margin-top:8px}.lesson-complete{margin:24px 0}.lesson-nav{border-top:1px solid var(--border);justify-content:space-between;margin-bottom:32px;padding:16px 0;display:flex}.lesson-check-quiz{border-top:1px solid var(--border);padding-top:24px}.lesson-check-quiz h2{font-size:1.1rem}.quiz-player{flex-direction:column;gap:20px;display:flex}.quiz-question{border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px}.quiz-question legend{padding:0 4px;font-weight:600}.quiz-hint{color:var(--text-muted);font-size:.85rem;font-weight:400}.quiz-choices{flex-direction:column;gap:6px;margin-top:8px;display:flex}.quiz-choice{border-radius:var(--radius);border:1px solid #0000;align-items:center;gap:8px;padding:8px 10px;display:flex}.quiz-choice-correct{border-color:var(--success);color:var(--success)}.quiz-choice-wrong{border-color:var(--danger);color:var(--danger)}.quiz-explanation{border-radius:var(--radius);background:var(--bg-elevated);margin:10px 0 0;padding:8px 10px;font-size:.85rem}.quiz-explanation.is-correct{color:var(--success)}.quiz-explanation.is-wrong{color:var(--danger)}.quiz-result-banner{align-items:center;gap:16px;display:flex}.quiz-result-passed{color:var(--success);font-weight:600}.quiz-result-failed{color:var(--danger);font-weight:600}.quiz-pass-score{color:var(--text-muted);font-weight:400}.quiz-page-header{margin-bottom:24px}.quiz-page-meta{color:var(--text-muted);font-size:.85rem}.quiz-page-congrats{color:var(--success);margin-bottom:16px;font-weight:600}.lab-page-header{justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px;display:flex}.lab-page-header h1{margin:0}.lab-page-meta{gap:8px;display:flex}.lab-congrats{color:var(--success);margin-bottom:16px;font-weight:600}.lab-page-body{grid-template-columns:minmax(0,1fr) 320px;align-items:start;gap:20px;display:grid}.lab-sim-panel{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}.lab-sim-tabs{border-bottom:1px solid var(--border);display:flex}.lab-side-panel{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;gap:20px;padding:16px;display:flex}.lab-side-panel h2{color:var(--text-muted);margin:0 0 8px;font-size:.9rem}.lab-submit-btn{width:100%}.lab-result-banner{border-radius:var(--radius);padding:10px 12px;font-weight:600}.lab-result-passed{color:var(--success);background:#3fbf7f1f}.lab-result-failed{color:var(--danger);background:#e0554f1f}.lab-explanation{color:var(--text);margin-top:6px;font-weight:400}.lab-hints ul,.lab-diagnosis select{margin:0}.lab-hints ul{margin-bottom:8px;padding-left:20px}.lab-diagnosis select{border-radius:var(--radius);border:1px solid var(--border);background:var(--bg-elevated);width:100%;color:var(--text);padding:6px 8px}.goal-checklist ul{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.goal-item{align-items:flex-start;gap:8px;font-size:.9rem;display:flex}.goal-icon{flex-shrink:0}.goal-item.goal-passed{color:var(--success)}.goal-item.goal-failed{color:var(--danger)}.goal-item.goal-pending{color:var(--text)}.shell-sim{background:#0a0e12;flex-direction:column;height:460px;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:.85rem;display:flex}.shell-scrollback{flex:1;padding:12px 14px;overflow-y:auto}.shell-hint{color:var(--text-muted);margin:0}.shell-entry{margin-bottom:8px}.shell-prompt{color:var(--accent);margin-right:4px}.shell-line-input{white-space:pre-wrap}.shell-line-output{color:var(--text);white-space:pre-wrap;margin:4px 0 0;font-family:inherit}.shell-input-row{border-top:1px solid var(--border);align-items:center;gap:4px;padding:10px 14px;display:flex}.shell-input{color:var(--text);font-family:inherit;font-size:inherit;background:0 0;border:none;outline:none;flex:1}.ui-sim{grid-template-columns:220px minmax(0,1fr);height:460px;display:grid}.ui-sim-tree{border-right:1px solid var(--border);overflow-y:auto}.ui-sim-detail{flex-direction:column;gap:18px;padding:14px 16px;display:flex;overflow-y:auto}.ui-sim-detail h2{color:var(--text-muted);margin:0 0 6px;font-size:.85rem}.ui-sim-selected-title{margin:0 0 8px;font-weight:600}.ui-sim-props-table{border-collapse:collapse;width:100%;font-size:.85rem}.ui-sim-props-table th,.ui-sim-props-table td{border:1px solid var(--border);text-align:left;padding:4px 8px}.ui-sim-props-table th{color:var(--text-muted);width:40%;font-weight:400}.ui-sim-action-buttons{flex-wrap:wrap;gap:8px;display:flex}.ui-sim-empty{color:var(--text-muted);margin:0;font-size:.85rem}.ui-sim-recent-list{flex-direction:column;gap:4px;margin:0;padding-left:18px;font-size:.85rem;display:flex}.inv-tabs{border-bottom:1px solid var(--border);display:flex}.inv-tab{color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;flex:1;padding:8px 6px;font-size:.78rem}.inv-tab-active{color:var(--text);border-bottom-color:var(--accent)}.inv-list{padding:6px 0}.inv-node{width:100%;color:var(--text);text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:6px;padding:6px 12px;font-size:.85rem;display:flex}.inv-node:hover{background:var(--bg-elevated)}.inv-node-selected{background:var(--bg-elevated);color:var(--accent)}.inv-node-name{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.inv-empty{color:var(--text-muted);margin:0;padding:8px 12px;font-size:.85rem}.inv-badge-connected,.inv-badge-poweredOn{color:var(--success);background:#3fbf7f29}.inv-badge-notResponding,.inv-badge-poweredOff{color:var(--danger);background:#e0554f29}.inv-badge-maintenance{color:var(--accent);background:#4fb3ff29}.action-dialog-backdrop{z-index:100;background:#0000008c;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.action-dialog{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;gap:12px;width:340px;padding:20px;display:flex}.action-dialog h3{margin:0}.action-dialog-field select,.action-dialog-field input{border-radius:var(--radius);border:1px solid var(--border);background:var(--bg-elevated);width:100%;color:var(--text);padding:6px 8px}.action-dialog-actions{justify-content:flex-end;gap:8px;margin-top:8px;display:flex}.admin-forbidden{padding:48px 0}.admin-forbidden h1{color:var(--danger)}.admin-tabs{border-bottom:1px solid var(--border);gap:4px;margin:20px 0 24px;display:flex}.admin-tab{color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;padding:10px 16px;font-size:.9rem}.admin-tab:hover{color:var(--text)}.admin-tab-active{color:var(--text);border-bottom-color:var(--accent)}.admin-tab-badge{background:var(--accent);min-width:18px;height:18px;color:var(--bg);border-radius:999px;justify-content:center;align-items:center;margin-left:6px;padding:0 5px;font-size:.7rem;font-weight:600;display:inline-flex}.admin-signup-filters{gap:4px;margin-bottom:16px;display:flex}.admin-totals{flex-wrap:wrap;gap:24px;margin:0 0 20px;display:flex}.admin-totals>div{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);min-width:140px;padding:12px 16px}.admin-totals dt{color:var(--text-muted);margin-bottom:4px;font-size:.8rem}.admin-totals dd{margin:0;font-size:1.2rem;font-weight:600}.admin-table{border-collapse:collapse;width:100%;margin-bottom:24px;font-size:.88rem}.admin-table th,.admin-table td{border-bottom:1px solid var(--border);text-align:left;vertical-align:middle;padding:8px 10px}.admin-table th{color:var(--text-muted);font-size:.8rem;font-weight:500}.admin-row-completed{background:#3fbf7f14}.admin-row-warning{background:#e0554f1a}.admin-row-inactive{opacity:.55}.admin-empty-cell{color:var(--text-muted)}.admin-hint{color:var(--text-muted);margin:4px 0 12px;font-size:.85rem}.admin-create-form,.admin-resync,.admin-quiz-stats{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:24px;padding:16px 20px}.admin-form-grid{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:0 16px;display:grid}.admin-edit-form{background:var(--bg-elevated);border-radius:var(--radius);padding:12px}.admin-row-actions{flex-wrap:wrap;gap:8px;display:flex}.admin-delete-btn{color:var(--danger)}.admin-resync-result{gap:8px;margin-top:16px;font-size:.85rem;display:grid}.admin-resync-result dt{color:var(--text-muted);display:inline}.admin-resync-result dd{margin:0 0 0 4px;display:inline}.admin-resync-errors{color:var(--danger)}@media (width<=860px){.lab-page-body{grid-template-columns:1fr}.ui-sim{grid-template-columns:1fr;height:auto}.ui-sim-tree{border-right:none;border-bottom:1px solid var(--border);max-height:220px}}
