.duel-lobby-page,.duel-table-page{color:#f7fbf8;background:#123630}.duel-lobby-page [hidden],.duel-table-page [hidden]{display:none!important}.duel-lobby-page .site-header,.duel-table-page .site-header{position:relative;z-index:20}.duel-lobby-page .site-header nav,.duel-table-page .site-header nav{flex-wrap:wrap}.duel-lobby-page .skip-link:not(:focus),.duel-table-page .skip-link:not(:focus){transform:translateY(-180%)!important;visibility:hidden;opacity:0;pointer-events:none}.duel-lobby-page .skip-link:focus,.duel-table-page .skip-link:focus{visibility:visible;opacity:1;pointer-events:auto}.duel-lobby{position:relative;min-height:calc(100dvh - 72px);overflow:hidden;background-image:url(/mahjong/backgrounds/candidates/neon-festival-courtyard-v1.webp);background-position:center;background-size:cover;isolation:isolate}.duel-lobby:before,.duel-table-shell:before{content:"";position:absolute;inset:0;z-index:-1;background:#041e1bb8;pointer-events:none}.duel-lobby-header,.duel-practice,.duel-cafe-toolbar,.duel-cafe-floor,.duel-rules-strip,.duel-guide{position:relative;z-index:1}.duel-lobby-header{display:grid;grid-template-columns:minmax(190px,.65fr) minmax(320px,1.4fr) minmax(180px,.55fr);align-items:center;gap:28px;min-height:200px;padding:28px max(28px,calc((100vw - 1240px)/2));border-bottom:1px solid rgba(176,232,212,.34);background:#00342fc7}.duel-lobby-header h1{margin:2px 0 8px;font-size:clamp(34px,4vw,56px);line-height:1;letter-spacing:0}.duel-lobby-header p{max-width:620px;margin:0;color:#d9e7e2}.duel-identity{display:flex;align-items:center;gap:14px}.duel-identity img{width:58px;aspect-ratio:567 / 783;object-fit:contain;filter:drop-shadow(0 8px 8px rgba(0,0,0,.38))}.duel-identity span,.duel-lobby-status span{display:block;margin-bottom:3px;color:#b9d2ca;font-size:12px;text-transform:uppercase}.duel-identity strong,.duel-lobby-status strong{display:block;color:#fff3b0;font-size:20px}.duel-lobby-status{padding-left:18px;border-left:3px solid #efc94c}.duel-lobby-status small{display:block;margin-top:5px;color:#c9ddd6;font-size:12px}.duel-practice{padding:34px max(28px,calc((100vw - 1120px)/2));background:#091c1a94}.duel-practice>header{display:flex;align-items:end;justify-content:space-between;gap:24px;margin-bottom:20px}.duel-practice h2{margin:2px 0 0;font-size:27px;letter-spacing:0}.duel-practice a,.duel-result a,.duel-settings a{color:#9fe5d0;font-weight:800}.duel-practice-options{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.duel-opponent{display:grid;grid-template-columns:64px minmax(0,1fr) auto;align-items:center;gap:18px;min-height:126px;padding:18px;border:1px solid rgba(175,228,210,.32);border-radius:8px;background:#034039e0;box-shadow:0 12px 26px #0000003d}.duel-opponent-mark,.duel-seat-mark{display:grid;place-items:center;width:58px;height:58px;border:2px solid #efc94c;border-radius:50%;color:#fff6c7;background:#8c2f35;font-size:28px;font-weight:900;box-shadow:inset 0 0 0 4px #fff4b929}.duel-opponent-mark.is-advanced,.duel-seat-mark.is-ai{color:#173b35;background:#efc94c}.duel-seat.is-ai .duel-seat-mark.is-ai,.duel-stage-avatar.is-ai{border-color:#ffe58a;color:transparent;background-color:#156c64;background-repeat:no-repeat;background-size:300% 200%;will-change:transform}.duel-seat.is-ai .duel-seat-mark.is-ai.is-reacting,.duel-stage-avatar.is-ai.is-reacting{animation:duelAvatarReaction .5s cubic-bezier(.2,.8,.2,1)}.duel-stage-avatar.is-ai.is-reacting{animation-name:duelStageAvatarReaction}.duel-opponent h3{margin:0 0 5px;font-size:20px;letter-spacing:0}.duel-opponent p{margin:0;color:#c8dcd6;font-size:14px}.duel-opponent button,.duel-control-dock button,.duel-result button{min-height:46px;border:1px solid rgba(255,244,188,.38);border-radius:6px;color:#07342f;background:#8adbbd;font-weight:900;cursor:pointer}.duel-opponent button:hover,.duel-control-dock button:hover:not(:disabled),.duel-result button:hover{color:#122f2b;background:#ffe58a}.duel-opponent button{min-width:148px;padding:0 18px}.duel-cafe-toolbar{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:16px 28px;padding:24px max(24px,calc((100vw - 1240px)/2));background:#081d1bd6}.duel-cafe-heading{display:flex;align-items:end;justify-content:space-between;gap:24px}.duel-cafe-heading h2{margin:2px 0 4px;font-size:27px;letter-spacing:0}.duel-cafe-heading p{margin:0;color:#c9dcd6;font-size:13px}.duel-cafe-heading a{color:#9fe5d0;font-weight:800;white-space:nowrap}.duel-ai-choice{display:grid;grid-template-columns:repeat(2,minmax(110px,1fr));gap:5px;min-width:270px;margin:0;padding:0;border:0}.duel-ai-choice legend{margin:0 0 5px;color:#c9dcd6;font-size:12px;font-weight:800;text-transform:uppercase}.duel-ai-choice label{position:relative;display:block}.duel-ai-choice input{position:absolute;opacity:0;pointer-events:none}.duel-ai-choice span{display:grid;place-items:center;min-height:42px;padding:7px 10px;border:1px solid rgba(177,230,211,.34);border-radius:5px;color:#eaf8f3;background:#075e54;font-weight:900;cursor:pointer}.duel-ai-choice input:checked+span{border-color:#ffe58a;color:#173b35;background:#ffe58a}.duel-ai-choice input:focus-visible+span{outline:3px solid #9fe5d0;outline-offset:2px}.duel-ai-choice input:disabled+span{cursor:default;opacity:.7}.duel-cafe-waiting{grid-column:1 / -1;min-height:34px;padding:8px 12px;border-left:3px solid #efc94c;color:#fff1a3;background:#044039b8;font-weight:900}.duel-cafe-floor{width:min(1240px,calc(100% - 32px));margin:24px auto;padding:22px;border:1px solid rgba(255,228,138,.42);border-radius:8px;background:linear-gradient(90deg,rgba(255,255,255,.035) 1px,transparent 1px) 0 0 / 42px 100%,linear-gradient(180deg,#6f3928,#3f2924 52%,#2b2422);box-shadow:inset 0 0 48px #0f08058c,0 18px 34px #00000047}.duel-cafe-tables{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:22px 18px}.duel-cafe-table{position:relative;display:grid;grid-template-rows:52px 92px 52px;align-items:center;min-width:0;min-height:196px;padding:2px 8px;border:1px solid transparent;border-radius:7px}.duel-cafe-table.is-selected{border-color:#ffe58a;background:#ffeea314;box-shadow:0 0 0 3px #ffe58a1f}.duel-cafe-table:focus{outline:none}.duel-cafe-seat{position:relative;z-index:2;display:flex;align-items:center;justify-self:center;gap:7px;width:min(82%,150px);min-height:44px;padding:4px 8px;border:2px solid rgba(255,205,116,.5);border-radius:6px;color:#fff9e7;background:#8f3c3f;box-shadow:0 5px 10px #1b0a0857}.duel-cafe-seat.is-north{transform:rotate(180deg)}.duel-cafe-seat.is-north>*{transform:rotate(180deg)}.duel-cafe-seat.is-open{justify-content:center;color:#e5cfc5;background:#5e3536}.duel-cafe-seat.is-ai{border-color:#ffd95a;background:#156c64}.duel-cafe-chair{width:36px;height:24px;border:2px solid rgba(255,224,169,.5);border-radius:5px;background:#763336}.duel-cafe-seat>span:last-child{min-width:0}.duel-cafe-seat strong,.duel-cafe-seat small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.duel-cafe-seat strong{font-size:12px}.duel-cafe-seat small{color:#f8e7d5;font-size:.78rem}.duel-cafe-avatar{display:grid;flex:0 0 36px;place-items:center;width:36px;height:36px;overflow:hidden;border:2px solid #ffe58a;border-radius:50%;color:#143c36;background:#ffe58a;font-size:18px;font-weight:900}.duel-cafe-avatar.is-persona{background-color:#0b5d59;background-repeat:no-repeat}.duel-cafe-avatar img{width:100%;height:100%;object-fit:cover;object-position:50% 18%}.duel-cafe-tabletop{position:relative;z-index:1;display:grid;grid-template-columns:1fr auto;grid-template-rows:auto 1fr;align-items:center;gap:4px 8px;width:100%;height:92px;padding:9px 10px;border:4px solid #d0a353;border-radius:8px;color:#fff4c5;background:#075e54;box-shadow:inset 0 0 0 2px #fff4bc21,0 9px 14px #1c0d0661}.duel-cafe-table-number{font-size:12px;font-weight:900;text-transform:uppercase}.duel-cafe-mini-tiles{display:flex;gap:2px}.duel-cafe-mini-tiles i{display:block;width:8px;height:12px;border:1px solid #b56f14;border-radius:2px;background:#fff5d8}.duel-cafe-join,.duel-cafe-start{grid-column:1 / -1;align-self:end;min-height:34px;border:1px solid rgba(255,246,203,.42);border-radius:5px;color:#07342f;background:#8adbbd;font-weight:900;cursor:pointer}.duel-cafe-start{color:#153830;background:#ffe58a}.duel-cafe-join:hover,.duel-cafe-start:hover{background:#fff1a3}.duel-cafe-table-state{grid-column:1 / -1;align-self:end;color:#cce7de;font-size:12px;font-weight:800;text-align:center}.duel-cafe-greeting{position:absolute;top:44px;right:4px;z-index:4;max-width:142px;margin:0;padding:6px 8px;border:1px solid #ffe58a;border-radius:5px;color:#173b35;background:#fff9dd;font-size:11px;font-weight:900;line-height:1.2}.duel-rules-strip{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;max-width:1120px;margin:0 auto;border:1px solid rgba(172,229,209,.26);background:#9cdac633}.duel-rules-strip span{padding:18px;text-align:center;background:#03312cd6}.duel-rules-strip strong{display:block;color:#ffe58a;font-size:22px}.duel-guide{max-width:1120px;margin:34px auto 0;padding:34px 24px 42px;border-top:1px solid rgba(172,229,209,.3)}.duel-guide-heading{max-width:760px}.duel-guide-heading h2{margin:4px 0 12px;color:#fff7d4;font-size:30px;line-height:1.15;letter-spacing:0}.duel-guide-heading>p:last-child,.duel-guide-grid p{color:#d5e7e1;line-height:1.65}.duel-guide-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:28px;margin-top:28px}.duel-guide-grid article{padding-left:18px;border-left:2px solid rgba(239,201,76,.58)}.duel-guide-grid h3{margin:0 0 8px;color:#fff3b0;font-size:18px;letter-spacing:0}.duel-guide-grid p{margin:0}.duel-table-shell{position:relative;display:grid;grid-template-rows:auto auto minmax(430px,1fr) auto auto;min-height:calc(100dvh - 72px);padding:0 24px 14px;overflow:hidden;background-image:url(/mahjong/backgrounds/candidates/neon-festival-courtyard-v1.webp);background-position:center;background-size:cover;isolation:isolate}.duel-table-shell:fullscreen{min-height:100dvh}body.duel-browser-fullscreen-active{overflow:hidden}.duel-table-shell.is-browser-fullscreen{position:fixed;inset:0;z-index:1000;width:100vw;height:100dvh;min-height:100dvh;overflow-x:hidden;overflow-y:auto}.duel-match-header{display:grid;grid-template-columns:minmax(240px,.7fr) minmax(180px,.45fr) minmax(360px,1fr);align-items:center;gap:22px;margin:0 -24px;padding:12px max(24px,calc((100vw - 1420px)/2));border-bottom:1px solid rgba(168,230,209,.34);background:#003430e0}.duel-match-header h1{margin:0;font-size:25px;line-height:1;letter-spacing:0}.duel-match-header .eyebrow{margin:0 0 4px}.duel-turn-status{margin:0;color:#fff0a5;font-size:18px;font-weight:900;text-align:center}.duel-match-facts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;text-align:center}.duel-match-facts span{color:#bcd5cd;font-size:12px;text-transform:uppercase}.duel-match-facts strong{display:block;color:#fff;font-size:15px;text-transform:none}.duel-seat-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;width:min(1100px,100%);margin:12px auto 0}.duel-seat{position:relative;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:12px;min-height:70px;padding:8px 14px;border:1px solid rgba(177,227,210,.3);border-radius:7px;background:#06302cdb;transition:border-color .16s ease,box-shadow .16s ease,background .16s ease}.duel-seat.is-human{grid-template-columns:50px minmax(0,1fr) auto}.duel-seat.is-active{border-color:#ffe278;background:#124b41f0;box-shadow:0 0 0 2px #ffe2782e,0 10px 24px #0000003d}.duel-seat.is-disconnected{opacity:.6}.duel-seat-mark{width:42px;height:42px;font-size:20px}.duel-seat-avatar{width:46px;aspect-ratio:1;padding:0;overflow:hidden;border:2px solid #f4d469;border-radius:50%;background-color:#156c64;background-repeat:no-repeat;background-size:300% 200%;box-shadow:0 0 0 3px #04302b8c,0 6px 12px #0000004d;cursor:pointer}.duel-seat-avatar:focus-visible,.duel-stage-avatar.is-human:focus-visible{outline:3px solid #fff4ad;outline-offset:3px}.duel-seat-copy span{display:block;color:#b9d2ca;font-size:11px;text-transform:uppercase}.duel-seat-copy strong{display:block;margin-top:2px;overflow:hidden;color:#fff;font-size:16px;text-overflow:ellipsis;white-space:nowrap}.duel-seat-stats{display:flex;gap:14px}.duel-seat-stats span{color:#bcd5cd;font-size:11px;text-transform:uppercase}.duel-seat-stats strong{display:block;color:#fff4c1;font-size:16px;text-align:right}.duel-seat-stats strong.is-low{color:#ff9c8f}.duel-chat-bubble{position:absolute;z-index:30;top:2%;bottom:auto;left:calc(50% + 35px);max-width:158px;margin:0;padding:7px 11px;border:1px solid rgba(255,234,145,.58);border-radius:6px;color:#163a34;background:#fff4bf;font-weight:900;line-height:1.2;box-shadow:0 7px 16px #00000042;transform:translateY(-92%)}.duel-player-stage.is-west .duel-chat-bubble{right:calc(50% + 35px);left:auto}.duel-chat-bubble:after{position:absolute;bottom:-12px;left:18px;width:0;height:0;border:6px solid transparent;border-top-color:#fff4bf;content:""}.duel-player-stage.is-west .duel-chat-bubble:after{right:18px;left:auto}.duel-board-stage{display:grid;grid-template-columns:minmax(150px,220px) minmax(0,760px) minmax(150px,220px);align-items:center;justify-content:center;gap:clamp(6px,1.5vw,24px);min-height:430px;padding-top:30px}.duel-player-stage{--duel-avatar-x: 50%;position:relative;display:grid;place-items:center;align-self:center;width:100%;min-width:0}.duel-player-stage.is-east,.duel-player-stage.is-west{--duel-avatar-x: 50%}.duel-armchair{position:relative;width:min(100%,220px);aspect-ratio:1}.duel-armchair-image{display:block;width:100%;height:100%;object-fit:contain;filter:drop-shadow(0 16px 18px rgba(0,0,0,.42));pointer-events:none}.duel-player-stage.is-west .duel-armchair-image{transform:scaleX(-1)}.duel-stage-avatar{position:absolute;top:-16%;left:var(--duel-avatar-x);z-index:2;display:grid;place-items:center;width:clamp(112px,57%,132px);aspect-ratio:1;overflow:hidden;border:4px solid #f4d469;border-radius:50%;color:#fff5bf;background:#8c2f35;box-shadow:0 0 0 5px #04302b9e,0 12px 22px #0006;transform:translate(-50%);font-size:52px;font-weight:900;line-height:1}.duel-stage-avatar.is-human{padding:0;appearance:none;background-color:#156c64;background-repeat:no-repeat;background-size:300% 200%;cursor:pointer}.duel-stage-avatar.is-ai{background-position:center}.duel-stage-avatar.is-reacting{transform:translate(-50%)}.duel-chair-position{margin-top:-8px;padding:4px 14px;border:1px solid rgba(255,228,122,.52);border-radius:999px;color:#fff0a5;background:#023530e6;font-size:11px;font-weight:900;text-transform:uppercase}.duel-board{--duel-scale: 1;--duel-tile-base-width: clamp(46px, min(5vw, 5.8vh), 60px);--duel-tile-width: calc(var(--duel-tile-base-width) * var(--duel-scale));--duel-tile-height: calc(var(--duel-tile-width) * 783 / 567);--duel-step-x: calc(var(--duel-tile-width) * .806);--duel-step-y: calc(var(--duel-tile-height) * .895);--duel-layer-x: calc(var(--duel-tile-width) * .045);--duel-layer-y: calc(var(--duel-tile-height) * -.04);--duel-center-col: 4.5;position:relative;width:min(100%,760px);height:calc(var(--duel-tile-height) + var(--duel-step-y) * 5 + 22px);min-height:360px;outline:none}.duel-board:focus-visible{outline:2px solid rgba(255,231,133,.9);outline-offset:8px}.duel-tile{position:absolute;left:calc(50% - var(--duel-tile-width) / 2 + (var(--x) - var(--duel-center-col)) * var(--duel-step-x) + var(--z) * var(--duel-layer-x));top:calc(10px + var(--y) * var(--duel-step-y) + var(--z) * var(--duel-layer-y));width:var(--duel-tile-width);aspect-ratio:567 / 783;margin:0;padding:0;border:0;border-radius:7px;background:transparent;box-shadow:none;filter:drop-shadow(0 8px 7px rgba(0,0,0,.34));transform-origin:50% 84%;transition:transform .14s ease,filter .14s ease,opacity .16s ease}.duel-tile img{display:block;width:100%;height:100%;object-fit:contain;pointer-events:none}.duel-tile .tile-rank-badge{z-index:3;opacity:0;transition:opacity .12s ease}.duel-tile.is-open{cursor:pointer;filter:brightness(1.08) saturate(1.05) drop-shadow(0 0 7px rgba(255,236,148,.38)) drop-shadow(0 10px 8px rgba(0,0,0,.34))}.duel-tile.is-open:hover{z-index:1000!important;transform:translateY(-7px) scale(1.035);filter:brightness(1.13) saturate(1.08) drop-shadow(0 0 11px rgba(255,236,148,.8)) drop-shadow(0 14px 9px rgba(0,0,0,.36))}.duel-tile.is-blocked{cursor:not-allowed;filter:grayscale(.22) saturate(.55) brightness(.7) drop-shadow(0 7px 6px rgba(0,0,0,.3))}.duel-tile.is-open:hover .tile-rank-badge,.duel-tile.is-selected .tile-rank-badge,.duel-tile.is-hinted .tile-rank-badge,.duel-tile.is-cursor .tile-rank-badge{opacity:1}.duel-tile.is-selected,.duel-tile.is-hinted,.duel-tile.is-cursor{z-index:1100!important;transform:translateY(-8px) scale(1.05);outline:3px solid #ffe57f;outline-offset:2px;filter:brightness(1.12) drop-shadow(0 0 13px rgba(255,230,111,.92)) drop-shadow(0 15px 10px rgba(0,0,0,.36))}.duel-tile.is-hinted{outline-color:#78e5c3;animation:duelHintPulse .95s ease-in-out infinite alternate}.duel-board.is-resolving{pointer-events:none}.duel-board.is-reshuffling{animation:duelBoardPulse .52s ease}.duel-pair-impact{position:fixed;z-index:10000;width:96px;height:96px;border-radius:50%;background:radial-gradient(circle,rgba(255,252,203,.96) 0 9%,rgba(255,211,78,.74) 20%,rgba(91,231,194,.34) 44%,transparent 70%);transform:translate(-50%,-50%);pointer-events:none;animation:duelImpact .42s ease-out forwards}.duel-control-dock{position:relative;z-index:2000;display:grid;grid-template-columns:164px 110px minmax(200px,260px) 100px 54px 54px;align-items:end;gap:8px;width:min(1120px,100%);margin:0 auto}.duel-control-dock button{min-width:0;padding:0 12px}.duel-control-dock button:disabled{cursor:not-allowed;opacity:.48}.duel-scale-control{display:grid;grid-template-columns:42px minmax(42px,1fr) 38px;align-items:center;gap:5px;height:46px;padding:0 6px;border:1px solid rgba(181,230,213,.34);border-radius:6px;color:#c3d9d2;background:#003a34eb;font-size:.78rem;font-weight:800;text-transform:uppercase}.duel-scale-control input{width:100%;min-width:0;accent-color:#8de0c3}.duel-scale-control output{display:grid;place-items:center;color:#fff4be;font-size:13px;font-weight:900;text-transform:none}.duel-chat-select{display:grid;grid-template-rows:13px 33px;gap:0;min-width:0;color:#c3d9d2;font-size:.78rem;text-transform:uppercase}.duel-chat-select select{width:100%;min-width:0;border:1px solid rgba(179,229,211,.36);border-radius:5px;color:#fff;background:#075c52;font-weight:800}.duel-control-dock .icon-control{width:54px;padding:0;color:#fff;background:#087a6a}.duel-control-dock .fullscreen-glyph{display:grid;place-items:center;width:100%;min-height:28px;font-family:Segoe UI Symbol,"Segoe UI Emoji",sans-serif;font-size:28px;font-weight:700;line-height:1}#duel-settings-toggle>span{display:grid;place-items:center;font-size:26px;line-height:1}.duel-settings{position:absolute;right:0;bottom:56px;z-index:30;display:grid;grid-template-columns:100px minmax(170px,1fr);gap:10px;width:min(360px,calc(100vw - 24px));padding:12px;border:1px solid rgba(255,230,132,.42);border-radius:7px;background:#073e39;box-shadow:0 14px 30px #0006}.duel-settings label{display:grid;grid-template-columns:34px 1fr;align-items:center;gap:8px}.duel-settings input{width:100%}.duel-settings a{grid-column:1 / -1;text-align:center}.duel-settings-copy{display:grid;place-items:center start;color:#c3d9d2;font-size:12px;font-weight:800}.duel-message{width:min(1120px,100%);min-height:22px;margin:7px auto 0;color:#edf8f4;font-weight:800}.duel-avatar-picker{position:fixed;inset:0;z-index:13000;display:grid;place-items:center;padding:18px;background:#020e0dc7}.duel-avatar-picker[hidden]{display:none}.duel-avatar-picker-panel{width:min(760px,100%);max-height:calc(100dvh - 36px);overflow:auto;padding:22px;border:1px solid rgba(255,228,122,.68);border-radius:8px;color:#f8fffc;background:#064c43;box-shadow:0 24px 56px #0000007a}.duel-avatar-picker-panel>header{display:flex;align-items:start;justify-content:space-between;gap:18px}.duel-avatar-picker-panel h2{margin:3px 0 0;font-size:28px;letter-spacing:0}.duel-avatar-close{display:grid;place-items:center;width:42px;height:42px;padding:0;border:1px solid rgba(255,244,188,.38);border-radius:6px;color:#fff;background:#087a6a;font-size:30px;line-height:1;cursor:pointer}.duel-avatar-progress{margin:10px 0 16px;color:#ffe58a;font-weight:800}.duel-avatar-options{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px}.duel-avatar-option{display:grid;grid-template-rows:auto auto auto;justify-items:center;gap:5px;min-width:0;padding:9px 7px;border:1px solid rgba(177,227,210,.32);border-radius:7px;color:#fff;background:#073e39;cursor:pointer}.duel-avatar-option:hover:not(:disabled),.duel-avatar-option:focus-visible{border-color:#ffe58a;background:#0b6257;outline:none}.duel-avatar-option.is-selected{border-color:#ffe58a;box-shadow:inset 0 0 0 2px #ffe58a3d}.duel-avatar-option:disabled{cursor:not-allowed;opacity:.46}.duel-avatar-option-portrait{display:block;width:min(86px,100%);aspect-ratio:1;border:2px solid #f4d469;border-radius:50%;background-color:#156c64;background-repeat:no-repeat;background-size:300% 200%}.duel-avatar-option strong{width:100%;overflow:hidden;font-size:12px;text-align:center;text-overflow:ellipsis;white-space:nowrap}.duel-avatar-option-status{color:#bcd5cd;font-size:.78rem;font-weight:800}.duel-result{position:fixed;top:50%;left:50%;z-index:12000;width:min(560px,calc(100vw - 28px));max-height:calc(100dvh - 28px);overflow:hidden;padding:28px;border:1px solid rgba(255,228,122,.68);border-radius:8px;color:#f8fffc;background:#064c43;box-shadow:0 0 0 9999px #020e0dbd,0 24px 56px #00000075;transform:translate(-50%,-50%);text-align:center}.duel-result>*:not(canvas){position:relative;z-index:2}.duel-result canvas{position:absolute;inset:0;z-index:1;pointer-events:none}.duel-result h2{margin:4px 0 8px;font-size:34px;line-height:1.08;letter-spacing:0}.duel-result[data-outcome=win] h2{margin:8px 0 12px;color:#fff1a3;font-size:64px;text-shadow:0 3px 0 rgba(73,39,0,.42),0 0 22px rgba(255,217,90,.34)}#duel-result-summary{color:#dff7ef;font-weight:800}.duel-avatar-unlock{margin:9px 0 0;padding:8px 10px;border:1px solid rgba(255,229,138,.54);border-radius:6px;color:#fff1a3;background:#023530b8;font-weight:900}.duel-result-scores{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:20px 0}.duel-result-scores span{padding:13px;border:1px solid rgba(176,230,211,.35);border-radius:6px;background:#012a26c7}.duel-result-scores strong{display:block;margin-top:5px;color:#ffe58a}.duel-result-actions{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-items:center;gap:8px}@keyframes duelHintPulse{0%{filter:brightness(1.08) drop-shadow(0 0 7px rgba(116,236,199,.58))}to{filter:brightness(1.16) drop-shadow(0 0 16px rgba(116,236,199,.92))}}@keyframes duelBoardPulse{0%,to{filter:none}45%{filter:brightness(1.16) saturate(1.08)}}@keyframes duelImpact{0%{opacity:0;transform:translate(-50%,-50%) scale(.35)}34%{opacity:1}to{opacity:0;transform:translate(-50%,-50%) scale(1.25)}}@keyframes duelAvatarReaction{0%,to{transform:scale(1)}42%{transform:scale(1.14)}}@keyframes duelStageAvatarReaction{0%,to{transform:translate(-50%) scale(1)}42%{transform:translate(-50%) scale(1.14)}}@media(max-width:900px){.duel-lobby-header{grid-template-columns:1fr 1.5fr}.duel-lobby-status{grid-column:1 / -1;padding:10px 0 0;border-top:1px solid rgba(181,230,213,.3);border-left:0}.duel-opponent{grid-template-columns:54px minmax(0,1fr)}.duel-opponent button{grid-column:1 / -1;width:100%}.duel-cafe-toolbar{grid-template-columns:1fr;align-items:start}.duel-ai-choice{width:min(100%,420px)}.duel-cafe-tables{grid-template-columns:repeat(4,minmax(0,1fr))}.duel-match-header{grid-template-columns:1fr auto}.duel-match-facts{grid-column:1 / -1}.duel-seat{grid-template-columns:minmax(0,1fr) auto}.duel-seat-stats{grid-column:auto;justify-content:flex-end}.duel-board-stage{grid-template-columns:112px minmax(0,1fr) 112px;gap:4px}.duel-armchair{width:112px}.duel-stage-avatar{width:74px;border-width:3px;font-size:34px}.duel-control-dock{grid-template-columns:150px 1fr minmax(180px,1.3fr) 90px 50px 50px}}@media(max-width:620px){.duel-lobby-page .site-header,.duel-table-page .site-header{padding-inline:14px}.duel-lobby-header{grid-template-columns:1fr;gap:18px;padding:24px 18px}.duel-lobby-header h1{font-size:38px}.duel-lobby-status{grid-column:auto}.duel-practice{padding:24px 14px}.duel-practice>header{align-items:start}.duel-practice-options{grid-template-columns:1fr}.duel-cafe-toolbar{padding:20px 14px}.duel-cafe-heading{align-items:start}.duel-cafe-floor{width:calc(100% - 20px);margin:14px auto;padding:10px}.duel-cafe-tables{grid-template-columns:repeat(2,minmax(0,1fr));gap:14px 8px}.duel-cafe-table{grid-template-rows:48px 84px 48px;min-height:180px;padding-inline:3px}.duel-cafe-tabletop{height:84px;padding:7px}.duel-cafe-seat{width:88%;min-height:40px;padding:3px 5px}.duel-cafe-avatar{flex-basis:32px;width:32px;height:32px}.duel-cafe-greeting{top:40px;right:0;max-width:126px}.duel-rules-strip{grid-template-columns:repeat(2,minmax(0,1fr));margin:0 14px 20px}.duel-guide{margin:22px 14px 0;padding:28px 4px 34px}.duel-guide-heading h2{font-size:25px}.duel-guide-grid{grid-template-columns:1fr;gap:22px}.duel-table-shell{grid-template-rows:auto auto minmax(360px,1fr) auto auto;min-height:calc(100dvh - 64px);padding:0 8px 8px}.duel-match-header{grid-template-columns:minmax(0,1fr) auto;gap:8px;margin:0 -8px;padding:9px 12px}.duel-match-header h1{font-size:20px}.duel-match-facts{gap:4px}.duel-match-facts span{font-size:9px}.duel-match-facts strong{font-size:12px}.duel-seat-grid{gap:6px;margin-top:7px}.duel-seat{grid-template-columns:minmax(0,1fr);gap:7px;min-height:64px;padding:6px 7px}.duel-seat.is-human{grid-template-columns:36px minmax(0,1fr)}.duel-seat-avatar{width:34px}.duel-seat-mark{width:32px;height:32px;font-size:16px}.duel-seat-copy strong{font-size:12px}.duel-seat-stats{grid-column:1;gap:7px;justify-content:flex-start}.duel-seat.is-human .duel-seat-stats{grid-column:1 / -1}.duel-seat-stats strong{font-size:13px}.duel-chat-bubble{inset:-3px auto auto 50%;max-width:130px;font-size:12px;transform:translate(-50%,-88%)}.duel-player-stage.is-west .duel-chat-bubble{right:auto;left:50%}.duel-chat-bubble:after,.duel-player-stage.is-west .duel-chat-bubble:after{right:auto;left:calc(50% - 6px)}.duel-board-stage{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:108px minmax(310px,auto);gap:2px 8px;min-height:420px;padding-top:8px}.duel-player-stage{align-self:start;width:110px;justify-self:center}.duel-player-stage.is-east{grid-column:1;grid-row:1}.duel-player-stage.is-west{grid-column:2;grid-row:1}.duel-armchair{width:96px}.duel-stage-avatar{top:-8%;width:58px;border-width:2px;box-shadow:0 0 0 3px #04302b9e,0 7px 12px #0000005c;font-size:26px}.duel-chair-position{position:absolute;top:84px;margin:0;padding:2px 9px;font-size:8px}.duel-board{--duel-tile-base-width: clamp(32px, min(9.2vw, 5.7vh), 40px);grid-column:1 / -1;grid-row:2;width:100%;min-height:310px}.duel-control-dock{grid-template-columns:1.25fr .8fr 1.45fr .65fr;gap:6px}.duel-control-dock>*{min-width:0}.duel-control-dock .duel-chat-select{grid-column:3 / 5}.duel-control-dock #duel-mute,.duel-control-dock #duel-fullscreen,.duel-control-dock #duel-settings-toggle{grid-row:2}.duel-control-dock #duel-mute{grid-column:1 / 3}.duel-control-dock #duel-fullscreen{grid-column:3;width:100%}.duel-control-dock #duel-settings-toggle{grid-column:4;width:100%}.duel-scale-control{grid-template-columns:minmax(0,1fr) 36px;grid-template-rows:14px 24px;gap:0 4px;padding:3px 5px}.duel-scale-control span{grid-column:1;grid-row:1;align-self:end;font-size:8px}.duel-scale-control input{grid-column:1;grid-row:2}.duel-scale-control output{grid-column:2;grid-row:1 / 3;font-size:12px}.duel-message{margin-top:5px;font-size:12px}.duel-avatar-picker{padding:10px}.duel-avatar-picker-panel{max-height:calc(100dvh - 20px);padding:16px}.duel-avatar-picker-panel h2{font-size:23px}.duel-avatar-options{grid-template-columns:repeat(2,minmax(0,1fr))}.duel-avatar-option{grid-template-columns:54px minmax(0,1fr);grid-template-rows:auto auto;justify-items:start;text-align:left}.duel-avatar-option-portrait{grid-row:1 / 3;width:52px}.duel-avatar-option strong{align-self:end;text-align:left}.duel-result{padding:22px 16px}.duel-result[data-outcome=win] h2{font-size:48px}.duel-result-actions{grid-template-columns:1fr}}@media(max-height:650px)and (min-width:621px){.duel-table-shell{grid-template-rows:auto auto minmax(300px,1fr) auto auto}.duel-seat-grid{margin-top:6px}.duel-seat{min-height:58px}.duel-board-stage{min-height:300px;padding-top:8px}.duel-board{--duel-tile-base-width: clamp(35px, min(4.4vw, 5.5vh), 44px);min-height:286px}}@media(prefers-reduced-motion:reduce){.duel-tile,.duel-seat,.duel-opponent button{transition:none}.duel-tile.is-hinted,.duel-board.is-reshuffling,.duel-pair-impact,.duel-seat-mark.is-reacting,.duel-stage-avatar.is-reacting{animation-duration:1ms;animation-iteration-count:1}}
