*{margin:0;padding:0;box-sizing:border-box}:root{--cell: 80px;--label: 30px;--stick-w: 11px;--stick-h: 50px}body{font-family:Segoe UI,Arial,sans-serif;background:#1a1a2e;color:#eee;min-height:100vh;-webkit-user-select:none;user-select:none}.app{display:flex;flex-direction:column;align-items:center;padding:12px 24px;min-height:100vh}.header{display:flex;align-items:center;gap:16px;margin-bottom:10px}.title{font-size:32px;letter-spacing:4px;color:#ccc;font-weight:700}.center-msg{font-size:18px;color:#888;margin-top:40vh}.main-layout{display:flex;gap:20px;width:100%;max-width:1200px;justify-content:center;align-items:flex-start}.game-side{display:flex;flex-direction:column;align-items:center;flex:1;min-width:0}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:100}.modal{background:#1e1e3a;border-radius:16px;padding:32px;max-width:460px;width:90%;text-align:center;border:1px solid #333;box-shadow:0 8px 40px #00000080}.modal h2{margin-bottom:8px;font-size:22px}.modal-hint{color:#888;font-size:14px;margin-bottom:16px}.modal-close{background:none;border:none;color:#888;font-size:28px;cursor:pointer;padding:4px 10px;border-radius:6px;transition:color .15s,background .15s}.modal-close:hover{color:#fff;background:#ffffff1a}.nickname-form{display:flex;flex-direction:column;gap:12px;align-items:center}.nickname-input{padding:12px 16px;font-size:16px;border-radius:8px;border:1px solid #444;background:#0f3460;color:#eee;outline:none;width:100%;max-width:300px;text-align:center}.nickname-input:focus{border-color:#3f51b5}.rules-modal{max-width:600px;max-height:80vh;overflow-y:auto;text-align:left;padding:24px 28px}.rules-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.rules-header h2{margin-bottom:0}.rules-content section{margin-bottom:18px}.rules-content h3{font-size:16px;color:#ccc;margin-bottom:6px;border-bottom:1px solid #333;padding-bottom:4px}.rules-content p{font-size:14px;color:#bbb;line-height:1.6;margin-bottom:6px}.rules-content ul{font-size:14px;color:#bbb;padding-left:20px;line-height:1.6}.rules-table{width:100%;border-collapse:collapse;font-size:14px;margin-top:6px}.rules-table th,.rules-table td{padding:6px 10px;border:1px solid #444;text-align:left}.rules-table th{background:#ffffff0d;color:#aaa}.rules-table td{color:#bbb}.rules-piece{font-size:18px;font-weight:700;text-align:center;color:#eee}.main-lobby{display:flex;flex-direction:column;gap:14px;width:100%;max-width:600px}.lobby-header{display:flex;justify-content:space-between;align-items:center}.lobby-header h2{font-size:22px}.online-count{font-size:13px;color:#4caf50;background:#4caf501a;padding:4px 12px;border-radius:12px}.create-room-form{display:flex;gap:8px}.room-name-input{flex:1;padding:10px 14px;border-radius:8px;border:1px solid #444;background:#0f3460;color:#eee;font-size:14px;outline:none}.room-name-input:focus{border-color:#3f51b5}.rooms-list{display:flex;flex-direction:column;gap:8px;max-height:500px;overflow-y:auto}.no-rooms{text-align:center;color:#666;font-size:15px;padding:40px 0}.room-card{display:flex;justify-content:space-between;align-items:center;padding:14px 18px;background:#16213e;border-radius:10px;cursor:pointer;border:1px solid #2a2a4a;transition:border-color .15s,background .15s}.room-card:hover{border-color:#3f51b5;background:#1a2745}.room-card-name{font-size:16px;font-weight:600}.room-card-info{display:flex;gap:12px;align-items:center}.room-card-players{font-size:13px;color:#888}.room-card-status{font-size:12px;padding:2px 10px;border-radius:10px}.room-card-status.open{background:#4caf5026;color:#66bb6a}.room-card-status.waiting{background:#ffc10726;color:#ffc107}.room-card-status.playing{background:#f4433626;color:#ef5350}.rules-btn{margin-top:6px;font-size:13px!important;padding:8px 16px!important}.room-view{display:flex;flex-direction:column;gap:14px;width:100%;max-width:600px}.room-header{display:flex;justify-content:space-between;align-items:center}.room-header h2{font-size:22px}.btn-small{padding:6px 14px!important;font-size:13px!important}.room-section-title{font-size:12px;color:#666;margin-bottom:6px;text-transform:uppercase;letter-spacing:1px}.room-members,.room-spectators{background:#16213e;border-radius:10px;padding:12px 16px}.room-member{display:flex;align-items:center;gap:8px;padding:6px 0;font-size:15px}.room-member.you{color:#ffeb3b}.room-member.playing{opacity:.5}.member-name{flex:1}.member-dot{color:#4caf50;font-size:10px}.member-dot.offline{color:#555}.member-challenge{padding:3px 10px!important;font-size:13px!important;margin-left:auto}.challenge-prompt{background:#4caf501a;border:1px solid rgba(76,175,80,.3);border-radius:10px;padding:16px;text-align:center}.challenge-prompt p{margin-bottom:12px}.challenge-wait{background:#ffeb3b0f;border:1px solid rgba(255,235,59,.15);border-radius:10px;padding:16px;text-align:center;color:#aaa}.spectator-header{display:flex;align-items:center;gap:12px;padding:8px 16px;background:#16213e;border-radius:10px;margin-bottom:10px;width:100%;max-width:700px}.spectator-label{font-size:14px;color:#aaa}.watch-section{display:flex;align-items:center;gap:12px}.member-watch{padding:3px 8px!important;font-size:14px!important;margin-left:auto;background:#2a2a4a!important;border:1px solid #444}.member-watch:hover{background:#3a3a5a!important;border-color:#666}.challenge-timer{font-size:14px;color:#ffeb3b;font-weight:700}.color-select{background:#16213e;border-radius:10px;padding:20px;text-align:center}.color-select h3{margin-bottom:10px}.lobby-players{font-size:18px;margin-bottom:8px}.vs{color:#666;margin:0 10px;font-style:italic}.color-buttons{display:flex;gap:10px;margin-top:12px;justify-content:center}.color-request{display:flex;flex-direction:column;align-items:center;gap:12px;margin-top:12px}.white-btn{background:#666!important}.white-btn:hover{background:#777!important}.black-btn{background:#333!important;border:1px solid #555}.black-btn:hover{background:#444!important}.postgame{background:#16213e;border-radius:12px;padding:16px 24px;margin-top:10px;width:100%;max-width:700px}.postgame-result{text-align:center;margin-bottom:12px}.postgame-title{font-size:20px;font-weight:700;display:block;margin-bottom:4px}.postgame-title.win{color:#4caf50}.postgame-title.lose{color:#ef5350}.postgame-reason{font-size:13px;color:#888}.postgame-stats{display:flex;flex-direction:column;gap:4px}.stat-row{display:flex;justify-content:space-between;padding:4px 0;font-size:14px}.stat-label{color:#999}.stat-value{color:#eee;font-weight:600}.stat-divider{height:1px;background:#333;margin:4px 0}.postgame-buttons{margin-bottom:10px;justify-content:center}.board-container{display:flex;flex-direction:column;align-items:center;gap:10px}.score{display:flex;gap:30px;font-size:16px}.score-white{color:#ddd;text-shadow:0 0 2px #000}.score-black{color:#888}.board-wrapper{display:flex}.row-labels{display:flex;flex-direction:column}.row-label{width:var(--label);height:var(--cell);display:flex;align-items:center;justify-content:center;font-size:16px;font-weight:700;color:#999}.board-area{display:flex;flex-direction:column}.board{display:grid;grid-template-columns:repeat(8,var(--cell));grid-template-rows:repeat(8,var(--cell));border:3px solid #444}.col-labels{display:flex}.col-label{width:var(--cell);height:var(--label);display:flex;align-items:center;justify-content:center;font-size:16px;font-weight:700;color:#999}.cell{width:var(--cell);height:var(--cell);position:relative;cursor:pointer}.cell.light{background:#f0d9b5}.cell.dark{background:#b58863}.cell.selected{box-shadow:inset 0 0 0 4px #ffeb3b;z-index:1}.cell.valid-move:after{content:"";position:absolute;top:50%;left:50%;width:22px;height:22px;background:#4caf5099;border-radius:50%;transform:translate(-50%,-50%);pointer-events:none}.cell.valid-capture{box-shadow:inset 0 0 0 4px #f44336;z-index:1}.cell.setup-available{box-shadow:inset 0 0 0 3px #64c8ff66}.cell.last-from:before,.cell.last-to:before,.cell.last-rotate:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:0}.cell.last-from:before{background:#ffeb3b38}.cell.last-to:before{background:#ffeb3b61;animation:pulse-yellow .5s ease-out}.cell.last-rotate:before{background:#64c8ff4d;animation:pulse-blue .5s ease-out}@keyframes pulse-yellow{0%{background:#ffeb3bb3}to{background:#ffeb3b61}}@keyframes pulse-blue{0%{background:#64c8ff99}to{background:#64c8ff4d}}.stick{position:absolute;top:50%;left:50%;width:var(--stick-w);height:var(--stick-h);border-radius:5px;pointer-events:none;transform:translate(-50%,-50%)}.stick.horizontal{transform:translate(-50%,-50%) rotate(90deg)}.stick.diag-right{transform:translate(-50%,-50%) rotate(45deg)}.stick.diag-left{transform:translate(-50%,-50%) rotate(-45deg)}.stick.white-piece{background:#f5f5f0;border:2px solid #222;box-shadow:1px 1px 4px #0000004d}.stick.black-piece{background:#1a1a1a;border:2px solid #ddd;box-shadow:1px 1px 4px #0000004d}.star-container{position:absolute;width:100%;height:100%;pointer-events:none}.star-container .stick{width:9px;height:44px}.star-container .stick:nth-child(1){transform:translate(-50%,-50%) rotate(0)}.star-container .stick:nth-child(2){transform:translate(-50%,-50%) rotate(60deg)}.star-container .stick:nth-child(3){transform:translate(-50%,-50%) rotate(120deg)}.controls{display:flex;flex-direction:column;align-items:center;gap:10px;min-height:60px;margin-top:4px}.palette{display:flex;gap:10px}.palette-item{display:flex;flex-direction:column;align-items:center;gap:4px;cursor:pointer;padding:8px 14px;border-radius:8px;border:2px solid transparent;background:#ffffff0d;transition:border-color .15s,background .15s}.palette-item:hover{border-color:#aaa;background:#ffffff1a}.palette-item.selected{border-color:#ffeb3b;background:#ffeb3b1a}.palette-item.disabled{opacity:.25;cursor:not-allowed}.palette-preview{width:48px;height:48px;position:relative}.palette-preview .stick{width:9px;height:36px}.palette-count{font-size:13px;color:#aaa}.rotation-section{display:flex;flex-direction:column;align-items:center;gap:4px}.rotation-panel{display:flex;gap:10px}.rotation-btn{width:56px;height:56px;position:relative;cursor:pointer;border-radius:8px;border:2px solid #555;background:#2a2a4a;transition:border-color .15s}.rotation-btn:hover{border-color:#ffeb3b}.rotation-btn.current{border-color:#4caf50;opacity:.4;cursor:default}.rotation-btn .stick{width:8px;height:32px}.btn-row{display:flex;gap:10px;align-items:center}.btn{padding:10px 22px;font-size:15px;border:none;border-radius:8px;cursor:pointer;background:#3f51b5;color:#fff;transition:background .15s}.btn:hover{background:#5c6bc0}.btn.green{background:#388e3c}.btn.green:hover{background:#43a047}.btn.red{background:#c62828}.btn.red:hover{background:#d32f2f}.label-small,.hint{font-size:13px;color:#888}.info{font-size:16px;text-align:center}.countdown{font-size:24px;font-weight:700;color:#ffeb3b}.gameover{font-size:20px}.chat{width:300px;min-width:300px;background:#16213e;border-radius:12px;display:flex;flex-direction:column;height:720px;flex-shrink:0}.chat-top{border-bottom:1px solid #333}.chat-context{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;font-size:14px;font-weight:700}.chat-context-label{color:#999}.chat-context-name{color:#ccc}.chat-user{display:flex;align-items:center;gap:8px;padding:6px 14px 10px;font-size:13px}.chat-user-name{color:#ffeb3b;font-weight:600}.chat-edit-btn{background:none;border:none;color:#666;cursor:pointer;font-size:13px;padding:2px 6px;border-radius:4px;transition:color .15s,background .15s}.chat-edit-btn:hover{color:#eee;background:#ffffff1a}.chat-rename{display:flex;gap:6px;padding:0 14px 10px}.chat-rename input{flex:1;padding:5px 10px;border-radius:6px;border:1px solid #444;background:#0f3460;color:#eee;font-size:13px;outline:none}.chat-rename input:focus{border-color:#3f51b5}.chat-rename button{padding:5px 10px;font-size:12px}.chat-messages{flex:1;overflow-y:auto;padding:8px 12px;display:flex;flex-direction:column;gap:4px}.chat-msg{font-size:13px;line-height:1.4}.chat-msg.system{color:#888;font-style:italic}.chat-from{font-weight:700;margin-right:6px}.chat-input{display:flex;gap:6px;padding:8px;border-top:1px solid #333}.chat-input input{flex:1;padding:8px 12px;border-radius:6px;border:1px solid #333;background:#0f3460;color:#eee;font-size:14px;outline:none}.chat-input input:focus{border-color:#3f51b5}.chat-send{padding:8px 14px}
