body{min-height:100svh;overflow-x:hidden;background:#080608;color:#fff4ee;user-select:none}
    body::before{content:"";position:fixed;inset:0;pointer-events:none;background:radial-gradient(circle at 50% 38%,#4a17203d,transparent 27rem),radial-gradient(circle at 50% 100%,#30112855,transparent 34rem);animation:worldPulse 6s ease-in-out infinite}
    @keyframes worldPulse{50%{opacity:.65;filter:hue-rotate(10deg)}}
    .game-shell{width:min(760px,calc(100% - 28px));min-height:100svh;margin:auto;display:flex;flex-direction:column;position:relative;z-index:2}
    .game-header{padding:27px 0 8px;display:flex;justify-content:space-between;align-items:center;gap:14px}.game-title{flex:none;min-width:0}.game-title b{display:block;font-size:18px;letter-spacing:.08em;white-space:nowrap}.game-title small{display:block;margin-top:5px;color:#856f71;font:9px Georgia,serif;letter-spacing:.25em}.header-status{display:flex;align-items:center;justify-content:flex-end;gap:9px;flex:1;min-width:0;padding-bottom:22px;position:relative;z-index:3}.shuffle-toggle,.filth-toggle,.props-toggle{flex:none;width:38px;height:38px;aspect-ratio:1;border:1px solid #4c3439;border-radius:50%;display:grid;place-items:center;position:relative;background:#140e10aa;cursor:pointer;outline:0;transition:border-color .28s,box-shadow .28s,background .28s,transform .18s;touch-action:manipulation}.hdr-icon{width:20px;height:20px;display:grid;place-items:center;line-height:0;overflow:hidden;border-radius:50%}.hdr-icon img,.hdr-icon svg{width:100%;height:100%;display:block;object-fit:cover}.filth-toggle .hdr-icon{width:24px;height:24px}.shuffle-toggle small,.filth-toggle small,.props-toggle small{position:absolute;top:44px;left:50%;white-space:nowrap;font-size:8px;letter-spacing:.08em;opacity:0;transform:translate(-50%,-3px);transition:.25s;pointer-events:none}.shuffle-toggle:hover small,.shuffle-toggle:focus-visible small,.filth-toggle:hover small,.filth-toggle:focus-visible small,.filth-toggle.active small,.props-toggle:hover small,.props-toggle:focus-visible small,.props-toggle.active small{opacity:1;transform:translate(-50%,0)}.props-toggle{border-color:#6a4f2f}.props-toggle small{color:#b8925a}.props-toggle:hover,.props-toggle:focus-visible,.props-toggle.active{border-color:#d9ad78;background:#241910cc;box-shadow:0 0 18px #b8925a44}.filth-toggle{border-color:#6a3a3a}.filth-toggle small{color:#c47a5a}.filth-toggle:hover,.filth-toggle:focus-visible,.filth-toggle.active{border-color:#e07a66;background:#241014cc;box-shadow:0 0 18px #c45a4055}.shuffle-toggle{border-color:#6a4a2f}.shuffle-toggle small{color:#d7b46a}.shuffle-toggle:hover,.shuffle-toggle:focus-visible{border-color:#ffb14a;background:#241810cc;box-shadow:0 0 18px #b98c3c44}.shuffle-toggle.spinning .hdr-icon{animation:shuffleIcon .72s cubic-bezier(.2,.75,.2,1)}@keyframes shuffleIcon{to{transform:rotate(720deg)}}
    .phase-tabs{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin:4px 0 4px;padding:4px;border:1px solid #3a282c;border-radius:16px;background:#0d090bcc;backdrop-filter:blur(8px);position:relative;z-index:1}.phase-tab{border:0;border-radius:12px;padding:9px 6px 8px;background:transparent;color:#8a7276;cursor:pointer;touch-action:manipulation;transition:background .22s,color .22s,box-shadow .22s,transform .18s;display:flex;flex-direction:column;align-items:center;gap:5px}.phase-icon{width:30px;height:30px;border-radius:9px;object-fit:contain;display:block;box-shadow:0 4px 10px #0005;opacity:.95;transition:opacity .2s,transform .2s;background:#120d0f}.phase-tab strong{display:block;font-size:12px;font-weight:800;letter-spacing:.12em}.phase-tab:hover{color:#d7b8ae;background:#1a1214}.phase-tab:hover .phase-icon{opacity:1;transform:translateY(-1px)}.phase-tab.active{background:linear-gradient(180deg,#fff4ee,#f0d8cc);color:#2b1b1d;box-shadow:0 8px 18px #0006}.phase-tab.active .phase-icon{opacity:1;box-shadow:0 6px 14px #0005}.phase-tab[data-phase="lose"].active{background:linear-gradient(180deg,#ffd3b8,#e07a66);color:#2b1210}.phase-tab[data-phase="random"].active{background:linear-gradient(180deg,#ffe8c8,#d9ad78);color:#2b1b1d}
    .filth-sheet{position:fixed;inset:0;z-index:40;display:flex;align-items:flex-end;justify-content:center}.filth-sheet[hidden]{display:none!important}.filth-backdrop{position:absolute;inset:0;background:#050305cc;backdrop-filter:blur(10px)}.filth-panel{position:relative;width:min(520px,100%);max-height:min(86svh,760px);display:flex;flex-direction:column;padding:10px 18px max(18px,env(safe-area-inset-bottom));border:1px solid #523438;border-bottom:0;border-radius:26px 26px 0 0;background:linear-gradient(165deg,#22161a 0%,#140e11 42%,#0f0a0c 100%);box-shadow:0 -24px 70px #000c,inset 0 1px #ffffff0d;animation:filthUp .28s cubic-bezier(.2,.8,.2,1);overflow:hidden}@keyframes filthUp{from{transform:translateY(32px);opacity:0}}.filth-grip{flex:none;width:42px;height:4px;margin:2px auto 12px;border-radius:999px;background:#5a3d42}.filth-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:14px;flex:none}.filth-head>div{min-width:0;flex:1}.filth-head h2{margin:0;font-size:20px;letter-spacing:.08em;font-weight:800}.filth-head p{margin:7px 0 0;color:#8f7573;font-size:11px;line-height:1.55}.filth-close{flex:none;width:36px;height:36px;aspect-ratio:1;border:1px solid #4c3439;border-radius:50%;background:#140e10;color:#c9aaa4;font-size:22px;line-height:1;display:grid;place-items:center;padding:0;cursor:pointer;transition:border-color .2s,color .2s}.filth-close:hover{border-color:#c47a5a;color:#f0c2a8}.filth-tabs{flex:none;display:grid;grid-template-columns:1fr 1fr;gap:4px;margin-bottom:14px;padding:4px;border-radius:999px;background:#0d090b;border:1px solid #3a282c}.filth-tab{border:0;border-radius:999px;padding:10px 12px;background:transparent;color:#8a7276;font-size:13px;font-weight:800;letter-spacing:.2em;cursor:pointer;touch-action:manipulation;transition:background .2s,color .2s,box-shadow .2s}.filth-tab.active{background:linear-gradient(180deg,#fff4ee,#f0d8cc);color:#2b1b1d;box-shadow:0 6px 16px #0006}.filth-meta{flex:none;display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.filth-steps{display:flex;align-items:center;gap:6px}.filth-step{width:8px;height:8px;border-radius:50%;background:#3a282c;border:1px solid #5a3d42;transition:background .2s,border-color .2s,transform .2s,box-shadow .2s}.filth-step.done{background:#c47a5a;border-color:#c47a5a}.filth-step.current{transform:scale(1.25);background:#f0c2a8;border-color:#f0c2a8;box-shadow:0 0 12px #c45a4055}.filth-meta-right{display:flex;align-items:center;gap:10px}.filth-progress{color:#c9a090;font:700 12px/1 Georgia,"Microsoft YaHei",sans-serif;letter-spacing:.14em;white-space:nowrap}.filth-progress.done{color:#e07a66}.filth-roll{border:0;border-radius:999px;padding:10px 16px;background:linear-gradient(180deg,#e66a58,#c94a40);color:#fff8f3;font-size:12px;font-weight:800;letter-spacing:.1em;cursor:pointer;touch-action:manipulation;box-shadow:0 8px 18px #a12a2240}.filth-roll:active{transform:scale(.97)}.filth-grid{flex:1;min-height:0;display:flex;flex-direction:column;gap:0;overflow:auto;padding:2px 2px 4px;scrollbar-width:thin;scrollbar-color:#4e2b31 transparent}.filth-cell{position:relative;flex:1;min-height:72px;border:1px solid #3f2d30;border-radius:16px;padding:14px 14px 14px 16px;margin-bottom:10px;background:linear-gradient(135deg,#171012 0%,#120d0f 100%);color:#f0d6c8;display:flex;align-items:flex-start;gap:12px;text-align:left;cursor:pointer;touch-action:manipulation;transition:border-color .2s,background .2s,transform .18s,opacity .2s,box-shadow .2s}.filth-cell:last-child{margin-bottom:0}.filth-cell:not(:last-child)::after{content:"";position:absolute;left:24px;bottom:-11px;width:2px;height:10px;background:linear-gradient(#5a3d42,#3a282c);opacity:.7}.filth-cell:active{transform:scale(.985)}.filth-top{flex:none;display:flex;flex-direction:column;align-items:center;gap:8px}.filth-icon{width:22px;height:22px;color:#c47a5a;display:grid;place-items:center;opacity:.85}.filth-icon svg{width:100%;height:100%;display:block}.filth-text{flex:1;min-width:0;padding-top:1px;font-size:15px;font-weight:800;line-height:1.5;letter-spacing:.03em;word-break:break-word}.filth-cell.current{border-color:#d08a6a;background:linear-gradient(135deg,#24161a 0%,#1a1013 100%);box-shadow:0 0 0 1px #c47a5a55,0 12px 28px #0006}.filth-cell.current .filth-icon{color:#f0c2a8;opacity:1}.filth-cell.current .filth-text{color:#ffe8d8}.filth-cell.done{opacity:.42;border-color:#38292d}.filth-cell.done .filth-icon{color:#a86a52}.filth-cell.done .filth-text{text-decoration:line-through;text-decoration-color:#c47a5a77;color:#b89a8e}.filth-grid[data-role="gong"] .filth-cell.current{border-color:#d08a6a}.filth-grid[data-role="shou"] .filth-cell.current{border-color:#c48aa0;box-shadow:0 0 0 1px #c48aa055,0 12px 28px #0006}.filth-grid[data-role="shou"] .filth-icon{color:#c48aa0}.filth-grid.deal .filth-cell{animation:filthDeal .42s cubic-bezier(.2,.8,.2,1) both}.filth-grid.deal .filth-cell:nth-child(2){animation-delay:.05s}.filth-grid.deal .filth-cell:nth-child(3){animation-delay:.1s}.filth-grid.deal .filth-cell:nth-child(4){animation-delay:.15s}@keyframes filthDeal{from{opacity:0;transform:translateY(14px)}}
    .props-sheet{position:fixed;inset:0;z-index:40;display:flex;align-items:flex-end;justify-content:center}.props-sheet[hidden]{display:none!important}.props-backdrop{position:absolute;inset:0;background:#050305cc;backdrop-filter:blur(10px)}.props-panel{position:relative;width:min(560px,100%);max-height:min(88svh,820px);display:flex;flex-direction:column;padding:10px 16px max(18px,env(safe-area-inset-bottom));border:1px solid #523438;border-bottom:0;border-radius:26px 26px 0 0;background:linear-gradient(165deg,#22161a 0%,#140e11 42%,#0f0a0c 100%);box-shadow:0 -24px 70px #000c,inset 0 1px #ffffff0d;animation:filthUp .28s cubic-bezier(.2,.8,.2,1);overflow:hidden}.props-meta{flex:none;display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.props-progress{color:#c9a090;font:700 12px/1 Georgia,"Microsoft YaHei",sans-serif;letter-spacing:.1em}.props-progress.done{color:#e7c49a}.props-clear{border:1px solid #4c3439;border-radius:999px;padding:8px 14px;background:#140e10;color:#c9aaa4;font-size:11px;letter-spacing:.08em;cursor:pointer;touch-action:manipulation}.props-clear:hover{border-color:#b8925a;color:#e7c49a}.props-grid{flex:1;min-height:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;overflow:auto;padding:2px 2px 6px;scrollbar-width:thin;scrollbar-color:#4e2b31 transparent}.prop-card{border:1px solid #3f2d30;border-radius:16px;padding:0;overflow:hidden;background:linear-gradient(160deg,#1a1214,#120d0f);color:#f0d6c8;text-align:left;cursor:pointer;touch-action:manipulation;transition:border-color .2s,box-shadow .2s,transform .18s;display:flex;flex-direction:column;min-height:0}.prop-card:active{transform:scale(.98)}.prop-card.ready{border-color:#b8925a;box-shadow:0 0 0 1px #b8925a44,0 10px 24px #0006}.prop-card img{display:block;width:100%;aspect-ratio:1;object-fit:cover;background:#0d090b}.prop-body{padding:10px 11px 12px;display:flex;flex-direction:column;gap:4px;min-height:78px}.prop-top{display:flex;align-items:center;justify-content:space-between;gap:8px}.prop-name{margin:0;font-size:14px;font-weight:800;letter-spacing:.06em}.prop-check{flex:none;min-width:34px;height:20px;border-radius:999px;border:1px solid #5a3d42;display:grid;place-items:center;color:#8a7276;font-size:9px;letter-spacing:.04em;background:#0e0a0c}.prop-card.ready .prop-check{border-color:#e7c49a;background:#e7c49a;color:#2b1b1d;font-weight:800}.prop-phase{margin:0;color:#8a6f5e;font-size:10px;letter-spacing:.08em}.prop-desc{margin:0;color:#b89a8e;font-size:11px;line-height:1.45}
    .arena{min-height:520px;display:flex;flex-direction:column;align-items:center;justify-content:center;position:relative;padding:22px 0 24px}.halo{position:absolute;width:390px;height:390px;border-radius:50%;border:1px solid #d5a56b17;box-shadow:0 0 0 55px #d5a56b08,0 0 0 110px #d5a56b04;animation:halo 4s ease-in-out infinite;pointer-events:none}@keyframes halo{50%{transform:scale(1.06);opacity:.55}}
    .game-shell .scene{width:250px;height:375px;cursor:pointer;outline:0;animation:cardFloat 3.8s ease-in-out infinite;filter:drop-shadow(0 25px 35px #000b);touch-action:manipulation}.game-shell .scene:focus-visible{filter:drop-shadow(0 0 16px #d9ad78aa)}@keyframes cardFloat{50%{transform:translateY(-10px) rotate(.8deg)}}
    .game-shell .stack{display:block;transition:transform .5s ease,opacity .5s}.game-shell .s1{transform:rotate(-7deg) translate(-13px,8px)}.game-shell .s2{transform:rotate(5deg) translate(11px,5px)}
    .game-shell .card{transition:transform .52s cubic-bezier(.18,.75,.18,1),opacity .2s ease}.game-shell .scene.reveal .card{transform:translate(30px,-24px) rotateY(180deg) translateZ(15px)}.game-shell .scene.resetting .card{transition:none!important;animation:none!important;opacity:1}.game-shell .scene.discarding .card{animation:discardCard .22s ease-in forwards}@keyframes discardCard{to{transform:translate(155px,-58px) rotateY(180deg) rotate(8deg) scale(.92);opacity:0}}
    .game-shell .scene.drawing{animation:none}.game-shell .scene.drawing .card{animation:gameDraw .78s cubic-bezier(.3,.02,.2,1)}.game-shell .scene.drawing .s1{transform:rotate(-17deg) translate(-48px,16px)}.game-shell .scene.drawing .s2{transform:rotate(15deg) translate(43px,12px)}
    @keyframes gameDraw{0%{transform:translate(0) rotate(0) scale(1)}35%{transform:translate(88px,-35px) rotate(10deg) scale(1.03)}65%{transform:translate(-18px,-55px) rotate(-3deg) scale(1.08)}100%{transform:translate(0) rotate(0) scale(1)}}
    .game-shell .face{box-shadow:0 22px 65px #000c}.game-shell .back{border-color:#e0ae7088}.game-shell .back::before,.game-shell .back::after{display:none}.game-shell .front{background:#f0e2d8}.game-shell .scene.reveal .front>*{animation:frontIn .6s .25s both}@keyframes frontIn{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
    .notice{margin:30px 0 6px;min-height:20px;color:#b9a5a0;font-size:12px;letter-spacing:.04em;text-align:center;transition:.25s}
    .card-actions{display:flex;justify-content:center;gap:10px;flex-wrap:wrap;margin:10px 0 0;min-height:40px}.card-actions[hidden]{display:none!important}.card-action{border:1px solid #4c3439;border-radius:999px;padding:10px 16px;background:#140e10;color:#d7b8ae;font-size:12px;font-weight:700;letter-spacing:.08em;cursor:pointer;touch-action:manipulation;transition:border-color .2s,background .2s,color .2s,transform .15s}.card-action:active{transform:scale(.97)}.card-action.primary{border-color:#c47a5a;background:linear-gradient(180deg,#e66a58,#c94a40);color:#fff8f3}.card-action.ghost:hover{border-color:#b8925a;color:#e7c49a}.game-shell .scene.reviewing{outline:1px solid #d9ad7855;filter:drop-shadow(0 0 18px #d9ad7840)}.game-shell .scene.is-busy{cursor:wait}
    .fx{position:absolute;inset:0;pointer-events:none;z-index:20}.spark{position:absolute;left:50%;top:46%;width:5px;height:5px;border-radius:50%;background:var(--spark,#e7b777);box-shadow:0 0 12px var(--spark,#e7b777);animation:burst .85s ease-out forwards}@keyframes burst{to{transform:translate(var(--x),var(--y)) scale(0);opacity:0}}
    .particles{position:fixed;inset:0;pointer-events:none;overflow:hidden}.particle{position:absolute;width:3px;height:3px;border-radius:50%;background:#d8a56c;opacity:.18;animation:drift var(--d) linear infinite;animation-delay:var(--delay)}@keyframes drift{from{transform:translateY(105vh) scale(.5)}to{transform:translateY(-10vh) translateX(var(--sway)) scale(1.2)}}
    .game-shell .history{padding:22px 0 30px;border-top:1px solid #312327}.game-shell .history-header{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:0 2px 13px;border:0}.game-shell .history-header h2{font-size:11px;color:#887477;font-weight:500;letter-spacing:.15em}.history-hint{color:#b8925a;font-size:10px;letter-spacing:.06em}.game-shell .list{display:flex;gap:9px;overflow-x:auto;max-height:none;padding:2px 2px 10px;scrollbar-width:none}.game-shell .list::-webkit-scrollbar{display:none}.game-shell .empty{height:76px;width:100%;display:grid;place-content:center}.game-shell .empty span,.game-shell .empty small{display:none}.game-shell .empty p{margin:0;color:#4f4144;font-size:10px;letter-spacing:.1em}
    .game-shell .item{flex:0 0 58px;width:58px;height:80px;padding:0;border:1px solid #38292d;border-radius:8px;display:block;overflow:hidden;position:relative;background:#120d0f;animation:slotIn .55s cubic-bezier(.2,.8,.2,1) both}.game-shell .item:first-child{border-color:#b07a5c;box-shadow:0 0 20px #7e273533}.game-shell .item.done{border-color:#6a8f5a}.game-shell .item.skipped{opacity:.45;border-style:dashed}.game-shell .item.active{border-color:#d9ad78;box-shadow:0 0 16px #d9ad7844}@keyframes slotIn{from{opacity:0;transform:translateX(30px) scale(.7) rotate(8deg)}to{opacity:1;transform:none}}.game-shell .mini{width:100%;height:100%;border:0;border-radius:0;font-size:22px;background-size:cover;background-position:center;color:transparent}.game-shell .item-copy,.game-shell .num{display:none}.game-footer{padding:4px 0 25px;text-align:center;color:#4d3f42;font-size:9px;letter-spacing:.06em}
    @media(max-width:680px){
      .game-header{display:grid;grid-template-columns:1fr;gap:12px;padding:18px 0 14px;align-items:start}
      .header-status{width:100%;justify-content:flex-start}
    }
    @media(max-width:540px){
      .game-shell{width:100%;padding-left:max(16px,env(safe-area-inset-left));padding-right:max(16px,env(safe-area-inset-right));box-sizing:border-box;overflow:hidden}
      .game-header{gap:11px;padding:16px 0 8px}
      .game-title b{font-size:17px;letter-spacing:.04em}
      .game-title small{margin-top:4px;font-size:8px;letter-spacing:.2em}
      .header-status{gap:8px;padding-bottom:0}
      .shuffle-toggle,.filth-toggle,.props-toggle{width:36px;height:36px}
      .shuffle-toggle small,.filth-toggle small,.props-toggle small{display:none}
      .props-grid{gap:8px}
      .prop-body{min-height:72px;padding:9px 10px 10px}
      .prop-name{font-size:13px}
      .phase-tabs{margin:2px 0;border-radius:14px;gap:3px;padding:3px}
      .phase-tab{padding:8px 3px 7px;border-radius:11px;gap:4px}
      .phase-icon{width:24px;height:24px;border-radius:7px}
      .phase-tab strong{font-size:11px;letter-spacing:.08em}
      .filth-panel{padding:8px 14px max(14px,env(safe-area-inset-bottom));max-height:90svh}
      .filth-head h2{font-size:18px}
      .filth-cell{min-height:68px;padding:12px 12px 12px 13px;border-radius:14px;margin-bottom:9px}
      .filth-cell:not(:last-child)::after{left:24px;bottom:-10px;height:9px}
      .filth-icon{width:20px;height:20px}
      .filth-text{font-size:14px;line-height:1.45}
      .arena{min-height:520px;padding:12px 0 18px}
      .halo{width:300px;height:300px;box-shadow:0 0 0 46px #d5a56b08,0 0 0 92px #d5a56b04}
      .game-shell .scene{width:220px;height:330px}
      .game-shell .front{padding:19px 18px}
      .front-main{gap:8px;padding:4px 0}
      .front-title{font-size:19px}
      .front-copy{font-size:12.5px;line-height:1.55}
      .game-shell .front-icon{width:26px;height:26px}
      .notice{max-width:300px;min-height:36px;margin-top:18px;font-size:11px;line-height:1.55;text-align:center}
      .game-shell .history{padding:16px 0 22px}
      .game-shell .history-header{padding-bottom:11px}
      .game-shell .list{gap:7px;padding:2px 0 8px}
      .game-shell .item{flex:0 0 calc((100% - 35px)/6);width:auto;height:auto;aspect-ratio:58/80;border-radius:6px}
      .game-footer{padding:3px 0 max(18px,env(safe-area-inset-bottom));font-size:8px;line-height:1.6}
    }
    @media(max-width:360px){
      .game-shell{padding-left:13px;padding-right:13px}
      .game-title b{font-size:16px}
      .arena{min-height:490px}
      .game-shell .scene{width:204px;height:306px}
      .game-shell .item{flex-basis:calc((100% - 28px)/5)}
    }
    .game-shell .front-icon{width:30px;height:30px}
    .filth-cell.locked{opacity:.55}
    .filth-cell.locked .filth-text{color:#8a7276}
    @media(max-width:540px){
      .card-actions{gap:8px;margin-top:8px}
      .card-action{padding:9px 14px;font-size:11px}
    }
    @media(prefers-reduced-motion:reduce){.game-shell .scene,.halo,body::before{animation:none}.particle{display:none}}
