:root{--felt:#145a43;--felt-dark:#0b3b2c;--ink:#f4efe2;--muted:#b9c8bf;--gold:#e3c06b;--panel:#091c16db;--panel-line:#e3c06b59;--accent:#f0c75e;--danger:#ff7a6b;--good:#7fe0a7;--card-w:96px;--speed:1;color:var(--ink);font-family:Inter,Segoe UI,system-ui,-apple-system,sans-serif}*{box-sizing:border-box}html,body{background:var(--felt-dark);height:100%;margin:0;overflow:hidden}button{font:inherit;color:inherit;cursor:pointer}.app{flex-direction:column;display:flex;position:fixed;inset:0}.table{background:radial-gradient(ellipse at 50% 42%, #ffffff1a, transparent 62%), radial-gradient(ellipse at 50% 50%, var(--felt) 0%, var(--felt-dark) 100%);flex:1;position:relative;overflow:hidden}.table:before{content:"";opacity:.18;pointer-events:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .55 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");position:absolute;inset:0}.topbar{z-index:50;border-bottom:1px solid var(--panel-line);background:linear-gradient(#071f18,#0a2a20);align-items:center;gap:12px;padding:8px 16px;display:flex}.brand{letter-spacing:.04em;color:var(--gold);align-items:center;gap:8px;font-weight:700;display:flex}.brand small{color:var(--muted);letter-spacing:0;font-weight:500}.spacer{flex:1}.chip-btn{border:1px solid var(--panel-line);background:#ffffff0f;border-radius:999px;padding:6px 14px;font-size:14px;transition:background .15s}.chip-btn:hover{background:#ffffff24}.chip-btn:disabled{opacity:.45;cursor:default}.seg{border:1px solid var(--panel-line);border-radius:999px;display:inline-flex;overflow:hidden}.seg button{color:var(--muted);background:0 0;border:0;padding:6px 12px;font-size:13px}.seg button.on{background:var(--accent);color:#2a1d00;font-weight:600}.card{width:var(--card-w);aspect-ratio:250/350;will-change:transform;transition:transform calc(.38s * var(--speed)) cubic-bezier(.2,.8,.2,1), filter .15s, opacity .3s;cursor:default;border-radius:7%;position:absolute;top:0;left:0}.card .face{border-radius:7%;transition:transform .15s;position:absolute;inset:0;overflow:hidden;box-shadow:0 2px 6px #00000059,0 1px 1px #00000040}.card .face svg{width:100%;height:100%;display:block}.card.down .front,.card:not(.down) .back{visibility:hidden}.card.playable{cursor:pointer}.card.playable:hover .front{transform:translateY(-14px)}.card.playable:hover .face{box-shadow:0 0 0 3px var(--accent), 0 8px 18px #00000073}.card.dim .face{filter:brightness(.62)saturate(.7)}.card.selected .face{box-shadow:0 0 0 3px #7fd4ff,0 8px 18px #00000073}.card.hinted .face{box-shadow:0 0 0 3px #b48cff,0 0 18px #b48cff}.card.hidden{opacity:0;pointer-events:none}.court-letter{font:700 112px Georgia,Times New Roman,serif}.corner-rank{font:700 38px Georgia,Times New Roman,serif}.deck-german{--s0:#e9b31c;--s0b:#c0392b;--s1:#cc1a2c;--s2:#2c8a36;--s3:#c08f43;--s3b:#6b4a1d}.plate{background:var(--panel);border:1px solid var(--panel-line);z-index:30;white-space:nowrap;border-radius:999px;align-items:center;gap:10px;padding:8px 14px 8px 8px;transition:box-shadow .2s;display:flex;position:absolute;transform:translate(-50%,-50%)}.plate.turn{box-shadow:0 0 0 2px var(--accent), 0 0 22px #f0c75e73}.avatar{border:1px solid var(--panel-line);background:linear-gradient(135deg,#2f7d63,#174a3a);border-radius:50%;place-items:center;width:38px;height:38px;font-weight:700;display:grid}.avatar.human{background:linear-gradient(135deg,#b78b2c,#7a5414)}.plate .name{font-weight:600}.plate .role{color:var(--muted);font-size:12px}.badge{background:var(--accent);color:#2a1d00;border-radius:999px;margin-left:4px;padding:2px 8px;font-size:11px;font-weight:700}.tricks{color:var(--muted);margin-left:6px;font-size:12px}.bubble{z-index:35;color:#1e2b25;white-space:nowrap;background:#fffdf5;border-radius:14px;padding:8px 14px;font-weight:700;position:absolute;transform:translate(-50%,-100%);box-shadow:0 6px 18px #00000059}.bubble.pop{animation:pop calc(.22s * var(--speed)) ease-out}.bubble:after{content:"";border:8px solid #0000;border-top-color:#fffdf5;border-bottom:0;position:absolute;bottom:-7px;left:50%;transform:translate(-50%)}.bubble.pass{color:#8a3a2e}.thinking span{background:#1e2b25;border-radius:50%;width:7px;height:7px;margin:0 2px;animation:1s infinite blink;display:inline-block}.thinking span:nth-child(2){animation-delay:.15s}.thinking span:nth-child(3){animation-delay:.3s}@keyframes blink{0%,80%,to{opacity:.25}40%{opacity:1}}@keyframes pop{0%{opacity:0;transform:translate(-50%,-90%)scale(.85)}}.status{z-index:40;background:var(--panel);border:1px solid var(--panel-line);text-align:center;border-radius:14px;min-width:260px;max-width:92%;padding:8px 18px;position:absolute;top:14px;left:50%;transform:translate(-50%)}.status .contract{justify-content:center;align-items:center;gap:6px;font-size:17px;font-weight:700;display:flex}.status .detail{color:var(--muted);margin-top:2px;font-size:13px}.actions{z-index:45;background:var(--panel);border:1px solid var(--panel-line);border-radius:16px;flex-direction:column;align-items:center;gap:10px;max-width:94%;padding:12px 16px;display:flex;position:absolute;left:50%;transform:translate(-50%);box-shadow:0 10px 30px #0006}.actions .prompt{color:var(--muted);font-size:14px}.actions .row{flex-wrap:wrap;justify-content:center;gap:8px;display:flex}.btn{border:1px solid var(--panel-line);background:#ffffff14;border-radius:12px;align-items:center;gap:8px;padding:10px 16px;font-size:15px;font-weight:600;transition:transform .1s,background .15s;display:inline-flex}.btn:hover{background:#ffffff29}.btn:active{transform:translateY(1px)}.btn.primary{background:var(--accent);color:#2a1d00;border-color:#0000}.btn.primary:hover{background:#f6d47e}.btn.danger{color:#ffd9d3;border-color:#ff7a6b80}.btn:disabled{opacity:.4;cursor:default}.btn small{opacity:.8;font-weight:500}.btn.hinted{box-shadow:0 0 0 3px #b48cff,0 0 18px #b48cff}.your-turn{z-index:44;color:var(--accent);text-shadow:0 2px 6px #0009;pointer-events:none;font-weight:700;position:absolute;left:50%;transform:translate(-50%)}.overlay{z-index:100;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#020c0999;place-items:center;animation:.2s ease-out fade;display:grid;position:fixed;inset:0}@keyframes fade{0%{opacity:0}}.dialog{border:1px solid var(--panel-line);background:#0d3328;border-radius:18px;width:min(760px,94vw);max-height:90vh;padding:22px 26px;overflow:auto;box-shadow:0 24px 60px #0000008c}.dialog h2{margin:0 0 4px;font-size:24px}.dialog h2.win{color:var(--good)}.dialog h2.loss{color:var(--danger)}.dialog .sub{color:var(--muted);margin-bottom:14px}.dialog table{border-collapse:collapse;width:100%;font-size:14px}.dialog th,.dialog td{text-align:left;border-bottom:1px solid #ffffff14;padding:6px 8px}.dialog th{color:var(--muted);font-weight:600}.dialog td.num,.dialog th.num{text-align:right;font-variant-numeric:tabular-nums}.dialog .footer{justify-content:flex-end;gap:10px;margin-top:18px;display:flex}.reveal-row{align-items:center;gap:10px;margin:6px 0;display:flex}.reveal-row .who{width:110px;color:var(--muted);font-size:14px}.mini-hand{display:flex}.mini-hand .mini{border-radius:4px;width:44px;margin-right:-14px;overflow:hidden;box-shadow:0 1px 3px #0006}.mini-hand .mini svg{width:100%;display:block}.facts{grid-template-columns:auto 1fr;gap:4px 16px;margin:10px 0 14px;font-size:15px;display:grid}.facts .k{color:var(--muted)}.pos{color:var(--good)}.neg{color:var(--danger)}.loading{z-index:200;background:radial-gradient(at 50% 40%,#155a43,#071f18);place-items:center;display:grid;position:fixed;inset:0}.loading .box{text-align:center;width:min(520px,90vw)}.loading h1{color:var(--gold);letter-spacing:.03em;margin:0 0 6px;font-size:40px}.loading p{color:var(--muted);line-height:1.5}.bar{background:#ffffff1a;border-radius:999px;height:10px;margin:18px 0 8px;overflow:hidden}.bar>div{background:linear-gradient(90deg,#d8b04f,#f6d47e);width:0;height:100%;transition:width .2s}.loading .error{color:#ffd9d3;text-align:left;background:#ff5a461f;border:1px solid #ff7a6b66;border-radius:12px;padding:12px 14px;font-size:14px;line-height:1.5}.loading code{background:#0000004d;border-radius:6px;padding:1px 6px}.last-trick{z-index:60;background:var(--panel);border:1px solid var(--panel-line);border-radius:14px;gap:8px;padding:10px;display:flex;position:absolute;transform:translate(-50%,-50%)}.last-trick .mini{width:70px}.last-trick .mini svg{border-radius:5px;width:100%;display:block}.suit-chip{vertical-align:middle;background:#fffdf5;border-radius:50%;place-items:center;width:26px;height:26px;display:inline-grid;box-shadow:0 1px 3px #00000059}.btn .suit-chip{width:24px;height:24px}.unlock{flex-direction:column;align-items:center;gap:12px;margin-top:18px;display:flex}.unlock input[type=password]{border:1px solid var(--panel-line);width:min(320px,80vw);color:var(--ink);text-align:center;background:#0000004d;border-radius:12px;outline:none;padding:12px 14px;font-size:16px}.unlock input[type=password]:focus{border-color:var(--accent)}.unlock label{color:var(--muted);align-items:center;gap:6px;font-size:14px;display:flex}.unlock-error{color:#ffd9d3;min-height:1.2em;margin:0}.gpu-name{color:var(--muted);opacity:.75;white-space:nowrap;text-overflow:ellipsis;max-width:30vw;font-size:12px;overflow:hidden}.card.nope .front{animation:.42s ease-in-out nope}@keyframes nope{0%,to{transform:translate(0)}20%{transform:translate(-9px)rotate(-2deg)}40%{transform:translate(8px)rotate(2deg)}60%{transform:translate(-6px)}80%{transform:translate(3px)}}.toast{z-index:70;color:#1e2b25;opacity:0;pointer-events:none;background:#fffdf5;border-radius:12px;padding:9px 18px;font-weight:600;transition:opacity .2s,transform .2s;position:absolute;left:50%;transform:translate(-50%,8px);box-shadow:0 8px 22px #0006}.toast.show{opacity:1;transform:translate(-50%)}.dialog.settings{width:min(560px,94vw)}.setting{border-bottom:1px solid #ffffff14;justify-content:space-between;align-items:center;gap:16px;padding:10px 0;display:flex}.setting .k{color:var(--muted);font-weight:600}.setting-toggle{cursor:pointer;border-bottom:1px solid #ffffff14;align-items:flex-start;gap:12px;padding:12px 0;display:flex}.setting-toggle input{width:18px;height:18px;accent-color:var(--accent);margin-top:2px}.setting-toggle span{flex-direction:column;gap:2px;display:flex}.setting-toggle small{color:var(--muted)}.passed{color:var(--muted);border:1px solid #ffffff29;border-radius:999px;margin-left:8px;padding:0 7px;font-size:11px;line-height:16px;display:inline-block}
