:root{--bg: #0b0e13;--surface: #151a21;--surface-2: #1c232d;--surface-3: #232c38;--border: #2a333f;--border-bright: #3a4553;--text: #f3f6f8;--text-dim: #9aa8b6;--text-faint: #6b7883;--green: #5df592;--green-deep: #26d57e;--green-ink: #06301d;--blue: #4c7dff;--blue-deep: #2b5ce0;--red: #ff6b6b;--red-deep: #d93a3a;--amber: #ffc65c;--radius: 14px;--radius-sm: 10px;--gutter: 16px;--maxw: 760px;--font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans Thai", system-ui, sans-serif;--mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace}*{box-sizing:border-box}html,body,#root{margin:0;padding:0;min-height:100%}body{background:var(--bg);color:var(--text);font:16px/1.6 var(--font);-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;overflow-wrap:anywhere}a{color:var(--green)}.shell{max-width:var(--maxw);margin:0 auto;padding:0 var(--gutter) calc(48px + env(safe-area-inset-bottom))}.stack{display:grid;gap:14px}.row{display:flex;align-items:center;gap:10px}.row-between{display:flex;align-items:center;justify-content:space-between;gap:10px}.spread{flex:1}.appbar{position:sticky;top:0;z-index:20;background:#0b0e13eb;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-bottom:1px solid var(--border);padding-top:env(safe-area-inset-top)}.appbar-inner{max-width:var(--maxw);margin:0 auto;padding:10px var(--gutter);display:flex;align-items:center;gap:12px}.brand{display:flex;align-items:center;gap:9px;text-decoration:none;color:var(--text)}.brand img{width:30px;height:30px;border-radius:50%;display:block}.brand-text{font-weight:750;letter-spacing:-.3px;font-size:16px}.brand-text span{color:var(--green)}.score-pill{display:flex;flex-direction:column;align-items:flex-end;line-height:1.15}.score-pill b{font-size:19px;font-variant-numeric:tabular-nums}.score-pill small{color:var(--text-dim);font-size:11.5px;font-variant-numeric:tabular-nums}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:16px}.card-link{display:block;text-decoration:none;color:inherit;transition:border-color .12s ease,transform .12s ease}.card-link:active{transform:scale(.994);border-color:var(--border-bright)}.chapter-index{font:700 12px/1 var(--mono);color:var(--green);letter-spacing:1.4px;text-transform:uppercase}.chapter-title{font-size:19px;font-weight:700;margin:6px 0 4px;letter-spacing:-.2px}.chapter-sub{color:var(--text-dim);font-size:14px;margin:0}.progress{height:6px;background:var(--surface-3);border-radius:99px;overflow:hidden;margin-top:14px}.progress i{display:block;height:100%;background:linear-gradient(90deg,var(--green-deep),var(--green));border-radius:99px;transition:width .32s ease}.meta{color:var(--text-dim);font-size:13px;font-variant-numeric:tabular-nums}.q-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}.q-card.is-solved{border-color:#5df5926b}.q-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:14px 16px;border-bottom:1px solid var(--border);background:var(--surface-2)}.q-num{font:700 12px/1.5 var(--mono);color:var(--text-dim);letter-spacing:1px}.points-badge{flex:none;text-align:right;font-variant-numeric:tabular-nums}.points-badge b{font-size:17px}.points-badge small{display:block;color:var(--text-dim);font-size:11px}.points-badge.reduced b{color:var(--amber)}.points-badge.earned b{color:var(--green)}.q-body{padding:16px}.options{display:grid;gap:9px;margin:0 0 14px}.option{display:flex;align-items:flex-start;gap:11px;width:100%;min-height:52px;padding:13px 14px;text-align:left;background:var(--surface-2);color:var(--text);border:1.5px solid var(--border);border-radius:var(--radius-sm);font:inherit;line-height:1.75;cursor:pointer;-webkit-tap-highlight-color:transparent}.option:disabled{cursor:default}.option.selected{border-color:var(--green);background:#5df59217}.option.tried{opacity:.72}.option.tried.selected{opacity:1}.option.correct{border-color:var(--green);background:#5df59224}.option-key{flex:none;width:26px;height:26px;margin-top:1px;border-radius:8px;background:var(--surface-3);border:1px solid var(--border-bright);display:grid;place-items:center;font:700 12px/1 var(--mono);text-transform:uppercase;color:var(--text-dim)}.option.selected .option-key,.option.correct .option-key{background:var(--green);border-color:var(--green);color:var(--green-ink)}.option.tried:not(.selected) .option-key{color:var(--red);border-color:#ff6b6b73}.option-label{flex:1}.field{display:grid;gap:7px;margin-bottom:12px}.label{font-size:13px;color:var(--text-dim);font-weight:600}.input{width:100%;min-height:52px;padding:13px 14px;background:var(--surface-2);border:1.5px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font:16px/1.5 var(--font)}.input.mono{font-family:var(--mono)}.input:focus{outline:none;border-color:var(--green)}.input::placeholder{color:var(--text-faint)}.echo{font:13px/1.5 var(--mono);color:var(--text-dim);background:var(--surface-2);border:1px dashed var(--border-bright);border-radius:8px;padding:8px 10px}.echo b{color:var(--text)}.btn{min-height:52px;padding:14px 20px;border-radius:var(--radius-sm);border:1.5px solid transparent;font:600 16px/1 var(--font);cursor:pointer;-webkit-tap-highlight-color:transparent}.btn:disabled{opacity:.45;cursor:not-allowed}.btn-primary{background:var(--green);color:var(--green-ink);font-weight:700}.btn-primary:active:not(:disabled){background:var(--green-deep)}.btn-ghost{background:transparent;color:var(--text-dim);border-color:var(--border)}.btn-ghost:active{border-color:var(--border-bright)}.btn-block{width:100%}.btn-sm{min-height:40px;padding:9px 14px;font-size:14px}.btn-link{background:none;border:none;color:var(--text-dim);font:13px/1.4 var(--font);text-decoration:underline;padding:6px 0;cursor:pointer;min-height:34px}.flash{display:flex;align-items:flex-start;gap:9px;padding:12px 13px;border-radius:var(--radius-sm);font-size:14.5px;line-height:1.55;border:1px solid;margin-bottom:12px}.flash-icon{flex:none;font-weight:700}.flash.ok{background:#5df5921a;border-color:#5df59266;color:#a9f7cd}.flash.bad{background:#ff6b6b1a;border-color:#ff6b6b66;color:#ffc0c0}.flash.warn{background:#ffc65c1a;border-color:#ffc65c66;color:#ffe0a8}.flash.info{background:var(--surface-2);border-color:var(--border);color:var(--text-dim)}.penalty-note{font-size:13px;color:var(--text-dim);margin:0 0 12px}.penalty-note b{color:var(--amber)}.penalty-note.floored b{color:var(--green)}.tried-list{font:12.5px/1.6 var(--mono);color:var(--text-dim);margin:10px 0 0}.tried-list span{display:inline-block;background:var(--surface-2);border:1px solid var(--border);border-radius:6px;padding:2px 7px;margin:0 5px 5px 0}.md{font-size:16px;line-height:1.65}.md>:first-child{margin-top:0}.md>:last-child{margin-bottom:0}.md p{margin:0 0 12px}.md strong{color:#fff}.md code{font:.88em/1.5 var(--mono);background:var(--surface-3);border:1px solid var(--border);border-radius:5px;padding:1.5px 5px}.md pre{background:#0d1117;border:1px solid var(--border);border-radius:var(--radius-sm);padding:12px;overflow-x:auto;margin:0 0 12px}.md pre code{background:none;border:none;padding:0;font-size:12.5px;line-height:1.6}.md ul,.md ol{margin:0 0 12px;padding-left:22px}.md li{margin-bottom:5px}.md a{color:var(--green)}.md blockquote{margin:0 0 12px;padding:2px 0 2px 13px;border-left:3px solid var(--border-bright);color:var(--text-dim)}.md-dim{color:var(--text-dim)}.md-dim strong{color:var(--text)}.login-wrap{min-height:100dvh;display:grid;place-items:center;padding:24px var(--gutter) calc(24px + env(safe-area-inset-bottom))}.login-card{width:100%;max-width:420px}.login-wordmark{display:block;width:190px;height:auto;margin:0 auto 20px;padding:14px 18px;background:#fff;border-radius:16px}.eyebrow{font:700 11.5px/1 var(--mono);letter-spacing:2.6px;text-transform:uppercase;color:var(--blue);text-align:center}.login-title{font-size:32px;font-weight:800;letter-spacing:-.8px;text-align:center;margin:12px 0 8px}.login-sub{color:var(--text-dim);text-align:center;margin:0 0 24px;font-size:14.5px}.fine{color:var(--text-faint);font-size:12.5px;line-height:1.6;margin:16px 0 0}.admin-tabs{display:flex;gap:6px;margin-bottom:14px;flex-wrap:wrap}.tab{padding:9px 14px;border-radius:99px;border:1px solid var(--border);background:var(--surface);color:var(--text-dim);font:600 13.5px/1 var(--font);cursor:pointer;min-height:38px}.tab.active{background:var(--green);border-color:var(--green);color:var(--green-ink)}.table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;border-radius:var(--radius);border:1px solid var(--border)}table.grid{width:100%;border-collapse:collapse;font-size:13.5px;background:var(--surface)}table.grid th,table.grid td{padding:9px 11px;text-align:left;white-space:nowrap;border-bottom:1px solid var(--border)}table.grid th{background:var(--surface-2);color:var(--text-dim);font-size:11.5px;text-transform:uppercase;letter-spacing:.7px;position:sticky;top:0;cursor:pointer;-webkit-user-select:none;user-select:none}table.grid th.sorted{color:var(--green)}table.grid tbody tr:last-child td{border-bottom:none}table.grid td.num{text-align:right;font-variant-numeric:tabular-nums}table.grid tr.is-test{opacity:.5}.rank{color:var(--text-dim);font-variant-numeric:tabular-nums}.rank-1{color:var(--green);font-weight:700}.answer-key{font:13px/1.6 var(--mono);background:#5df59214;border:1px solid rgba(93,245,146,.3);border-radius:6px;padding:7px 9px;color:#a9f7cd;white-space:normal}.pill{display:inline-block;font:600 11px/1 var(--font);padding:4px 8px;border-radius:99px;border:1px solid var(--border-bright);color:var(--text-dim);text-transform:uppercase;letter-spacing:.5px}.pill.live{color:var(--green);border-color:#5df59266}.pill.draft{color:var(--amber);border-color:#ffc65c66}.center-note{text-align:center;color:var(--text-dim);padding:48px 0}.spinner{width:26px;height:26px;margin:0 auto 12px;border:2.5px solid var(--border-bright);border-top-color:var(--green);border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.section-title{font-size:13px;text-transform:uppercase;letter-spacing:1.3px;color:var(--text-dim);font-weight:700;margin:6px 0 0}@media(prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;transition-duration:.01ms!important}}
