:root{--bg:#0f1115;--panel:#171a20;--panel-2:#1f232b;--text:#eceff4;--muted:#9aa3b2;--accent:#ffd166;--accent-2:#ff7a1a;--on-accent-2:#1a1208;--danger:#ff6b6b;--ok:#4ade80;--border:#2a2f39;--wall:#3a404c;--radius:14px;--sidebar-width:220px}*{box-sizing:border-box}[hidden]{display:none!important}html,body,#root{height:100%}body{background:var(--bg);color:var(--text);margin:0;font-family:Pretendard,Apple SD Gothic Neo,Malgun Gothic,sans-serif;line-height:1.5}.app-shell{min-height:100vh;display:flex}.sidebar{flex:0 0 var(--sidebar-width);background:var(--panel);border-right:1px solid var(--border);flex-direction:column;gap:24px;padding:24px 16px;display:flex}.sidebar .brand{text-align:center}.sidebar .brand h1{margin:0 0 4px;font-size:18px}.sidebar .brand p{color:var(--muted);white-space:nowrap;margin:0;font-size:10px}.sidebar nav.tabs{flex-direction:column;gap:6px;display:flex}.sidebar nav.tabs a{color:var(--muted);border:1px solid #0000;border-radius:8px;padding:10px 14px;font-size:13.5px;text-decoration:none}.sidebar nav.tabs a.active{color:var(--bg);background:var(--accent);font-weight:600}.main-content{flex:1;min-width:0;padding:24px 24px 64px;overflow-x:auto}.page{max-width:960px;margin:0 auto}@media (width<=720px){.app-shell{flex-direction:column}.sidebar{flex-direction:column;flex:none;align-items:stretch;gap:10px;padding:12px 16px}.sidebar .brand{text-align:left}.sidebar nav.tabs{flex-direction:row}}header.top{margin-bottom:24px}header.top h2{margin:0 0 6px;font-size:24px}header.top p{color:var(--muted);margin:0;font-size:14px}section.panel{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:24px;padding:20px}section.panel h2{margin:0 0 4px;font-size:17px}section.panel .desc{color:var(--muted);word-break:keep-all;margin:0 0 16px;font-size:13px}.panel-head{justify-content:space-between;align-items:center;gap:12px;margin-bottom:4px;display:flex}section.panel .panel-head h2{word-break:keep-all;flex:1 1 0;min-width:0;margin:0}.panel-head button{white-space:nowrap;flex:none}.badge{background:var(--panel-2);color:var(--muted);border:1px solid var(--border);border-radius:999px;padding:2px 8px;font-size:11px;display:inline-block}.badge.wip{color:var(--accent);background:#ffd1661f;border-color:#ffd16666}.status-text{color:var(--muted);margin-top:10px;font-size:12.5px}.status-text.error{color:var(--danger)}.health-result{border:1px solid var(--border);background:var(--panel-2);word-break:keep-all;border-radius:10px;margin-top:12px;padding:12px 14px;font-size:13px}.health-result.ok{border-color:#4ade8073}.health-result.fail{border-color:#ff6b6b80}.health-result .health-title{margin-bottom:4px;font-weight:700}.health-result.ok .health-title{color:var(--ok)}.health-result.fail .health-title{color:var(--danger)}.health-result .health-meta{color:var(--muted);margin-top:8px;font-size:12px}.reg-form{flex-wrap:wrap;gap:10px;margin-bottom:18px;display:flex}.reg-form input{background:var(--panel-2);border:1px solid var(--border);color:var(--text);border-radius:8px;padding:10px 12px;font-size:14px}.reg-form input[name=name],.reg-form input[name=birthDate]{flex:160px}.quick-add-inline{align-items:center;gap:8px;display:inline-flex}.quick-add-inline select{background:var(--panel-2);border:1px solid var(--border);color:var(--text);border-radius:8px;padding:10px 8px;font-size:13px}button{background:var(--accent-2);color:var(--on-accent-2);cursor:pointer;border:none;border-radius:8px;padding:10px 18px;font-size:14px;font-weight:600}button.secondary{border:1px solid var(--border);color:var(--text);background:0 0}button:disabled{background:var(--panel-2);color:var(--muted);cursor:not-allowed}.player-list{flex-wrap:wrap;gap:10px;min-height:20px;display:flex}.player-chip{background:var(--panel-2);border:1px solid var(--border);border-radius:999px;align-items:center;gap:8px;padding:6px 8px 6px 14px;font-size:13px;display:inline-flex}.player-chip button.remove{color:var(--muted);background:0 0;border:none;padding:0 4px;font-size:14px;line-height:1}.actions-row{flex-wrap:wrap;gap:10px;margin-top:16px;display:flex}.actions-row.spread{align-items:center}.actions-row.spread button{margin-left:auto}.ball-dot{vertical-align:middle;border:1px solid #fff6;border-radius:50%;flex:none;width:12px;height:12px;display:inline-block}.fortune-card .name .ball-dot{width:14px;height:14px;margin-top:5px;margin-right:8px}.fortune-grid{grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:14px;min-height:20px;display:grid}.fortune-card{background:var(--panel-2);border:1px solid var(--border);border-left:4px solid var(--tier-color,var(--muted));word-break:keep-all;overflow-wrap:anywhere;border-radius:10px;min-width:0;padding:14px}.fortune-card .name{align-items:flex-start;margin-bottom:4px;font-weight:700;display:flex}.fortune-card .score{margin:6px 0 2px;font-size:22px;font-weight:800}.fortune-card .message{color:var(--muted);margin:6px 0 10px;font-size:12.5px}.fortune-card .message.fallback-notice{color:var(--accent,#f59e0b)}.fortune-card .start-line{color:var(--tier-color,var(--muted));background:#ffffff0a;border-radius:6px;margin-top:4px;padding:3px 8px;font-size:12px;font-weight:600;display:inline-block}.tier-0{--tier-color:#6b7280}.tier-1{--tier-color:#4ade80}.tier-2{--tier-color:#38bdf8}.tier-3{--tier-color:#a78bfa}.tier-4{--tier-color:#ffd166}.tier-quick{--tier-color:#f472b6}.game-layout{flex-wrap:wrap;align-items:stretch;gap:16px;display:flex}.pinball-board{border:2px solid var(--border);background:linear-gradient(#171a20,#0c0e12);border-radius:10px;flex:none;max-width:100%;position:relative;overflow:hidden}.pinball-scene{transform-origin:0 0;transition:transform .25s ease-out;position:absolute;top:0;left:0}.zone-label{color:var(--muted);letter-spacing:.5px;z-index:2;font-size:11px;position:absolute;top:8px;left:50%;transform:translate(-50%)}.peg{z-index:1;background:#7a8190;border-radius:50%;width:10px;height:10px;margin-top:-5px;margin-left:-5px;position:absolute}.wall-visual{background:var(--wall);transform-origin:0;z-index:1;position:absolute}.wall-wedge{background:var(--wall);z-index:1;position:absolute}.spinner-bar{background:linear-gradient(90deg, var(--accent-2), var(--accent));transform-origin:50%;z-index:1;border-radius:999px;position:absolute;box-shadow:0 0 8px #ffd16666}.finish-line{border-top:2px dashed var(--accent);z-index:2;position:absolute;left:0;right:0}.finish-line .label{color:var(--accent);letter-spacing:.5px;font-size:11px;position:absolute;top:6px;right:8%}.ball{color:#14161a;z-index:3;white-space:nowrap;text-overflow:ellipsis;border-radius:50%;justify-content:center;align-items:center;width:26px;height:26px;margin-top:-13px;margin-left:-13px;font-size:9px;font-weight:700;display:flex;position:absolute;overflow:hidden;box-shadow:0 4px 10px #0006}.ball.finished{box-shadow:0 0 0 3px #ffd16699,0 4px 10px #0006}.rank-panel{background:var(--panel-2);border:1px solid var(--border);border-radius:10px;flex:200px;padding:14px}.rank-panel h3{color:var(--muted);margin:0 0 12px;font-size:13px;font-weight:600}.rank-item{border-bottom:1px solid var(--border);align-items:center;gap:10px;padding:8px 6px;font-size:13px;display:flex}.rank-item:last-child{border-bottom:none}.rank-item .position{background:var(--panel);width:24px;height:24px;color:var(--muted);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:11px;font-weight:700;display:flex}.rank-item.selected .position{background:var(--danger);color:#fff}.rank-item.selected{color:var(--danger);font-weight:700}.rank-item.pending{color:var(--muted);font-style:italic}.result-banner{text-align:center;border:1px solid var(--accent);border-radius:var(--radius);background:linear-gradient(135deg,#ffd16626,#ff7a1a26);padding:28px}.result-banner .bell{font-size:32px}.result-banner .selected-name{margin:6px 0;font-size:24px;font-weight:800}.result-banner .sub{color:var(--muted);word-break:keep-all;font-size:13px}.board-wrap{flex:none;max-width:100%;position:relative}.board-overlay{z-index:10;pointer-events:none;justify-content:center;padding:0 12px;display:flex;position:absolute;top:46%;left:0;right:0;transform:translateY(-100%)}.board-overlay .result-banner{pointer-events:auto;background:linear-gradient(135deg,#1f232bf5,#171a20f5);min-width:240px;max-width:100%;padding:18px 32px;position:relative;box-shadow:0 10px 32px #0000008c}.result-banner .close{color:var(--muted);background:0 0;border:none;padding:4px 8px;font-size:14px;font-weight:400;line-height:1;position:absolute;top:6px;right:8px}.result-banner .close:hover{color:var(--text)}table.admin-table{border-collapse:collapse;width:100%;font-size:13px}table.admin-table th,table.admin-table td{text-align:left;border-bottom:1px solid var(--border);vertical-align:top;padding:8px 10px}table.admin-table th{color:var(--muted);font-size:12px;font-weight:600}.log-list{flex-direction:column;gap:6px;font-family:Consolas,monospace;font-size:12.5px;display:flex}.log-list .log-item{background:var(--panel-2);border:1px solid var(--border);color:var(--muted);border-radius:6px;padding:8px 10px}.log-list .log-item .path{color:var(--danger);margin-right:6px}.log-list .log-item .trace-id{color:var(--accent);-webkit-user-select:all;user-select:all;margin-right:8px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.pagination{flex-wrap:wrap;justify-content:center;align-items:center;gap:6px;margin-top:14px;display:flex}.pagination button{background:var(--panel-2);color:var(--text);border:1px solid var(--border);padding:6px 12px;font-size:12.5px;font-weight:600}.pagination .page-group{align-items:center;gap:6px;display:inline-flex}.pagination .page-gap{color:var(--muted);font-size:12.5px}.pagination button.active{background:var(--accent);color:var(--bg);border-color:var(--accent)}.pagination button:disabled{opacity:.4;cursor:not-allowed}.pagination .page-info{color:var(--muted);margin:0 6px;font-size:12px}.sidebar nav.tabs .nav-group{flex-direction:column;gap:6px;display:flex}.sidebar nav.tabs .nav-group-toggle{width:100%;color:var(--muted);text-align:left;background:0 0;border:1px solid #0000;border-radius:8px;justify-content:space-between;align-items:center;padding:10px 14px;font-size:13.5px;font-weight:400;display:flex}.sidebar nav.tabs .nav-group-toggle.active{color:var(--text);font-weight:600}.sidebar nav.tabs .nav-sub{flex-direction:column;gap:4px;padding-left:14px;display:flex}.sidebar nav.tabs .nav-sub a{font-size:13px}@media (width<=720px){.sidebar nav.tabs{flex-wrap:wrap}.sidebar nav.tabs .nav-group,.sidebar nav.tabs .nav-sub{display:contents}.sidebar nav.tabs .nav-group-toggle{gap:6px;width:auto}}.study-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px;margin-bottom:20px;display:grid}.study-card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);flex-direction:column;gap:6px;padding:16px;text-decoration:none;display:flex}.study-card:hover{border-color:var(--accent-2)}.study-card h3{margin:0;font-size:16px}.study-card p{color:var(--muted);word-break:keep-all;margin:0;font-size:13px}.study-card-no{color:var(--accent);font-size:12px;font-weight:700}.study-keywords{flex-wrap:wrap;gap:6px;margin-top:auto;padding-top:6px;display:flex}.study-source{color:var(--muted);word-break:keep-all;font-size:12.5px}.study-source a,.study-crumb a{color:var(--accent)}.study-crumb{margin:0 0 6px!important;font-size:12.5px!important}.study-goals{background:var(--panel);border:1px solid var(--border);border-left:4px solid var(--accent);border-radius:10px;flex-direction:column;gap:8px;margin:0 0 16px;padding:12px 16px;font-size:14px;display:flex}.study-goals>div{grid-template-columns:5.5em minmax(0,1fr);gap:10px;display:grid}.study-goals dt{color:var(--accent);font-weight:700}.study-goals dd{color:var(--text);word-break:keep-all;overflow-wrap:anywhere;margin:0}@media (width<=720px){.study-goals>div{grid-template-columns:minmax(0,1fr);gap:2px}}.study-tabs{flex-wrap:wrap;gap:6px;margin-bottom:14px;display:flex}.study-tab{background:var(--panel);color:var(--muted);border:1px solid var(--border);white-space:nowrap;padding:8px 18px;font-weight:600}@media (width<=720px){.study-tab{padding:8px 12px}}.study-tab.active{background:var(--accent);color:var(--bg);border-color:var(--accent)}.study-demo{color:#111;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;background:#fff;border-radius:10px;max-height:480px;padding:16px;font-family:system-ui,Malgun Gothic,sans-serif;overflow:auto}.study-demo button,.study-demo input,.study-demo textarea,.study-demo select{all:revert}.study-demo [style*="100vw"]{width:100%!important;height:320px!important}.console-panel{border:1px solid var(--border);border-radius:10px;margin-top:14px;overflow:hidden}.console-head{background:var(--panel-2);color:var(--muted);justify-content:space-between;align-items:center;padding:6px 12px;font-size:12.5px;display:flex}.console-head button{padding:4px 10px;font-size:12px}.console-lines{color:#cfe3cf;background:#0b0d11;max-height:200px;padding:10px 12px;font-family:Consolas,D2Coding,monospace;font-size:12.5px;overflow:auto}.console-empty{color:var(--muted)}.code-view .file-tabs{flex-wrap:wrap;gap:6px;margin-bottom:10px;display:flex}.file-tab{background:var(--panel-2);color:var(--muted);border:1px solid var(--border);padding:6px 12px;font-size:12.5px;font-weight:500}.file-tab.active{color:var(--text);border-color:var(--accent-2)}.code-block{border:1px solid var(--border);tab-size:4;background:#0b0d11;border-radius:10px;max-height:560px;margin:0;padding:14px;font-family:Consolas,D2Coding,monospace;font-size:12.5px;line-height:1.6;overflow:auto}.study-pager{justify-content:space-between;gap:12px;margin-top:4px;font-size:13.5px;display:flex}.study-pager a{color:var(--accent);text-decoration:none}.notes-section{border:1px solid var(--border);background:var(--panel-2);border-radius:10px;margin-bottom:10px}.notes-section>summary{cursor:pointer;padding:12px 14px;font-size:14.5px;font-weight:600}.notes-section>.markdown{padding:0 16px 14px}.notes-intro{margin-bottom:14px}.markdown{word-break:keep-all;font-size:14px;line-height:1.7}.markdown h3{margin:18px 0 6px;font-size:15px}.markdown p{margin:8px 0}.markdown ul,.markdown ol{padding-left:22px}.markdown code{background:var(--bg);border:1px solid var(--border);border-radius:4px;padding:1px 5px;font-family:Consolas,D2Coding,monospace;font-size:12.5px}.markdown pre{border:1px solid var(--border);background:#0b0d11;border-radius:8px;padding:12px;overflow:auto}.markdown pre code{background:0 0;border:none;padding:0}.markdown blockquote{border-left:3px solid var(--accent-2);color:var(--muted);margin:10px 0;padding:4px 14px}.markdown table{border-collapse:collapse;display:block;overflow-x:auto}.markdown th,.markdown td{border:1px solid var(--border);text-align:left;padding:6px 10px}.notes-section>summary code{background:var(--bg);border:1px solid var(--border);border-radius:4px;padding:1px 5px;font-family:Consolas,D2Coding,monospace;font-size:13px;font-weight:500}.code-block code{min-width:max-content;font-family:inherit;display:block}.code-block .code-line{white-space:pre;display:flex}.code-block .line-no{text-align:right;color:#5c6370;-webkit-user-select:none;user-select:none;flex:none;width:2.6em;padding-right:1em}.code-block .line-text{flex:1}.markdown .code-block{margin:10px 0}.ai-comment{border:1px solid #ff7a1a59;border-left:4px solid var(--accent-2);background:#ff7a1a12;border-radius:10px;margin:14px 0;padding:10px 14px 12px;font-size:13.5px}.ai-comment-title{color:var(--accent-2);letter-spacing:.02em;margin-bottom:4px;font-size:12px;font-weight:700}.ai-comment>:last-child{margin-bottom:0}.study-part{margin-top:24px}.study-part-title{color:var(--accent);margin:0 0 10px;font-size:15px}.study-card.disabled{opacity:.55;cursor:default}.study-card.disabled:hover{border-color:var(--border)}.study-soon{margin-left:8px}.live-requests{flex-direction:column;gap:16px;display:flex}.live-request{background:var(--panel-2);border:1px solid var(--border);border-radius:var(--radius);min-width:0;padding:14px}.live-request h3{margin:0;font-size:15px}.live-status{color:var(--muted);margin:10px 0 6px}.live-status strong{color:var(--accent)}.stream-viz h4{color:var(--muted);margin:16px 0 8px;font-size:14px}.stream-presets{flex-wrap:wrap;gap:6px;margin-bottom:10px;display:flex}.stream-pipeline{flex-wrap:wrap;align-items:center;gap:6px;margin:14px 0 8px;padding:0;font-family:Consolas,D2Coding,monospace;font-size:13px;list-style:none;display:flex}.stream-pipeline li{border:1px solid var(--border);background:var(--panel-2);color:var(--muted);border-radius:8px;padding:5px 10px}.stream-pipeline li+li:before{content:"→";color:var(--muted);margin:0 8px 0 -2px}.stream-pipeline li.on{border-color:var(--accent);color:var(--accent)}.stream-now{min-height:1.6em;color:var(--text);margin:6px 0 10px;font-family:Consolas,D2Coding,monospace;font-size:14px}.stream-controls{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.stream-controls button{padding:7px 14px;font-size:13px}.stream-counter{color:var(--muted);margin-left:4px;font-size:13px}.stream-board{grid-template-columns:minmax(0,3fr) minmax(0,2fr);gap:16px;display:grid}@media (width<=720px){.stream-board{grid-template-columns:minmax(0,1fr)}}.stream-items{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.stream-item{border:1px solid var(--border);background:var(--panel-2);border-radius:8px;flex-wrap:wrap;align-items:center;gap:4px 10px;padding:8px 10px;font-size:13px;display:flex}.stream-item-name{font-weight:600}.stream-item-info{color:var(--muted)}.stream-item-state{color:var(--muted);margin-left:auto;font-size:12px}.stream-item.current{border-color:var(--accent)}.stream-item.current .stream-item-state{color:var(--accent)}.stream-item.dropped{opacity:.6}.stream-item.dropped .stream-item-name{text-decoration:line-through}.stream-item.dropped .stream-item-state{color:var(--danger)}.stream-item.held .stream-item-state{color:var(--accent-2)}.stream-item.passed .stream-item-state{color:var(--ok)}.stream-item.skipped{opacity:.45;border-style:dashed}.stream-result,.stream-map{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.stream-result li,.stream-map li{border:1px solid var(--border);background:var(--panel-2);border-radius:8px;padding:8px 10px;font-size:13px}.stream-map li{align-items:center;gap:10px;display:flex}.stream-map li span:first-child{width:5em}.stream-bar{background:var(--accent);border-radius:5px;height:10px;transition:width .2s}.stream-result li.stream-empty,.stream-map li.stream-empty{color:var(--muted);border-style:dashed}.stream-point{color:var(--muted);word-break:keep-all;margin:10px 0 0;font-size:13px}.stream-log{border:1px solid var(--border);color:#cfe3cf;white-space:pre-wrap;background:#0b0d11;border-radius:10px;max-height:220px;margin:0;padding:10px 12px;font-family:Consolas,D2Coding,monospace;font-size:12.5px;list-style:none;overflow:auto}.stream-log li.extra{color:var(--muted)}
