:root{--table-felt:#0d5c1e;--table-rail:#5c3d2e}body.theme-light{--table-felt:#0d5c1e;--table-rail:#5c3d2e}.player-card.active{padding:6px 10px}.player-card .ball-indicator{display:flex;gap:3px}.player-card .ball-indicator .ball-dot{width:14px;height:14px;border-radius:50%}.ball-dot.solid{background:linear-gradient(135deg,gold 0,#ff8c00 100%);box-shadow:inset -2px -2px 4px rgba(0,0,0,.3)}.ball-dot.stripe{background:linear-gradient(135deg,#4169e1 0,#1e90ff 100%);border:2px solid #fff;box-shadow:inset -2px -2px 4px rgba(0,0,0,.3)}.player-card .name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.player-card .timer{font-family:monospace;font-size:14px;font-weight:700;background:var(--bg-primary);padding:2px 6px;border-radius:4px}.player-card .timer.warning{color:var(--warning);animation:pulse 1s infinite}.player-card .timer.danger{color:var(--accent);animation:pulse .5s infinite}.player-card.inactive{opacity:.5;filter:grayscale(30%)}.player-card.inactive .name,.player-card.inactive .rating{color:var(--text-secondary)}.turn-indicator{position:absolute;top:10px;left:50%;transform:translateX(-50%);padding:8px 20px;border-radius:20px;font-weight:700;font-size:14px;text-transform:uppercase;letter-spacing:1px;z-index:100;animation:fadeInDown .3s ease}.turn-indicator.my-turn{background:linear-gradient(135deg,#4caf50,#2e7d32);color:#fff;box-shadow:0 4px 15px rgba(76,175,80,.4)}.turn-indicator.opponent-turn{background:linear-gradient(135deg,#f44336,#c62828);color:#fff;box-shadow:0 4px 15px rgba(244,67,54,.4)}@keyframes fadeInDown{from{opacity:0;transform:translateX(-50%) translateY(-10px)}to{opacity:1;transform:translateX(-50%) translateY(0)}}.table-container.opponent-turn #game-canvas{cursor:not-allowed}.table-container.my-turn #game-canvas{cursor:crosshair}.table-container{position:relative;background:0 0;padding:0;border-radius:0;box-shadow:none;display:flex;flex-direction:column;justify-content:center}@media (min-width:821px){.game-area{justify-content:center;gap:10px}.table-container{flex:0 0 auto;max-width:900px}.spin-control{margin-top:10px}}#game-canvas{display:block;width:100%;max-width:1000px;height:auto;border-radius:8px;cursor:crosshair;background:0 0}.spin-control{display:flex;align-items:center;justify-content:space-between;height:clamp(40px,8vw,60px);gap:clamp(6px,2vw,20px);padding:0 clamp(8px,2vw,20px);background:var(--bg-secondary);border-radius:10px;width:100%;max-width:800px;transition:opacity .3s ease}.spin-control.disabled{opacity:.4;pointer-events:none}.spin-label{font-weight:700;color:var(--text-secondary);font-size:14px}.cue-ball-control{position:relative}#spin-canvas{background:#fff;border-radius:50%;cursor:pointer;box-shadow:0 2px 10px rgba(0,0,0,.3)}.power-meter{flex:1;display:flex;align-items:center;gap:12px;padding:8px 12px;background:linear-gradient(145deg,rgba(0,0,0,.3),rgba(0,0,0,.1));border-radius:12px;border:1px solid rgba(255,255,255,.05)}.power-label{font-weight:700;color:var(--text-secondary);font-size:13px;min-width:50px;text-transform:uppercase;letter-spacing:.5px}.power-bar{flex:1;height:clamp(14px,3vw,20px);background:linear-gradient(180deg,#1a1a1a 0,#2a2a2a 50%,#1a1a1a 100%);border-radius:12px;overflow:hidden;box-shadow:inset 0 2px 4px rgba(0,0,0,.5),inset 0 -1px 2px rgba(255,255,255,.05);position:relative;border:1px solid rgba(0,0,0,.3)}.power-bar::before{content:'';position:absolute;top:2px;left:2px;right:2px;height:8px;background:linear-gradient(180deg,rgba(255,255,255,.08),transparent);border-radius:10px 10px 0 0;pointer-events:none}.power-fill{height:100%;width:0%;background:linear-gradient(180deg,#4ade80 0,#22c55e 20%,#facc15 50%,#f97316 70%,#ef4444 90%,#dc2626 100%);background-size:100% 100%;transition:width 80ms ease-out;position:relative;border-radius:10px;box-shadow:0 0 10px rgba(255,150,50,.3),inset 0 1px 2px rgba(255,255,255,.3)}.power-fill::after{content:'';position:absolute;top:2px;left:2px;right:2px;height:40%;background:linear-gradient(180deg,rgba(255,255,255,.4),transparent);border-radius:8px 8px 0 0}.power-bar::after{content:'';position:absolute;top:0;left:0;right:0;bottom:0;background:repeating-linear-gradient(90deg,transparent 0,transparent 9.5%,rgba(0,0,0,.3) 9.5%,rgba(0,0,0,.3) 10%);pointer-events:none}.power-value{min-width:48px;text-align:right;font-weight:700;font-family:'Courier New',monospace;font-size:16px;color:#fff;text-shadow:0 0 8px rgba(255,200,100,.5);background:linear-gradient(180deg,rgba(0,0,0,.3),rgba(0,0,0,.1));padding:4px 8px;border-radius:6px;border:1px solid rgba(255,255,255,.1)}.ball-status{padding:15px;background:var(--bg-card);border-radius:10px}.ball-status-header{font-weight:700;margin-bottom:10px;color:var(--text-secondary);font-size:14px;text-transform:uppercase}.balls-remaining{display:flex;gap:6px;flex-wrap:wrap}.ball-mini{width:24px;height:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:700;color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.5);box-shadow:inset -2px -2px 4px rgba(0,0,0,.3),0 2px 4px rgba(0,0,0,.2)}.ball-mini.pocketed{opacity:.3}.ball-1{background:linear-gradient(135deg,gold 0,#daa520 100%)}.ball-2{background:linear-gradient(135deg,#4169e1 0,#1e3a8a 100%)}.ball-3{background:linear-gradient(135deg,#dc2626 0,#991b1b 100%)}.ball-4{background:linear-gradient(135deg,#7c3aed 0,#5b21b6 100%)}.ball-5{background:linear-gradient(135deg,#ea580c 0,#c2410c 100%)}.ball-6{background:linear-gradient(135deg,#059669 0,#047857 100%)}.ball-7{background:linear-gradient(135deg,#7f1d1d 0,#450a0a 100%)}.ball-8{background:linear-gradient(135deg,#1f2937 0,#111827 100%)}.ball-9{background:linear-gradient(135deg,gold 0,#daa520 100%);border:3px solid #fff}.ball-10{background:linear-gradient(135deg,#4169e1 0,#1e3a8a 100%);border:3px solid #fff}.ball-11{background:linear-gradient(135deg,#dc2626 0,#991b1b 100%);border:3px solid #fff}.ball-12{background:linear-gradient(135deg,#7c3aed 0,#5b21b6 100%);border:3px solid #fff}.ball-13{background:linear-gradient(135deg,#ea580c 0,#c2410c 100%);border:3px solid #fff}.ball-14{background:linear-gradient(135deg,#059669 0,#047857 100%);border:3px solid #fff}.ball-15{background:linear-gradient(135deg,#7f1d1d 0,#450a0a 100%);border:3px solid #fff}.foul-content{text-align:center}.foul-reason{font-size:18px;color:var(--warning);margin:20px 0;padding:15px;background:rgba(251,191,36,.1);border-radius:8px}.tutorial-content{min-height:380px;padding:25px;background:linear-gradient(180deg,rgba(26,26,46,.5) 0,rgba(15,15,30,.8) 100%);border-radius:12px}.tutorial-step{text-align:center}.tutorial-step h3{font-size:26px;margin-bottom:15px;color:var(--accent);text-shadow:0 2px 10px rgba(79,172,254,.3)}.tutorial-step p{font-size:15px;line-height:1.7;color:var(--text-secondary);margin-bottom:20px;max-width:500px;margin-left:auto;margin-right:auto}.tutorial-image{max-width:420px;margin:20px auto;background:linear-gradient(145deg,#1e1e3a 0,#0d0d1a 100%);border-radius:16px;padding:15px;display:flex;flex-direction:column;align-items:center;box-shadow:0 8px 32px rgba(0,0,0,.4),inset 0 1px 0 rgba(255,255,255,.05);border:1px solid rgba(79,172,254,.15)}.tutorial-image canvas{border-radius:10px;box-shadow:0 4px 20px rgba(0,0,0,.3)}.tutorial-caption{margin-top:12px;font-size:14px;color:#4facfe;font-weight:600;background:linear-gradient(90deg,#4facfe,#00f2fe);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.tutorial-navigation{display:flex;justify-content:space-between;align-items:center;padding-top:20px;margin-top:10px;border-top:1px solid rgba(79,172,254,.2)}.tutorial-progress{color:var(--text-secondary);font-weight:500}@keyframes pulse{0%,100%{opacity:1}50%{opacity:.5}}.room-item.room-live{border:2px solid #e74c3c;background:linear-gradient(135deg,rgba(231,76,60,.1),rgba(192,57,43,.05));cursor:default}.room-item.room-live:hover{transform:none;border-color:#c0392b}.room-title-row{display:flex;align-items:center;gap:8px}.live-badge{background:linear-gradient(135deg,#e74c3c,#c0392b);color:#fff;padding:2px 8px;border-radius:10px;font-size:11px;font-weight:600;animation:live-pulse 1.5s infinite}@keyframes live-pulse{0%,100%{opacity:1}50%{opacity:.7}}.chat-tabs{display:flex;border-bottom:1px solid var(--border-color);margin-bottom:0}.chat-tab{flex:1;padding:10px 15px;background:0 0;border:none;color:var(--text-secondary);font-size:14px;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center;gap:6px}.chat-tab:hover{background:var(--bg-hover);color:var(--text-primary)}.chat-tab.active{color:var(--accent);border-bottom:2px solid var(--accent);font-weight:500}.participant-count{background:var(--accent);color:#fff;font-size:11px;padding:2px 6px;border-radius:10px;min-width:18px;text-align:center}.tab-content{flex:1;display:flex;flex-direction:column;overflow:hidden}#chat-content{display:flex;flex-direction:column;height:100%}#chat-content .chat-messages{flex:1}.participants-list{padding:10px;overflow-y:auto;height:100%}.participant-section{margin-bottom:15px}.participant-section-header{font-size:12px;color:var(--text-secondary);font-weight:600;margin-bottom:8px;padding-bottom:5px;border-bottom:1px solid var(--border-color)}.participant-items{display:flex;flex-direction:column;gap:6px}.participant-item{display:flex;align-items:center;gap:10px;padding:8px 10px;background:var(--bg-secondary);border-radius:8px;font-size:13px}.participant-item.player{border-left:3px solid var(--accent)}.participant-avatar{width:28px;height:28px;border-radius:50%;background:var(--bg-hover);display:flex;align-items:center;justify-content:center;font-size:14px}.participant-info{flex:1}.participant-name{font-weight:500;color:var(--text-primary)}.participant-role{font-size:11px;color:var(--text-secondary)}.empty-participants{text-align:center;color:var(--text-secondary);padding:20px;font-size:13px}@media (max-width:600px){.player-card{padding:6px 10px;min-width:0;flex:1;display:flex;flex-direction:row;align-items:center;gap:8px;text-align:left}.player-card .ball-indicator{flex-shrink:0}.player-card .ball-indicator .ball-dot{width:12px;height:12px}.player-card .player-info{display:flex;flex-direction:column;flex:1;min-width:0}.player-card .name{font-size:13px;margin-bottom:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.player-card .rating{font-size:11px}.player-card .timer{font-size:15px;margin:0;flex-shrink:0}.player-card .ai-badge{font-size:8px;padding:2px 5px;top:-4px;right:-4px}.vs-text{font-size:14px;flex-shrink:0}}@media (max-width:380px){.player-card{padding:6px 8px;min-width:85px}.player-card .name{font-size:11px;max-width:65px}.player-card .timer{font-size:12px}.vs-text{font-size:14px}}@media (max-width:900px) and (orientation:portrait){.game-room .ad-container{display:none!important}.game-area{width:100%;height:calc(100vh - 60px);height:calc(100dvh - 60px);display:flex;flex-direction:column;align-items:center;gap:6px;overflow-x:hidden;position:relative;padding-bottom:env(safe-area-inset-bottom);box-sizing:border-box}.game-header{flex-shrink:0}.spin-control{flex-shrink:0;flex-direction:row;flex-wrap:nowrap;align-items:center;justify-content:space-between;max-width:100%;margin:0;position:relative;z-index:10}.spin-control.vertical-mode{transform:rotate(90deg);transform-origin:center center}.table-container{flex:1;min-height:0;display:flex;align-items:center;justify-content:center;width:100%;overflow:visible;position:relative}#game-canvas.vertical-mode{position:absolute;left:50%;top:0;transform:translateX(-50%) rotate(90deg);transform-origin:center center;max-height:92vw;max-width:calc(100vh - 200px);max-width:calc(100dvh - 200px);width:auto;height:auto}.cue-ball-control{flex-shrink:0}.player-card{padding:6px 10px;min-width:0;flex:1;display:flex;flex-direction:row;align-items:center;gap:8px;text-align:left}.player-card .player-info{display:flex;flex-direction:column;flex:1;min-width:0}.player-card .name{font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.player-card .rating{font-size:11px}.player-card .timer{font-size:15px;flex-shrink:0}}@media (max-width:600px){.game-area{height:calc(100vh + 20px);height:calc(100dvh + 20px);gap:4px}#spin-canvas{width:36px;height:36px}.power-value{min-width:36px;font-size:13px}}@media (max-width:380px){.game-area{height:calc(100vh - 45px);height:calc(100dvh - 45px);gap:2px}#spin-canvas{width:32px;height:32px}.power-value{min-width:28px;font-size:11px}}@media (max-width:820px){.table-container{width:100%;padding:0 6px;box-sizing:border-box}#game-canvas{width:100%;max-width:100%}}.speech-bubble-container{position:fixed;top:50%;left:50%;width:max-content;max-width:min(560px,calc(100vw - 48px));transform:translate(-50%,-50%);z-index:2000;pointer-events:none;display:none}.speech-bubble-container.active{display:block;animation:bubble-appear .3s ease-out forwards}.speech-bubble{position:relative;box-sizing:border-box;background:#fff;border:4px solid #333;border-radius:24px;padding:clamp(16px,4vw,25px) clamp(16px,5vw,40px);font-size:clamp(18px, 4vw, 32px);line-height:1.5;white-space:normal;overflow-wrap:anywhere;word-break:normal;font-weight:700;color:#333;text-align:center;box-shadow:4px 4px 0 #333,8px 8px 15px rgba(0,0,0,.3);font-family:'Noto Sans KR','Malgun Gothic',sans-serif;min-width:0;max-width:100%}.speech-bubble::before{content:'';position:absolute;top:-15px;left:20%;width:30px;height:30px;background:#fff;border:4px solid #333;border-radius:50%;border-bottom:none;z-index:-1}.speech-bubble::after{content:'';position:absolute;top:-10px;right:25%;width:25px;height:25px;background:#fff;border:4px solid #333;border-radius:50%;border-bottom:none;z-index:-1}.speech-bubble .cloud-bump-1{position:absolute;top:-12px;left:45%;width:35px;height:35px;background:#fff;border:4px solid #333;border-radius:50%;border-bottom:none;z-index:-1}.speech-bubble .cloud-bump-2{position:absolute;bottom:-8px;left:30%;width:20px;height:20px;background:#fff;border:4px solid #333;border-radius:50%;border-top:none}.speech-bubble .cloud-bump-3{position:absolute;bottom:-10px;right:35%;width:25px;height:25px;background:#fff;border:4px solid #333;border-radius:50%;border-top:none}.speech-bubble.warning{background:linear-gradient(135deg,ivory 0,#fff8dc 100%);border-color:#daa520;color:#b8860b;box-shadow:4px 4px 0 #daa520,8px 8px 20px rgba(218,165,32,.4)}.speech-bubble.warning .cloud-bump-1,.speech-bubble.warning .cloud-bump-2,.speech-bubble.warning .cloud-bump-3,.speech-bubble.warning::after,.speech-bubble.warning::before{background:linear-gradient(135deg,ivory 0,#fff8dc 100%);border-color:#daa520}@keyframes bubble-appear{0%{transform:translate(-50%,-50%) scale(0);opacity:0}50%{transform:translate(-50%,-50%) scale(1.02)}100%{transform:translate(-50%,-50%) scale(1);opacity:1}}@keyframes bubble-shake{0%,100%{transform:translate(-50%,-50%) rotate(0)}25%{transform:translate(-50%,-50%) rotate(-3deg)}75%{transform:translate(-50%,-50%) rotate(3deg)}}.speech-bubble-container.shake{animation:bubble-appear .3s ease-out,bubble-shake .15s ease-in-out .3s 3}@media (max-width:600px){.speech-bubble::before{width:22px;height:22px;top:-10px}.speech-bubble::after{width:18px;height:18px;top:-8px}}@media (max-width:768px){.ad-pc-only{display:none!important}}@media (min-width:769px){.ad-mobile-only{display:none!important}}.ad-lobby{display:flex;flex-wrap:wrap;justify-content:center}.guide-slide-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.6);z-index:9998;opacity:0;visibility:hidden;transition:opacity .3s ease,visibility .3s ease}.guide-slide-overlay.active{opacity:1;visibility:visible}.guide-slide-panel{position:fixed;top:0;right:-450px;width:450px;max-width:90vw;height:100%;background:var(--bg-secondary);z-index:9999;transition:right .3s ease;display:flex;flex-direction:column;box-shadow:-4px 0 20px rgba(0,0,0,.3)}.guide-slide-panel.active{right:0}.guide-slide-header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;background:var(--bg-card);border-bottom:1px solid var(--border);flex-shrink:0}.guide-slide-header h2{margin:0;font-size:18px;color:var(--text-primary)}.guide-slide-close{background:0 0;border:none;font-size:28px;color:var(--text-secondary);cursor:pointer;padding:0;line-height:1;transition:color .2s}.guide-slide-close:hover{color:var(--accent)}.guide-slide-content{flex:1;overflow-y:auto;padding:20px}.guide-article{color:var(--text-primary)}.guide-section{margin-bottom:24px;padding-bottom:20px;border-bottom:1px solid var(--border)}.guide-section:last-child{border-bottom:none;margin-bottom:0}.guide-section h3{font-size:16px;color:var(--accent);margin:0 0 12px 0;display:flex;align-items:center;gap:8px}.guide-section p{font-size:14px;line-height:1.6;color:var(--text-secondary);margin:0}.guide-rules-basis a{display:inline-block;margin-top:10px;color:var(--accent);font-size:13px;text-underline-offset:3px}.guide-assignment{padding:16px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:8px;overflow-wrap:anywhere}.guide-assignment .guide-tips-list{margin:14px 0}.guide-definition-list{margin:0}.guide-definition-list dt{font-weight:700;color:var(--text-primary);font-size:14px;margin-top:10px}.guide-definition-list dt:first-child{margin-top:0}.guide-definition-list dd{margin:4px 0 0 0;font-size:13px;color:var(--text-secondary);line-height:1.5}.guide-tips-list{margin:0;padding-left:20px}.guide-tips-list li{font-size:13px;color:var(--text-secondary);line-height:1.6;margin-bottom:8px}.guide-tips-list li:last-child{margin-bottom:0}.guide-faq-list{margin:0}.guide-faq-list dt{font-weight:700;color:var(--text-primary);font-size:14px;margin-top:12px}.guide-faq-list dt:first-child{margin-top:0}.guide-faq-list dd{margin:6px 0 0 0;font-size:13px;color:var(--text-secondary);line-height:1.5;padding-left:12px;border-left:2px solid var(--accent)}@media (max-width:480px){.guide-slide-panel{width:100%;max-width:100%;right:-100%}.guide-slide-panel.active{right:0}.guide-slide-header{padding:14px 16px}.guide-slide-header h2{font-size:16px}.guide-slide-content{padding:16px}.guide-section h3{font-size:15px}}.ad-mobile-fixed{position:static;margin:10px auto;width:320px;height:50px}.ad-mobile-fixed.hidden{display:none}.sidebar{padding:1px;gap:1px}.sidebar-tabs{display:flex;border-bottom:1px solid var(--border-color);margin-bottom:1px;flex-shrink:0}.sidebar-tab{flex:1;padding:10px;background:0 0;border:none;color:var(--text-secondary);font-size:14px;font-weight:500;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center;gap:6px}.sidebar-tab:hover{background:var(--bg-hover);color:var(--text-primary)}.sidebar-tab.active{color:var(--accent);border-bottom:2px solid var(--accent);margin-bottom:-1px}.sidebar-tab-content{flex:1;display:flex;flex-direction:column;gap:1px;overflow-y:auto;min-height:0}#sidebar-chat-content .chat-panel{display:flex;flex-direction:column;flex:1;background:var(--bg-card);border-radius:1px;overflow:hidden;min-height:0}#sidebar-chat-content .chat-section{flex:1;display:flex;flex-direction:column;overflow:hidden;min-height:0}#sidebar-chat-content .chat-messages{flex:1;overflow-y:auto;padding:1px;min-height:150px}#sidebar-chat-content .game-controls{padding:10px;border-top:1px solid var(--border-color);display:flex;flex-wrap:wrap;gap:8px;flex-shrink:0}#sidebar-chat-content .game-controls .btn{flex:1;min-width:80px}.sidebar .ad-sidebar{flex-shrink:0;margin-top:auto;display:flex;justify-content:center}@media (max-width:820px){.sidebar-tabs{display:none}}#participants-content{min-height:0}#participants-content .participants-list{flex:1;height:auto;min-height:0}.participant-search{padding:10px 10px 0}.participant-search input{width:100%;padding:8px 10px;color:var(--text-primary);background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:6px}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}#players-list.virtual-list{display:block}#players-list.virtual-list>.participant-item{margin-bottom:6px}.virtual-list-spacer{width:100%;margin:0;padding:0;pointer-events:none}.game-header .player-card{display:grid;grid-template-columns:minmax(0,1fr);align-items:stretch;min-width:0;flex:1 1 0;max-width:260px;gap:4px}.game-header .player-card.inactive{opacity:1;filter:none}.player-card .ball-indicator{display:flex;align-items:center;gap:7px;box-sizing:border-box;min-width:0;min-height:42px;padding:5px 7px;border-radius:6px;background:var(--bg-primary);color:var(--text-primary);font-size:12px;font-weight:700;line-height:1.35;white-space:normal}.player-card .group-label{min-width:0;overflow-wrap:anywhere}.player-card .ball-indicator .ball-dot{box-sizing:border-box;flex:0 0 20px;width:20px;height:20px;border:1px solid rgba(0,0,0,.35);box-shadow:inset -2px -2px 4px rgba(0,0,0,.25)}.ball-indicator[data-group=solid] .ball-dot{background:#facc15}.ball-indicator[data-group=stripe] .ball-dot{background:linear-gradient(to bottom,#fff 0 28%,#facc15 28% 72%,#fff 72% 100%)}.ball-indicator[data-group=open] .ball-dot{border:2px dashed var(--text-secondary);background:0 0;box-shadow:none}#pool-rule-decision-modal .modal{box-sizing:border-box;width:min(540px,90vw);min-width:0;max-height:90dvh;overflow:auto}#pool-rule-decision-actions{display:flex;flex-wrap:wrap;gap:10px}#pool-rule-decision-actions .btn{flex:1 1 140px;white-space:normal}