.set-list{max-width:800px;margin:0 auto;padding:var(--sp-10) var(--sp-6)}.set-list--empty{display:flex;flex-direction:column;align-items:center;gap:var(--sp-3);text-align:center}.set-list__empty-msg{font-size:var(--text-xl);color:var(--text-primary)}.set-list__empty-hint{color:var(--text-secondary);font-size:var(--text-sm)}.set-list__header{margin-bottom:var(--sp-8)}.set-list__title{font-size:var(--text-2xl);font-weight:700;font-family:var(--font-mono);color:var(--accent);margin-bottom:var(--sp-2)}.set-list__subtitle{color:var(--text-secondary);font-size:var(--text-sm);line-height:1.6}.set-list__grid{list-style:none;display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:var(--sp-4)}.set-card{width:100%;text-align:left;background:var(--bg-1);border:1px solid var(--border);border-radius:var(--radius-lg);padding:var(--sp-4) var(--sp-5);display:flex;flex-direction:column;gap:var(--sp-3);transition:border-color var(--transition),background var(--transition);color:var(--text-primary)}.set-card:hover{border-color:var(--accent);background:var(--bg-2)}.set-card--complete{border-color:var(--pass)}.set-card__top{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2)}.set-card__theme{font-family:var(--font-mono);font-size:var(--text-base);font-weight:600;color:var(--text-primary)}.set-card__badge{font-size:var(--text-xs);font-variant-numeric:tabular-nums;background:var(--bg-3);border:1px solid var(--border);color:var(--text-secondary);padding:2px var(--sp-2);border-radius:var(--radius-sm)}.set-card__badge--complete{background:var(--pass-dim);border-color:var(--pass);color:var(--pass-text)}.set-card__desc{font-size:var(--text-xs);color:var(--text-muted)}.set-card__bar{height:3px;background:var(--bg-3);border-radius:2px;overflow:hidden}.set-card__fill{height:100%;background:var(--accent);border-radius:2px;transition:width .4s ease}.set-card__fill--complete{background:var(--pass)}.rail{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-3) var(--sp-4);background:var(--bg-2);border-bottom:1px solid var(--border)}.rail__nav{width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:var(--radius-sm);background:var(--bg-1);border:1px solid var(--border);color:var(--text-secondary);font-size:var(--text-base);flex-shrink:0;transition:background var(--transition),color var(--transition)}.rail__nav:not(:disabled):hover{background:var(--bg-3);color:var(--text-primary)}.rail__steps{display:flex;gap:var(--sp-1);list-style:none;flex:1;justify-content:center}.rail__step{width:28px;height:28px;border-radius:var(--radius-sm);font-size:var(--text-sm);font-weight:500;display:flex;align-items:center;justify-content:center;border:1px solid var(--border);background:var(--bg-1);color:var(--text-secondary);transition:background var(--transition),color var(--transition),border-color var(--transition)}.rail__step:not(:disabled):hover{background:var(--bg-3);color:var(--text-primary)}.rail__step--current{background:var(--accent-dim);border-color:var(--accent);color:var(--accent)}.rail__step--passed{background:var(--pass-dim);border-color:var(--pass);color:var(--pass-text)}.rail__steps li:last-child .rail__step{font-weight:700}.ex-header{padding:var(--sp-5) var(--sp-6);border-bottom:1px solid var(--border);display:flex;flex-direction:column;gap:var(--sp-2)}.ex-header__meta{display:flex;align-items:center;gap:var(--sp-2);font-size:var(--text-sm);color:var(--text-muted)}.ex-header__theme{font-family:var(--font-mono);font-size:var(--text-xs);background:var(--bg-3);padding:2px var(--sp-2);border-radius:var(--radius-sm);color:var(--accent);border:1px solid var(--border)}.ex-header__sep{color:var(--text-muted)}.ex-header__capstone{margin-left:var(--sp-2);font-size:var(--text-xs);font-weight:600;background:var(--warn-dim);color:var(--warn-text);border:1px solid var(--warn);padding:1px var(--sp-2);border-radius:var(--radius-sm);text-transform:uppercase;letter-spacing:.05em}.ex-header__title{font-size:var(--text-xl);font-weight:600;color:var(--text-primary);line-height:1.3}.ex-header__forbidden{display:flex;align-items:center;flex-wrap:wrap;gap:var(--sp-2);margin-top:var(--sp-1)}.ex-header__forbidden-label{font-size:var(--text-xs);color:var(--warn-text);font-weight:600;text-transform:uppercase;letter-spacing:.04em}.ex-header__forbidden-pkg{font-family:var(--font-mono);font-size:var(--text-xs);background:var(--warn-dim);color:var(--warn-text);border:1px solid rgba(210,153,34,.3);padding:1px var(--sp-2);border-radius:var(--radius-sm)}.code-editor{height:100%;display:flex;flex-direction:column;border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;background:#1e1e1e;transition:border-color var(--transition)}.code-editor:focus-within{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-dim)}.code-editor--disabled{opacity:.6;pointer-events:none}.code-editor__monaco{flex:1;min-height:0;overflow:hidden}.code-editor__counter{flex-shrink:0;padding:2px 8px;font-size:11px;font-family:var(--font-mono);color:var(--text-muted);text-align:right;background:#1e1e1e;border-top:1px solid var(--border);-webkit-user-select:none;user-select:none}.code-editor__counter--warn{color:var(--warn-text)}.code-editor__counter--over{color:var(--fail-text)}.test-list{display:flex;flex-direction:column;gap:var(--sp-2)}.test-list__summary{font-size:var(--text-sm);font-weight:600}.test-list__count--pass{color:var(--pass-text)}.test-list__count--fail{color:var(--fail-text)}.test-list__rows{list-style:none;display:flex;flex-direction:column;gap:var(--sp-1)}.test-row{display:flex;align-items:flex-start;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);border-radius:var(--radius-sm);font-size:var(--text-sm)}.test-row--pass{background:var(--pass-dim);border:1px solid rgba(63,185,80,.25)}.test-row--fail{background:var(--fail-dim);border:1px solid rgba(248,81,73,.25)}.test-row__icon{font-size:var(--text-base);line-height:1.4;flex-shrink:0}.test-row--pass .test-row__icon{color:var(--pass-text)}.test-row--fail .test-row__icon{color:var(--fail-text)}.test-row__body{flex:1;min-width:0;display:flex;flex-direction:column;gap:var(--sp-1)}.test-row__name{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text-primary);word-break:break-all}.test-row__output{white-space:pre-wrap;word-break:break-word;color:var(--fail-text);font-size:var(--text-xs);line-height:1.5;padding:var(--sp-1) var(--sp-2);background:#0003;border-radius:var(--radius-sm);border-left:2px solid var(--fail)}.test-row__elapsed{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text-muted);flex-shrink:0;align-self:center;font-variant-numeric:tabular-nums}.verdict{display:flex;flex-direction:column;gap:var(--sp-4);padding:var(--sp-4);border-radius:var(--radius);border:1px solid}.verdict--pass{background:var(--pass-dim);border-color:var(--pass)}.verdict--fail{background:var(--fail-dim);border-color:var(--fail)}.verdict--warn{background:var(--warn-dim);border-color:var(--warn)}.verdict--error{background:var(--error-dim);border-color:var(--border)}.verdict--neutral{background:var(--bg-1);border-color:var(--border)}.verdict__header{display:flex;align-items:center;gap:var(--sp-2)}.verdict__icon{font-size:var(--text-lg);line-height:1;flex-shrink:0}.verdict--pass .verdict__icon{color:var(--pass-text)}.verdict--fail .verdict__icon{color:var(--fail-text)}.verdict--warn .verdict__icon{color:var(--warn-text)}.verdict--error .verdict__icon{color:var(--text-secondary)}.verdict__label{font-weight:600;font-size:var(--text-base);flex:1}.verdict--pass .verdict__label{color:var(--pass-text)}.verdict--fail .verdict__label{color:var(--fail-text)}.verdict--warn .verdict__label{color:var(--warn-text)}.verdict__duration{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text-muted);font-variant-numeric:tabular-nums}.verdict__message{font-size:var(--text-sm);color:var(--text-secondary)}.verdict__block-label{font-size:var(--text-xs);font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);margin-bottom:var(--sp-2)}.verdict__code-block{white-space:pre-wrap;word-break:break-word;font-family:var(--font-mono);font-size:var(--text-xs);line-height:1.6;padding:var(--sp-3) var(--sp-4);background:#0000004d;border-radius:var(--radius-sm);color:var(--fail-text);border:1px solid rgba(248,81,73,.2);overflow-x:auto}.verdict__forbidden-list{list-style:none;display:flex;flex-direction:column;gap:var(--sp-1);margin-bottom:var(--sp-2)}.verdict__forbidden-list code{background:#0000004d;padding:var(--sp-1) var(--sp-2);border-radius:var(--radius-sm);color:var(--warn-text);border:1px solid rgba(210,153,34,.3)}.verdict__hint{font-size:var(--text-sm);color:var(--text-secondary);font-style:italic}.banner{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-3) var(--sp-4);border-radius:var(--radius);font-size:var(--text-sm);border:1px solid}.banner--warn{background:var(--warn-dim);border-color:var(--warn);color:var(--warn-text)}.banner--error{background:var(--fail-dim);border-color:var(--fail);color:var(--fail-text)}.banner--neutral{background:var(--error-dim);border-color:var(--border);color:var(--text-secondary)}.banner__message{flex:1}.banner__countdown{font-variant-numeric:tabular-nums;color:inherit;opacity:.8;font-size:var(--text-xs)}.banner__retry{padding:var(--sp-1) var(--sp-3);border-radius:var(--radius-sm);background:var(--bg-2);border:1px solid var(--border);color:var(--text-primary);transition:background var(--transition)}.banner__retry:not(:disabled):hover{background:var(--bg-3)}.spinner{display:inline-flex;align-items:center;justify-content:center}.spinner--md{width:20px;height:20px}.spinner--sm{width:14px;height:14px}.spinner__ring{display:block;width:100%;height:100%;border-radius:50%;border:2px solid var(--bg-3);border-top-color:var(--accent);animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.set-view{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.set-view__topbar{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-2) var(--sp-4);background:var(--bg-2);border-bottom:1px solid var(--border);flex-shrink:0}.set-view__back{font-size:var(--text-sm);color:var(--text-secondary);padding:var(--sp-1) var(--sp-2);border-radius:var(--radius-sm);transition:color var(--transition),background var(--transition)}.set-view__back:hover{color:var(--text-primary);background:var(--bg-3)}.set-view__set-name{font-family:var(--font-mono);font-size:var(--text-sm);color:var(--accent)}.set-view__body{display:grid;grid-template-columns:1fr 1fr;flex:1;min-height:0;overflow:hidden}.set-view__prompt-pane{display:flex;flex-direction:column;border-right:1px solid var(--border);overflow-y:auto}.set-view__prompt{padding:var(--sp-5) var(--sp-6);flex:1}.set-view__prompt-text{white-space:pre-wrap;word-break:break-word;font-family:var(--font-ui);font-size:var(--text-sm);line-height:1.7;color:var(--text-secondary)}.set-view__editor-pane{display:flex;flex-direction:column;overflow:hidden;background:var(--bg-0)}.set-view__editor-header{flex-shrink:0;display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-3) var(--sp-4) var(--sp-2)}.set-view__editor-monaco{flex:1;min-height:200px;overflow:hidden;padding:0 var(--sp-4)}.set-view__verdict-area{flex:1;min-height:140px;overflow-y:auto;padding:var(--sp-3) var(--sp-4) var(--sp-4);border-top:1px solid var(--border)}.set-view__editor-header{display:flex;align-items:center;gap:var(--sp-2)}.set-view__editor-label{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text-muted)}.set-view__submit-row{display:flex;align-items:center;gap:var(--sp-3)}.set-view__submit{padding:var(--sp-2) var(--sp-6);background:var(--accent);color:#fff;font-weight:600;font-size:var(--text-sm);border-radius:var(--radius);border:none;transition:opacity var(--transition),background var(--transition)}.set-view__submit:not(:disabled):hover{opacity:.88}.set-view__submit:disabled{opacity:.45}.set-view__passed-badge{font-size:var(--text-sm);color:var(--pass-text);font-weight:600}.set-view__error{padding:var(--sp-8)}@media (max-width: 720px){.set-view__body{grid-template-columns:1fr;overflow-y:auto}.set-view__prompt-pane{border-right:none;border-bottom:1px solid var(--border);overflow-y:visible}.set-view__editor-pane{overflow:visible}.set-view__editor-monaco{flex:none;height:300px}.set-view__verdict-area{overflow-y:visible;flex:none;min-height:auto}}.nav{display:flex;align-items:center;gap:var(--sp-1);padding:0 var(--sp-6);height:44px;background:var(--bg-1);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:10;flex-shrink:0}.nav__tab{padding:var(--sp-1) var(--sp-3);font-size:var(--text-sm);color:var(--text-secondary);border-radius:var(--radius-sm);transition:color var(--transition),background var(--transition)}.nav__tab:hover{color:var(--text-primary);background:var(--bg-2)}.nav__tab--active{color:var(--accent);background:var(--accent-dim)}.cs-content{max-width:720px;margin:0 auto;padding:var(--sp-10) var(--sp-6) var(--sp-12);display:flex;flex-direction:column;gap:var(--sp-4)}.cs-h1{font-size:var(--text-2xl);font-weight:700;color:var(--text-primary);padding-bottom:var(--sp-4);border-bottom:1px solid var(--border);margin-bottom:var(--sp-2)}.cs-h2{font-size:var(--text-lg);font-weight:600;color:var(--text-primary);margin-top:var(--sp-4);padding-bottom:var(--sp-2);border-bottom:1px solid var(--border-subtle)}.cs-code{position:relative;background:var(--bg-2);border:1px solid var(--border);border-left:3px solid var(--bg-3);border-radius:var(--radius)}.cs-code__copy{position:absolute;top:var(--sp-2);right:var(--sp-2);padding:2px var(--sp-2);font-size:var(--text-xs);color:var(--text-secondary);background:var(--bg-3);border:1px solid var(--border);border-radius:var(--radius-sm);line-height:1.6;transition:color var(--transition),border-color var(--transition),background var(--transition)}.cs-code__copy:hover{color:var(--accent);border-color:var(--accent);background:var(--accent-dim)}.cs-code__copy--done{color:var(--pass-text);border-color:var(--pass);background:var(--pass-dim)}.cs-code__pre{padding:var(--sp-4);padding-right:72px;overflow-x:auto;font-family:var(--font-mono);font-size:var(--text-sm);line-height:1.7;color:var(--text-primary)}.cs-ul{padding-left:var(--sp-6);display:flex;flex-direction:column;gap:var(--sp-2)}.cs-li{font-size:var(--text-sm);color:var(--text-secondary);line-height:1.6}.cs-li::marker{color:var(--text-muted)}.cs-p{font-size:var(--text-sm);color:var(--text-secondary);line-height:1.7}.cs-inline-code{font-family:var(--font-mono);font-size:.875em;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius-sm);padding:1px 4px;color:var(--accent)}.app{height:100%}.app--set{display:flex;flex-direction:column;overflow:hidden}.app--list{overflow-y:auto;display:flex;flex-direction:column}.app-center{height:100%;display:flex;align-items:center;justify-content:center;padding:var(--sp-8)}:root{--bg-0: #0d1117;--bg-1: #161b22;--bg-2: #21262d;--bg-3: #30363d;--text-primary: #e6edf3;--text-secondary: #8b949e;--text-muted: #484f58;--border: #30363d;--border-subtle: #21262d;--accent: #58a6ff;--accent-dim: rgba(88, 166, 255, .15);--pass: #3fb950;--pass-dim: rgba(63, 185, 80, .15);--pass-text: #56d364;--fail: #f85149;--fail-dim: rgba(248, 81, 73, .15);--fail-text: #ff7b72;--warn: #d29922;--warn-dim: rgba(210, 153, 34, .15);--warn-text: #e3b341;--error: #8b949e;--error-dim: rgba(139, 148, 158, .12);--font-ui: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;--font-mono: "JetBrains Mono", "Fira Code", "Cascadia Code", ui-monospace, monospace;--text-xs: .75rem;--text-sm: .875rem;--text-base: 1rem;--text-lg: 1.125rem;--text-xl: 1.25rem;--text-2xl: 1.5rem;--sp-1: .25rem;--sp-2: .5rem;--sp-3: .75rem;--sp-4: 1rem;--sp-5: 1.25rem;--sp-6: 1.5rem;--sp-8: 2rem;--sp-10: 2.5rem;--sp-12: 3rem;--radius-sm: 4px;--radius: 6px;--radius-lg: 8px;--transition: .12s ease}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%}body{background:var(--bg-0);color:var(--text-primary);font-family:var(--font-ui);font-size:var(--text-base);line-height:1.6;-webkit-font-smoothing:antialiased}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}code,pre{font-family:var(--font-mono);font-size:var(--text-sm)}button{cursor:pointer;font-family:inherit;font-size:var(--text-sm);border:none;background:none}button:disabled{cursor:not-allowed;opacity:.5}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
