:root{--color-bg-primary: #0D1B2A;--color-bg-secondary: #1B2B4B;--color-bg-card: #162239;--color-bg-elevated: #1E3358;--color-accent: #3B7FE8;--color-accent-hover: #5596F0;--color-gold: #E8C547;--color-gold-dim: #B8962A;--color-penalty: #FF6B6B;--color-trump: #4CAF88;--color-text-primary: #F0F4FF;--color-text-secondary: #8BA3C4;--color-text-muted: #4A6080;--color-border: rgba(59, 127, 232, .2);--color-border-glow: rgba(59, 127, 232, .5);--color-suit-red: #FF4D6D;--color-suit-black: #E8EDF5;--color-success: #4CAF88;--color-warning: #FF9F43;--color-error: #FF6B6B;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--space-10: 40px;--space-12: 48px;--font-sans: "Inter", system-ui, -apple-system, sans-serif;--font-mono: "JetBrains Mono", "Fira Code", monospace;--text-xs: 11px;--text-sm: 13px;--text-base: 15px;--text-lg: 17px;--text-xl: 20px;--text-2xl: 24px;--text-3xl: 30px;--text-4xl: 36px;--radius-sm: 6px;--radius-md: 10px;--radius-lg: 16px;--radius-xl: 24px;--radius-card: 12px;--radius-full: 9999px;--shadow-sm: 0 2px 8px rgba(0, 0, 0, .3);--shadow-md: 0 4px 16px rgba(0, 0, 0, .4);--shadow-lg: 0 8px 32px rgba(0, 0, 0, .5);--shadow-glow: 0 0 20px rgba(59, 127, 232, .3);--shadow-card: 0 4px 20px rgba(0, 0, 0, .6);--transition-fast: .15s ease;--transition-base: .25s ease;--transition-slow: .4s ease;--transition-card: .3s cubic-bezier(.34, 1.56, .64, 1);--card-w: 72px;--card-h: 104px;--card-w-sm: 56px;--card-h-sm: 80px;--safe-top: env(safe-area-inset-top, 0px);--safe-bottom: env(safe-area-inset-bottom, 0px);--safe-left: env(safe-area-inset-left, 0px);--safe-right: env(safe-area-inset-right, 0px)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{font-size:16px;-webkit-text-size-adjust:100%;text-size-adjust:100%;scroll-behavior:smooth}body{font-family:var(--font-sans);background-color:var(--color-bg-primary);color:var(--color-text-primary);line-height:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow-x:hidden;min-height:100dvh;min-height:-webkit-fill-available;padding-top:var(--safe-top);padding-bottom:var(--safe-bottom);padding-left:var(--safe-left);padding-right:var(--safe-right);touch-action:manipulation;overscroll-behavior:none}#root{min-height:100dvh;min-height:-webkit-fill-available;display:flex;flex-direction:column}button,a,.playing-card{-webkit-tap-highlight-color:transparent;touch-action:manipulation}h1,h2,h3,h4,h5,h6{font-weight:700;line-height:1.2;color:var(--color-text-primary)}a{color:var(--color-accent);text-decoration:none;transition:color var(--transition-fast)}a:hover{color:var(--color-accent-hover)}button{font-family:var(--font-sans);cursor:pointer;border:none;outline:none}input,select,textarea{font-family:var(--font-sans);outline:none}.mono{font-family:var(--font-mono)}.text-gold{color:var(--color-gold)}.text-penalty{color:var(--color-penalty)}.text-trump{color:var(--color-trump)}.text-muted{color:var(--color-text-secondary)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);padding:10px 20px;border-radius:var(--radius-md);font-size:var(--text-base);font-weight:600;transition:all var(--transition-base);cursor:pointer;border:1px solid transparent;white-space:nowrap;min-height:44px;position:relative;overflow:hidden}.btn:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:#fff0;transition:background var(--transition-fast)}.btn:hover:after{background:#ffffff0d}.btn:active:after{background:#ffffff1a}.btn:disabled{opacity:.4;cursor:not-allowed;pointer-events:none}.btn-primary{background:linear-gradient(135deg,var(--color-accent),#5596F0);color:#fff;box-shadow:var(--shadow-md),0 0 20px #3b7fe84d}.btn-primary:hover{transform:translateY(-1px);box-shadow:var(--shadow-lg),0 0 30px #3b7fe866}.btn-secondary{background:var(--color-bg-elevated);color:var(--color-text-primary);border-color:var(--color-border)}.btn-secondary:hover{border-color:var(--color-accent);background:var(--color-bg-elevated)}.btn-ghost{background:transparent;color:var(--color-text-secondary);border-color:transparent}.btn-ghost:hover{color:var(--color-text-primary);background:#ffffff0d}.btn-gold{background:linear-gradient(135deg,var(--color-gold),#F0D060);color:#0d1b2a}.btn-danger{background:#ff6b6b26;color:var(--color-penalty);border-color:#ff6b6b4d}.btn-sm{padding:6px 14px;font-size:var(--text-sm);min-height:36px}.btn-lg{padding:14px 28px;font-size:var(--text-lg);min-height:52px}.input{width:100%;padding:10px 14px;background:var(--color-bg-elevated);border:1.5px solid var(--color-border);border-radius:var(--radius-md);color:var(--color-text-primary);font-size:var(--text-base);transition:border-color var(--transition-fast),box-shadow var(--transition-fast);min-height:44px}.input:focus{border-color:var(--color-accent);box-shadow:0 0 0 3px #3b7fe826}.input::placeholder{color:var(--color-text-muted)}.panel{background:var(--color-bg-card);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-6);box-shadow:var(--shadow-md)}.panel-elevated{background:var(--color-bg-elevated);border-color:var(--color-border-glow);box-shadow:var(--shadow-lg),var(--shadow-glow)}.badge{display:inline-flex;align-items:center;gap:var(--space-1);padding:2px 8px;border-radius:var(--radius-full);font-size:var(--text-xs);font-weight:600;letter-spacing:.05em;text-transform:uppercase}.badge-penalty{background:#ff6b6b26;color:var(--color-penalty);border:1px solid rgba(255,107,107,.3)}.badge-trump{background:#4caf8826;color:var(--color-trump);border:1px solid rgba(76,175,136,.3)}.badge-gold{background:#e8c54726;color:var(--color-gold);border:1px solid rgba(232,197,71,.3)}.spinner{width:40px;height:40px;border:3px solid var(--color-border);border-top-color:var(--color-accent);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--color-text-muted);border-radius:var(--radius-full)}::-webkit-scrollbar-thumb:hover{background:var(--color-text-secondary)}@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.6}}@keyframes glow{0%,to{box-shadow:0 0 10px #3b7fe84d}50%{box-shadow:0 0 25px #3b7fe899}}.animate-fade-in{animation:fadeIn var(--transition-base) ease forwards}.animate-slide-up{animation:slideUp var(--transition-slow) ease forwards}.animate-pulse{animation:pulse 2s ease-in-out infinite}.animate-glow{animation:glow 2s ease-in-out infinite}.game-shell{display:flex;gap:16px;width:100%;max-width:1200px;margin:0 auto;height:100dvh;height:100svh;padding:12px;padding-top:max(12px,var(--safe-top));padding-bottom:max(12px,var(--safe-bottom));padding-left:max(12px,var(--safe-left));padding-right:max(12px,var(--safe-right));box-sizing:border-box;align-items:stretch;justify-content:center;overflow:hidden}.game-chat-desktop{width:320px;flex-shrink:0;display:flex;flex-direction:column;height:100%;min-height:0}.game-chat-fab,.game-chat-sheet{display:none}.game-table{position:relative;flex:1;min-width:0;width:100%;height:100%;background:var(--color-bg-primary);overflow:hidden;display:grid;grid-template-areas:"top-player top-player top-player" "left-player trick-area right-player" "my-hand my-hand my-hand";grid-template-rows:auto minmax(0,1fr) auto;grid-template-columns:auto minmax(0,1fr) auto;gap:var(--space-3);padding:var(--space-3)}.opponent-player{display:flex;align-items:center;justify-content:center;gap:8px;position:relative;min-width:0}.opponent-player--top{flex-direction:row}.opponent-player--left,.opponent-player--right{flex-direction:column}.opponent-hud{display:flex;flex-direction:column;align-items:center;gap:2px;background:#1e293b8c;padding:8px 12px;border-radius:12px;border:1px solid rgba(255,255,255,.1);min-width:72px;max-width:120px;transition:border-color .2s ease,box-shadow .2s ease}.opponent-player.is-turn .opponent-hud{border-color:var(--color-accent);box-shadow:0 0 12px #f59e0b40}.opponent-player.is-speaking .opponent-hud{outline:2px solid var(--color-trump)}.opponent-status{display:flex;gap:4px;min-height:14px;font-size:11px}.opponent-name{font-size:11px;font-weight:600;color:var(--color-text-secondary);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center}.opponent-player.is-turn .opponent-name{color:var(--color-text-primary)}.opponent-count{font-size:10px;color:var(--color-text-muted);font-family:var(--font-mono)}.opponent-count:after{content:" kart"}.opponent-emote{position:absolute;top:-28px;background:#0f172ae6;border:1px solid var(--color-border);border-radius:50%;width:28px;height:28px;display:flex;align-items:center;justify-content:center;font-size:16px;z-index:20}.opponent-cards{display:flex}.opponent-cards--horizontal{flex-direction:row}.opponent-cards--vertical{flex-direction:column}.opponent-cards--horizontal .opponent-card-slot+.opponent-card-slot{margin-left:-36px}.opponent-cards--vertical .opponent-card-slot+.opponent-card-slot{margin-top:-52px}.player-hand-area{grid-area:my-hand;display:flex;flex-direction:column;align-items:center;padding-bottom:max(8px,var(--safe-bottom));z-index:5}.player-hand-actions{margin-bottom:8px;display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:8px}.player-hand-hint{font-size:12px;color:var(--color-text-secondary)}.player-hand-fan{position:relative;height:130px;max-width:100%}.player-hand-card{position:absolute;left:50%;bottom:0;transform-origin:bottom center;transition:transform .2s cubic-bezier(.34,1.56,.64,1)}.player-hand-wait{margin-top:8px;font-size:12px;color:var(--color-text-muted)}.player-hand-area--mobile{width:100%;padding:0 6px}.player-hand-rows{display:flex;flex-direction:column;gap:7px;width:100%;align-items:center}.player-hand-row{display:grid;grid-template-columns:repeat(var(--hand-row-count, 7),var(--card-w));justify-content:center;align-items:flex-end;gap:7px;width:100%;max-width:100%;padding:3px 2px 7px}.player-hand-card-item{width:var(--card-w);height:var(--card-h);transition:transform .15s ease}.player-hand-card-item.is-selected{transform:translateY(-10px)}.player-hand-card-item.is-disabled{opacity:.45}.playing-card{width:var(--card-w);height:var(--card-h);border-radius:9px;background:#fff;border:1px solid rgba(15,23,42,.18);cursor:pointer;position:relative;transition:transform var(--transition-card),box-shadow var(--transition-fast);box-shadow:0 5px 16px #00000073;-webkit-user-select:none;user-select:none;flex-shrink:0;overflow:hidden}.playing-card:hover:not(.disabled){transform:translateY(-12px) scale(1.05);box-shadow:0 16px 40px #000c,0 0 20px #3b7fe866}.playing-card.selected{transform:translateY(-16px) scale(1.06);box-shadow:0 20px 48px #000c,0 0 30px #3b7fe899;border-color:var(--color-accent)}.playing-card.disabled{opacity:.4;cursor:not-allowed;filter:grayscale(50%)}.playing-card.back{background:linear-gradient(135deg,var(--color-bg-secondary),var(--color-bg-elevated));border-color:var(--color-border);cursor:default}.player-hand{display:flex;align-items:flex-end;justify-content:center;position:relative;height:140px}.player-hand .playing-card{position:absolute;bottom:0;transition:transform var(--transition-card),box-shadow var(--transition-fast),left var(--transition-base)}.score-hud{position:fixed;top:max(var(--space-4),var(--safe-top));right:max(var(--space-4),var(--safe-right));background:#0d1b2ad9;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-3) var(--space-4);font-size:var(--text-sm);z-index:100;min-width:160px}.turn-timer{position:relative;width:44px;height:44px;flex-shrink:0}.turn-timer svg{transform:rotate(-90deg)}.turn-timer-ring{transition:stroke-dashoffset 1s linear}.hand-info-banner{position:fixed;top:max(var(--space-4),var(--safe-top));left:50%;transform:translate(-50%);background:#0d1b2ae6;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid var(--color-border-glow);border-radius:var(--radius-full);padding:var(--space-2) var(--space-5);font-size:var(--text-sm);font-weight:600;z-index:100;white-space:nowrap}.lobby{min-height:100dvh;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--space-6);background:radial-gradient(ellipse at top,rgba(59,127,232,.08) 0%,transparent 60%),var(--color-bg-primary)}.seat-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--space-3);margin:var(--space-4) 0}.seat-slot{background:var(--color-bg-elevated);border:1.5px dashed var(--color-border);border-radius:var(--radius-md);padding:var(--space-4);display:flex;flex-direction:column;align-items:center;gap:var(--space-2);min-height:80px;transition:border-color var(--transition-fast)}.seat-slot.filled{border-style:solid;border-color:var(--color-border-glow);background:var(--color-bg-card)}.seat-slot.owner{border-color:var(--color-gold)}.avatar{width:40px;height:40px;border-radius:var(--radius-full);background:linear-gradient(135deg,var(--color-accent),#6B48FF);display:flex;align-items:center;justify-content:center;font-size:var(--text-lg);font-weight:700;color:#fff;flex-shrink:0;position:relative}.avatar.speaking:after{content:"";position:absolute;top:-4px;right:-4px;bottom:-4px;left:-4px;border-radius:var(--radius-full);border:2px solid var(--color-accent);animation:glow 1s ease-in-out infinite}@media (max-width: 900px){.game-chat-desktop{display:none}.game-chat-fab{display:flex;align-items:center;justify-content:center;position:fixed;left:max(12px,var(--safe-left));bottom:max(16px,calc(var(--safe-bottom) + 8px));width:48px;height:48px;border-radius:50%;border:1px solid var(--color-border);background:#0d1b2aeb;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);color:var(--color-text-primary);font-size:20px;z-index:120;box-shadow:var(--shadow-md);cursor:pointer}.game-chat-sheet{display:block;position:fixed;top:0;right:0;bottom:0;left:0;z-index:300}.game-chat-sheet-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;background:#0000008c}.game-chat-sheet-panel{position:absolute;left:0;right:0;bottom:0;max-height:min(70dvh,520px);background:var(--color-bg-secondary);border-top-left-radius:16px;border-top-right-radius:16px;border:1px solid var(--color-border);padding:12px;padding-bottom:max(12px,var(--safe-bottom));display:flex;flex-direction:column;min-height:0;animation:slideUp .25s ease}.game-chat-sheet-panel>*:last-child{flex:1;min-height:0}.game-chat-sheet-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;font-weight:700;font-size:14px}}@media (max-width: 768px){:root{--card-w: clamp(46px, calc((100vw - 66px) / 7), 66px);--card-h: calc(var(--card-w) * 1.42);--card-w-sm: 36px;--card-h-sm: 52px}.game-shell{padding:0;height:100dvh;height:100svh}.game-table{gap:4px;padding:4px;padding-top:max(4px,var(--safe-top));padding-bottom:max(4px,var(--safe-bottom));grid-template-rows:52px minmax(0,1fr) auto;grid-template-columns:64px minmax(0,1fr) 64px}.player-hand-fan{display:none}.opponent-hud{padding:4px 6px;min-width:52px;max-width:72px;border-radius:8px}.opponent-name{font-size:10px}.opponent-count{font-size:9px}.opponent-count:after{content:""}.opponent-cards{display:none}.opponent-player--left,.opponent-player--right{justify-content:flex-start;padding-top:8px}.score-hud{top:max(8px,var(--safe-top));right:max(8px,var(--safe-right));min-width:130px;max-width:min(46vw,180px);padding:8px 10px;font-size:11px;max-height:42dvh;overflow-y:auto;-webkit-overflow-scrolling:touch}.hand-info-banner{top:max(8px,var(--safe-top));left:50%;transform:translate(-50%);max-width:calc(100vw - 160px);overflow:hidden;text-overflow:ellipsis;padding:4px 10px;font-size:11px}.playing-card:hover:not(.disabled){transform:none}.playing-card.selected{transform:translateY(-10px) scale(1.04)}.lobby{padding:var(--space-4);justify-content:flex-start;padding-top:max(var(--space-6),var(--safe-top))}.panel{padding:var(--space-4);width:100%}.seat-grid{grid-template-columns:1fr}}@media (max-width: 400px){:root{--card-w: clamp(43px, calc((100vw - 58px) / 7), 58px);--card-h: calc(var(--card-w) * 1.42)}.game-table{grid-template-columns:52px minmax(0,1fr) 52px;grid-template-rows:48px minmax(0,1fr) auto}.score-hud{min-width:112px;max-width:42vw}.player-hand-row{gap:6px}.player-hand-hint{display:none}}@media (max-height: 500px) and (orientation: landscape){:root{--card-w: 40px;--card-h: 58px}.game-table{grid-template-rows:40px minmax(0,1fr) auto}.player-hand-fan{height:78px}.score-hud{max-height:70dvh}.opponent-cards{display:none}}.glass{background:#1b2b4b99;backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border:1px solid rgba(59,127,232,.15)}.divider{height:1px;background:var(--color-border);margin:var(--space-4) 0}[data-tooltip]{position:relative}[data-tooltip]:before{content:attr(data-tooltip);position:absolute;bottom:calc(100% + 6px);left:50%;transform:translate(-50%);background:var(--color-bg-elevated);border:1px solid var(--color-border);color:var(--color-text-primary);font-size:var(--text-xs);padding:4px 8px;border-radius:var(--radius-sm);white-space:nowrap;opacity:0;pointer-events:none;transition:opacity var(--transition-fast);z-index:1000}[data-tooltip]:hover:before{opacity:1}.trick-area{grid-area:trick-area;display:flex;align-items:center;justify-content:center;position:relative}.trick-cards{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr;gap:var(--space-2);width:200px;height:200px}
