:root{--red: #e63946;--yellow: #f1c40f;--green: #2ecc71;--blue: #3498db;--wild: #2c3e50;--bg: #0f1724;--panel: #1a2436;--text: #f1f5f9;--muted: #94a3b8;--accent: #fbbf24;--card-w: 80px;--card-h: 120px}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body,#root{margin:0;padding:0;height:100%;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:radial-gradient(circle at top,#1e293b 0%,var(--bg) 100%);color:var(--text);overscroll-behavior:none}body{touch-action:manipulation}.app{min-height:100vh;min-height:100dvh;display:flex;flex-direction:column}.toast{position:fixed;top:12px;left:50%;transform:translate(-50%);background:var(--red);color:#fff;padding:10px 18px;border-radius:8px;cursor:pointer;z-index:100;box-shadow:0 4px 20px #0006;max-width:calc(100vw - 24px);text-align:center;font-size:14px;animation:toast-in .2s ease-out}@keyframes toast-in{0%{opacity:0;transform:translate(-50%,-8px)}to{opacity:1;transform:translate(-50%)}}.home{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:24px 16px;gap:14px}.logo{font-size:clamp(64px,18vw,110px);margin:0;letter-spacing:.08em;background:linear-gradient(45deg,var(--red),var(--yellow),var(--green),var(--blue));-webkit-background-clip:text;background-clip:text;color:transparent;font-weight:900;line-height:1}.subtitle{color:var(--muted);margin:0 0 18px;font-size:14px}.input{width:100%;max-width:320px;padding:14px 16px;font-size:16px;border:2px solid #334155;background:var(--panel);color:var(--text);border-radius:12px;outline:none;font-family:inherit}.input:focus{border-color:var(--accent)}.input.code{font-size:32px;text-align:center;letter-spacing:.5em;text-indent:.5em;font-weight:700;text-transform:uppercase;max-width:240px}.buttons{display:flex;flex-direction:column;gap:10px;align-items:stretch;margin-top:8px;width:100%;max-width:320px}.btn{padding:14px 20px;font-size:16px;border-radius:12px;cursor:pointer;border:none;font-weight:600;transition:transform .1s,opacity .15s;min-height:48px;font-family:inherit}.btn:active{transform:scale(.97)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--accent);color:#1a1a1a}.btn-secondary{background:var(--panel);color:var(--text);border:2px solid #334155}.btn-link{background:transparent;color:var(--muted);padding:10px;min-height:40px}.btn-link:hover{color:var(--text)}.lobby{flex:1;display:flex;flex-direction:column;align-items:center;padding:24px 16px;gap:12px}.lobby h2{margin:0 0 4px}.lobby h3{margin:16px 0 4px}.room-code{font-size:clamp(40px,12vw,60px);font-weight:900;letter-spacing:.2em;text-indent:.2em;padding:14px 24px;background:var(--panel);border-radius:16px;cursor:pointer;border:2px dashed #475569;-webkit-user-select:all;user-select:all}.room-code:hover{border-color:var(--accent)}.hint{color:var(--muted);margin:4px 0;font-size:14px;text-align:center}.players{list-style:none;padding:0;width:100%;max-width:320px;margin:4px 0}.players li{background:var(--panel);padding:12px 14px;border-radius:8px;margin:6px 0;display:flex;align-items:center;gap:8px}.badge{background:var(--accent);color:#1a1a1a;font-size:11px;padding:2px 6px;border-radius:4px;font-weight:700;margin-left:auto}.badge-me{background:var(--blue);color:#fff}.game{flex:1;display:flex;flex-direction:column;padding:8px;gap:8px;min-height:100dvh}.game-header{display:flex;justify-content:space-between;align-items:center;padding:0 4px;font-size:14px}.winner-banner{background:var(--accent);color:#1a1a1a;font-size:clamp(18px,5vw,24px);font-weight:800;padding:14px;text-align:center;border-radius:12px;display:flex;flex-direction:column;align-items:center;gap:10px}.winner-actions{display:flex;gap:8px;flex-wrap:wrap;justify-content:center}.winner-actions .btn{font-size:14px;padding:10px 18px;min-height:40px;min-width:140px}.winner-banner .hint{color:#444;font-size:13px;font-weight:500}.opponents{display:flex;justify-content:center;gap:8px;flex-wrap:wrap}.opponent{background:var(--panel);padding:6px 12px;border-radius:10px;text-align:center;border:2px solid transparent;min-width:80px;font-size:13px}.opponent.active{border-color:var(--accent);box-shadow:0 0 12px #fbbf2466}.opponent-name{font-weight:600;max-width:110px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.opponent-cards{color:var(--muted);margin-top:2px;font-size:13px}.table{display:flex;justify-content:center;align-items:center;gap:24px;flex:1;padding:16px 0;min-height:160px}.draw-pile{position:relative;cursor:pointer}.card-back{width:var(--card-w);height:var(--card-h);background:linear-gradient(135deg,#1f2937,#111827);border-radius:10px;border:3px solid white;display:flex;align-items:center;justify-content:center;color:var(--red);font-weight:900;font-size:20px;font-style:italic;transform:rotate(-3deg);transition:transform .15s}.draw-pile:active .card-back{transform:rotate(0) scale(.95)}.pile-count{position:absolute;bottom:-8px;right:-8px;background:var(--bg);border:2px solid var(--accent);color:var(--accent);border-radius:50%;width:26px;height:26px;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700}.discard{position:relative}.current-color{position:absolute;top:-8px;right:-8px;width:24px;height:24px;border-radius:50%;border:3px solid var(--bg)}.color-red{background:var(--red)}.color-yellow{background:var(--yellow)}.color-green{background:var(--green)}.color-blue{background:var(--blue)}.color-wild{background:var(--wild)}.log{text-align:center;color:var(--muted);font-style:italic;min-height:18px;font-size:13px;padding:0 8px}.my-area{background:var(--panel);padding:10px 4px 12px;border-radius:16px 16px 0 0;border-top:3px solid transparent;position:sticky;bottom:0}.my-area.my-turn{border-top-color:var(--accent);box-shadow:0 -4px 24px #fbbf244d}.my-info{display:flex;align-items:center;justify-content:center;gap:10px;margin-bottom:8px;font-weight:600;font-size:14px}.turn-badge{background:var(--accent);color:#1a1a1a;padding:2px 8px;border-radius:4px;font-size:12px;font-weight:700}.btn-pass{padding:6px 14px;min-height:32px;font-size:13px;border-radius:8px;border:none;background:#475569;color:#fff;cursor:pointer;font-weight:600}.btn-pass:active{transform:scale(.96)}.hand{display:flex;padding:24px 12px 8px;overflow-x:auto;overflow-y:visible;scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch;scrollbar-width:thin}.hand::-webkit-scrollbar{height:4px}.hand::-webkit-scrollbar-thumb{background:#334155;border-radius:2px}.hand:before,.hand:after{content:"";margin:auto;flex:0 0 0}.hand .card{scroll-snap-align:center;flex-shrink:0;transition:transform .18s}.hand .card+.card{margin-left:-24px}.hand .card.selected,.hand .card:hover{transform:translateY(-16px);z-index:5}.card{width:var(--card-w);height:var(--card-h);border-radius:10px;position:relative;display:flex;align-items:center;justify-content:center;border:3px solid white;box-shadow:0 4px 8px #0006;-webkit-user-select:none;user-select:none;transition:transform .15s;font-weight:900}.card.clickable{cursor:pointer}.card.clickable:active{transform:scale(.95)}.card-red{background:var(--red)}.card-yellow{background:var(--yellow);color:#1a1a1a}.card-green{background:var(--green)}.card-blue{background:var(--blue)}.card-wild{background:conic-gradient(from 45deg,var(--red) 0deg 90deg,var(--yellow) 90deg 180deg,var(--green) 180deg 270deg,var(--blue) 270deg 360deg);color:#fff;text-shadow:0 1px 4px rgba(0,0,0,.6)}.card-center{font-size:calc(var(--card-w) * .4)}.card-corner{position:absolute;font-size:calc(var(--card-w) * .18)}.card-corner.tl{top:4px;left:6px}.card-corner.br{bottom:4px;right:6px;transform:rotate(180deg)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:50;padding:16px}.modal{background:var(--panel);padding:20px;border-radius:16px;text-align:center;width:100%;max-width:320px}.modal h3{margin:0 0 12px}.color-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.color-btn{height:90px;border:3px solid white;border-radius:12px;cursor:pointer}.color-btn:active{transform:scale(.96)}@media (max-width: 600px){:root{--card-w: 64px;--card-h: 96px}.game{padding:6px;gap:6px}.table{gap:16px;padding:8px 0;min-height:120px}.hand{padding:18px 8px 6px}.hand .card+.card{margin-left:-28px}.opponent{padding:5px 10px;min-width:70px;font-size:12px}.opponent-name{max-width:90px}.game-header,.my-info{font-size:13px}.log{font-size:12px}}@media (max-width: 360px){:root{--card-w: 56px;--card-h: 84px}.hand .card+.card{margin-left:-26px}}@media (max-height: 500px) and (orientation: landscape){.table{padding:4px 0;min-height:100px}.opponents{gap:6px}.opponent{padding:4px 8px;font-size:11px}}
