:root{
  --bg:#f4f6fb; --panel:#ffffff; --ink:#14213d; --muted:#64748b; --line:#dbe3ef;
  --blue:#2563eb; --green:#16a34a; --orange:#ea580c; --purple:#7c3aed; --danger:#dc2626;
  --shadow:0 14px 40px rgba(15,23,42,.12);
}
*{box-sizing:border-box}
body{margin:0;font-family:Pretendard,"Noto Sans KR",system-ui,-apple-system,sans-serif;background:radial-gradient(circle at top,#eef3ff 0,#f7f8fc 42%,#eef2f7 100%);color:var(--ink);min-height:100vh}
button,input,select{font:inherit}
button{cursor:pointer;border:0}
.shell{max-width:1280px;margin:0 auto;padding:24px}
.brand{display:flex;align-items:center;gap:14px;margin-bottom:22px}
.logo{width:56px;height:56px;border-radius:18px;display:grid;place-items:center;background:linear-gradient(135deg,#1d4ed8,#7c3aed);color:#fff;font-size:28px;box-shadow:var(--shadow)}
.brand h1{margin:0;font-size:clamp(26px,4vw,42px)}
.brand p{margin:4px 0 0;color:var(--muted)}
.panel{background:rgba(255,255,255,.92);border:1px solid var(--line);border-radius:24px;padding:22px;box-shadow:var(--shadow);backdrop-filter:blur(12px)}
.grid{display:grid;gap:16px}
.rooms{grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}
.room-card{padding:18px;border:1px solid var(--line);border-radius:20px;background:linear-gradient(180deg,#fff,#f8fafc)}
.room-card h3{margin:0 0 8px}.room-meta{color:var(--muted);font-size:14px;display:flex;justify-content:space-between;gap:8px}.status{display:inline-flex;align-items:center;gap:6px;font-weight:700}.dot{width:9px;height:9px;border-radius:50%;background:#94a3b8}.dot.play{background:#f59e0b}.dot.wait{background:#22c55e}
.btn{padding:11px 15px;border-radius:14px;background:#e2e8f0;color:#0f172a;font-weight:800}.btn.primary{background:linear-gradient(135deg,#2563eb,#4f46e5);color:#fff}.btn.success{background:#16a34a;color:white}.btn.warn{background:#ea580c;color:white}.btn.danger{background:#dc2626;color:white}.btn.ghost{background:transparent;border:1px solid var(--line)}.btn:disabled{opacity:.45;cursor:not-allowed}
.row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.space{justify-content:space-between}.form-row{display:grid;grid-template-columns:180px 1fr;gap:12px;align-items:center;margin:10px 0}.form-row input,.form-row select{width:100%;padding:12px;border:1px solid var(--line);border-radius:12px;background:#fff}.name-screen{min-height:100vh;display:grid;place-items:center;padding:24px}.name-box{width:min(520px,100%);text-align:center}.name-box input{width:100%;padding:16px 18px;border:2px solid #cbd5e1;border-radius:16px;font-size:20px;margin:18px 0}.hint{color:var(--muted);font-size:14px}.badge{display:inline-block;padding:5px 9px;border-radius:999px;font-size:12px;font-weight:800;background:#e0e7ff;color:#3730a3}.badge.host{background:#fef3c7;color:#92400e}.badge.turn{background:#dcfce7;color:#166534}
.game-layout{display:grid;grid-template-columns:280px 1fr;gap:18px}.sidebar{display:flex;flex-direction:column;gap:14px}.players{display:flex;flex-direction:column;gap:10px}.player{padding:12px;border:1px solid var(--line);border-radius:14px;background:#f8fafc}.player.me{outline:2px solid #818cf8}.player-top{display:flex;justify-content:space-between;gap:8px;align-items:center}.mini-backs{display:flex;gap:3px;margin-top:8px;overflow:hidden}.mini-card{width:20px;height:30px;border-radius:5px;background:linear-gradient(145deg,#1e3a8a,#6d28d9);border:1px solid #fff;box-shadow:0 2px 3px rgba(0,0,0,.18)}
.table{min-height:650px;display:grid;grid-template-rows:auto 1fr auto;gap:16px}.table-center{display:grid;place-items:center;position:relative;overflow:hidden;border-radius:24px;background:radial-gradient(circle at center,#dbeafe,#eef2ff 45%,#f8fafc 75%);border:1px solid var(--line)}.pile-area{display:flex;gap:36px;align-items:center;justify-content:center;flex-wrap:wrap}.pile-label{text-align:center;font-size:13px;color:var(--muted);margin-top:8px}.hand-area{border-top:1px solid var(--line);padding-top:14px}.hand{display:flex;gap:10px;overflow-x:auto;padding:10px 4px 18px;align-items:flex-end}.hand .card{flex:0 0 auto;transition:.18s transform,.18s box-shadow}.hand .card.playable{cursor:pointer}.hand .card.playable:hover{transform:translateY(-14px) rotate(-1deg);box-shadow:0 18px 28px rgba(15,23,42,.25)}.hand .card.blocked{opacity:.58;filter:saturate(.6)}
.card{width:112px;height:164px;border-radius:18px;padding:8px;position:relative;box-shadow:0 10px 18px rgba(15,23,42,.18);border:3px solid rgba(255,255,255,.95);overflow:hidden}.card-inner{height:100%;border-radius:13px;border:2px solid rgba(255,255,255,.65);display:flex;flex-direction:column;justify-content:space-between;padding:9px;color:#fff;position:relative}.card-front.domain-blue{background:linear-gradient(145deg,#1d4ed8,#60a5fa)}.card-front.domain-green{background:linear-gradient(145deg,#15803d,#4ade80)}.card-front.domain-orange{background:linear-gradient(145deg,#c2410c,#fb923c)}.card-front.domain-purple{background:linear-gradient(145deg,#6d28d9,#c084fc)}.card-front.wild{background:conic-gradient(#2563eb,#16a34a,#ea580c,#7c3aed,#2563eb)}.corner{font-weight:900;font-size:18px;line-height:1}.domain{font-size:10px;font-weight:800;opacity:.9}.content{font-size:12px;font-weight:800;line-height:1.28;text-align:center;background:rgba(255,255,255,.14);padding:7px;border-radius:10px;backdrop-filter:blur(3px)}.symbol{font-size:30px;font-weight:1000;text-align:center;text-shadow:0 2px 3px rgba(0,0,0,.2)}
.card-back{background:linear-gradient(145deg,#0f172a,#312e81 52%,#7c3aed);color:#fff}.back-pattern{position:absolute;inset:-30px;background:repeating-linear-gradient(45deg,rgba(255,255,255,.08) 0 10px,transparent 10px 20px);transform:rotate(8deg)}.back-title{position:relative;z-index:2;font-weight:1000;text-align:center;font-size:16px;line-height:1.25;margin:auto;background:rgba(15,23,42,.72);padding:14px 8px;border:2px solid rgba(255,255,255,.8);border-radius:14px}
.topbar{display:flex;justify-content:space-between;gap:12px;align-items:center;flex-wrap:wrap}.turn-banner{font-weight:900;font-size:18px}.log{max-height:160px;overflow:auto;font-size:13px;color:#475569;background:#f8fafc;padding:10px;border-radius:12px;border:1px solid var(--line)}.log div+div{margin-top:5px}.empty{padding:50px 20px;text-align:center;color:var(--muted)}
.modal-wrap{position:fixed;inset:0;background:rgba(15,23,42,.55);display:grid;place-items:center;padding:20px;z-index:50}.modal{width:min(520px,100%);background:#fff;border-radius:22px;padding:22px;box-shadow:var(--shadow)}.domain-choice{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:14px}.domain-choice button{padding:18px;border-radius:16px;color:white;font-weight:900}.c-blue{background:#2563eb}.c-green{background:#16a34a}.c-orange{background:#ea580c}.c-purple{background:#7c3aed}
.footer-note{margin-top:14px;color:#64748b;font-size:12px;line-height:1.5}.settings-inline{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.settings-inline input{width:72px;padding:9px;border-radius:10px;border:1px solid var(--line)}
@media(max-width:860px){.game-layout{grid-template-columns:1fr}.sidebar{order:2}.table{min-height:560px}.card{width:94px;height:140px}.content{font-size:11px}.form-row{grid-template-columns:1fr}}

/* --- 2차 통합 버전: 수업용 게임 UI --- */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.narrow{max-width:920px}.narrow-wide{max-width:1120px}.lead{color:var(--muted);font-size:17px}.big{padding:14px 22px;font-size:17px}.huge{width:100%;padding:17px 22px;font-size:19px;margin-top:16px}
.notice{margin:0 0 16px;padding:12px 14px;border-radius:14px;background:#fff7ed;border:1px solid #fed7aa;color:#9a3412;font-weight:700}.notice[hidden]{display:none}
.mode-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.mode-card{background:#fff;border:1px solid var(--line);border-radius:24px;padding:26px;box-shadow:var(--shadow)}.mode-card h2{margin:10px 0 8px}.mode-card p{color:var(--muted);line-height:1.6;min-height:52px}.mode-icon{font-size:40px;font-weight:900}.center-actions{text-align:center;margin-top:16px}
.setup-panel{max-width:720px;margin:0 auto}.rules-mini,.rule-box{padding:12px 14px;border-radius:14px;background:#f8fafc;border:1px solid var(--line);color:#475569;line-height:1.55}.action-row{display:flex;justify-content:flex-end;gap:10px;margin-top:18px}
.game-header{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-bottom:16px;flex-wrap:wrap}.game-header h1{margin:3px 0 0}.eyebrow{font-size:12px;letter-spacing:.08em;font-weight:900;color:#6366f1;text-transform:uppercase}.header-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.online-pill{font-weight:800;color:#047857;background:#d1fae5;padding:8px 11px;border-radius:999px}
.teacher-panel{display:flex;justify-content:space-between;align-items:center;gap:16px;margin-bottom:16px;flex-wrap:wrap}.teacher-panel h2{margin:3px 0 0}.rooms-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px}.room-card{display:flex;flex-direction:column;gap:12px}.room-title{display:flex;align-items:center;justify-content:space-between;gap:8px}.room-title h3{margin:0}.status{font-size:12px;padding:5px 8px;border-radius:999px;background:#e2e8f0}.status.lobby{background:#dcfce7;color:#166534}.status.playing{background:#fef3c7;color:#92400e}.status.finished{background:#e0e7ff;color:#3730a3}.room-people{display:flex;gap:6px;flex-wrap:wrap;font-size:12px}.room-people span{padding:4px 7px;background:#f1f5f9;border-radius:999px}.muted{color:var(--muted)}
.waiting-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.15fr);gap:18px}.section-head{display:flex;align-items:center;justify-content:space-between;gap:10px}.players.large .player{padding:15px}.qr-box{display:grid;grid-template-columns:160px 1fr;gap:16px;align-items:center;margin-top:18px;padding-top:18px;border-top:1px solid var(--line)}.qr-box img{width:160px;max-width:100%;border-radius:14px;border:1px solid var(--line);background:#fff}.qr-box code{display:block;word-break:break-all;font-size:11px;color:#64748b}.choice-blue{background:#2563eb}.choice-green{background:#16a34a}.choice-orange{background:#ea580c}.choice-purple{background:#7c3aed}.domain-choice small{display:block;opacity:.85;margin-top:4px}.modal-cancel{margin-top:12px;width:100%}
.card-head{display:flex;justify-content:space-between;align-items:flex-start;gap:6px}.shape-wrap{display:grid;place-items:center;min-height:64px}.shape-svg{width:76px;max-width:100%;height:auto}.content small{display:block;margin-top:4px;font-size:9px;font-weight:700;opacity:.9}.card.special-card .content{font-size:11px}.back-grid{position:absolute;inset:-24px;background:repeating-linear-gradient(45deg,rgba(255,255,255,.08) 0 9px,transparent 9px 18px);transform:rotate(8deg)}.mini-card span{display:none}
.hand-title{display:flex;align-items:center;justify-content:space-between;gap:10px}.deck-card:disabled{cursor:not-allowed;opacity:.72}.top-card-wrap .card{pointer-events:none}

/* 카드를 고르거나 낼 때 위로 뜨는 효과 */
.hand .card.playable{transform-origin:center bottom;will-change:transform}.hand .card.playable:focus-visible{outline:4px solid #facc15;outline-offset:3px;transform:translateY(-12px)}
@media (hover:hover) and (pointer:fine){.hand .card.playable:hover{transform:translateY(-16px) rotate(-1deg);box-shadow:0 22px 32px rgba(15,23,42,.3)}}
.hand .card.playing-out{animation:cardPlayOut .31s cubic-bezier(.2,.75,.25,1) forwards;z-index:20;pointer-events:none}
@keyframes cardPlayOut{0%{transform:translateY(0) scale(1)}45%{transform:translateY(-24px) scale(1.04)}100%{transform:translateY(-44px) scale(.96);opacity:.12}}

/* 현재 차례 플레이어 강조 */
.player.current-turn{position:relative;border:2px solid #f59e0b;background:linear-gradient(135deg,#fffbeb,#fff);box-shadow:0 0 0 4px rgba(245,158,11,.14),0 10px 22px rgba(245,158,11,.18);animation:turnPulse 1.25s ease-in-out infinite}.player.current-turn::after{content:'YOUR TURN';position:absolute;right:10px;top:-9px;padding:3px 7px;border-radius:999px;background:#f59e0b;color:white;font-size:9px;font-weight:1000;letter-spacing:.04em}.turn-arrow{display:inline-block;margin-right:5px;color:#f59e0b;animation:turnArrow .7s ease-in-out infinite alternate}.turn-banner{padding:11px 14px;border-radius:14px;background:#f8fafc;border:1px solid var(--line);text-align:center}.turn-banner.my-turn{background:linear-gradient(90deg,#fef3c7,#fff7ed,#fef3c7);border-color:#f59e0b;color:#92400e;box-shadow:0 0 0 4px rgba(245,158,11,.1);animation:bannerGlow 1.1s ease-in-out infinite alternate}.table.table-my-turn{border-color:#fbbf24;box-shadow:0 0 0 4px rgba(251,191,36,.12),var(--shadow)}
@keyframes turnPulse{50%{box-shadow:0 0 0 7px rgba(245,158,11,.08),0 12px 26px rgba(245,158,11,.24)}}@keyframes turnArrow{to{transform:translateX(4px)}}@keyframes bannerGlow{to{filter:brightness(1.04);transform:scale(1.004)}}

/* UNO 중앙 표시 */
.uno-center{position:absolute;left:50%;top:48%;transform:translate(-50%,-50%);z-index:6;display:grid;place-items:center;pointer-events:none;text-align:center;animation:unoPop .55s cubic-bezier(.2,.9,.25,1)}.uno-center strong{font-size:clamp(52px,9vw,104px);line-height:.9;color:#ef4444;-webkit-text-stroke:3px #fff;text-shadow:0 6px 0 #991b1b,0 15px 30px rgba(127,29,29,.28);letter-spacing:-.05em;animation:unoBeat 1s ease-in-out infinite}.uno-center span{margin-top:10px;padding:7px 12px;border-radius:999px;background:rgba(15,23,42,.82);color:white;font-weight:900;box-shadow:0 6px 18px rgba(15,23,42,.22)}
@keyframes unoPop{from{opacity:0;transform:translate(-50%,-50%) scale(.3) rotate(-8deg)}to{opacity:1;transform:translate(-50%,-50%) scale(1) rotate(0)}}@keyframes unoBeat{50%{transform:scale(1.08)}}

/* 우측 상단 실시간 점수표 */
.scoreboard{position:absolute;right:12px;top:12px;z-index:9;width:190px;max-width:42%;padding:10px;border-radius:15px;background:rgba(255,255,255,.93);border:1px solid rgba(148,163,184,.45);box-shadow:0 10px 25px rgba(15,23,42,.13);backdrop-filter:blur(8px)}.score-title{display:flex;justify-content:space-between;align-items:baseline;gap:6px;font-weight:1000;margin-bottom:6px}.score-title small{font-size:9px;color:var(--muted);font-weight:800}.score-row{display:flex;justify-content:space-between;gap:8px;padding:5px 7px;border-radius:8px;font-size:12px}.score-row span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.score-row.score-turn{background:#fef3c7;color:#92400e}.score-row.score-winner{background:#dcfce7;color:#166534}.score-rule{border-top:1px solid var(--line);margin-top:5px;padding-top:5px;color:var(--muted);font-size:9px;text-align:center}

/* 셔플 효과 */
.shuffle-overlay{position:absolute;inset:0;z-index:15;display:grid;place-content:center;justify-items:center;gap:10px;background:rgba(238,242,255,.88);backdrop-filter:blur(5px);text-align:center}.shuffle-overlay strong{font-size:24px}.shuffle-overlay span{font-size:12px;color:var(--muted)}.shuffle-stack{position:relative;width:120px;height:170px}.shuffle-stack i{position:absolute;left:16px;top:4px;width:88px;height:132px;border-radius:14px;border:3px solid white;background:linear-gradient(145deg,#0f172a,#312e81 52%,#7c3aed);box-shadow:0 10px 20px rgba(15,23,42,.22);animation:shuffleCard 1s ease-in-out infinite}.shuffle-stack i::after{content:'입체도형';position:absolute;inset:0;display:grid;place-items:center;color:#fff;font-style:normal;font-size:10px;font-weight:900}.shuffle-stack i:nth-child(2){animation-delay:-.15s}.shuffle-stack i:nth-child(3){animation-delay:-.3s}.shuffle-stack i:nth-child(4){animation-delay:-.45s}.shuffle-stack i:nth-child(5){animation-delay:-.6s}@keyframes shuffleCard{0%,100%{transform:translateX(-22px) rotate(-8deg)}50%{transform:translateX(38px) translateY(8px) rotate(9deg)}}

.special-legend{display:grid;gap:5px;padding:11px 12px;border-radius:14px;background:#f8fafc;border:1px solid var(--line);font-size:11px;color:#475569}.special-legend b{font-size:12px;color:#0f172a;margin-bottom:2px}.winner-bar{display:flex;justify-content:center;align-items:center;gap:14px;flex-wrap:wrap;margin-top:14px;padding:14px;border-radius:18px;background:#dcfce7;border:1px solid #86efac}.log-panel{margin-top:16px}.badges{display:flex;gap:5px;flex-wrap:wrap;margin-top:6px}

@media(max-width:860px){.mode-grid,.waiting-grid{grid-template-columns:1fr}.qr-box{grid-template-columns:110px 1fr}.qr-box img{width:110px}.scoreboard{width:158px;max-width:49%;padding:8px}.score-row{font-size:11px}.table-center{min-height:390px}.uno-center{top:56%}.uno-center strong{-webkit-text-stroke:2px #fff}.special-legend{display:grid;grid-template-columns:1fr 1fr}.special-legend b{grid-column:1/-1}}
@media(max-width:520px){.shell{padding:14px}.panel{padding:14px;border-radius:18px}.game-header h1{font-size:24px}.scoreboard{right:7px;top:7px;width:142px;max-width:55%}.score-title small{display:none}.pile-area{gap:14px;padding-top:72px}.hand{gap:7px}.card{width:84px;height:128px;border-radius:14px;padding:6px}.card-inner{padding:6px}.shape-wrap{min-height:48px}.shape-svg{width:60px}.content{padding:5px;font-size:10px}.content small{font-size:8px}.corner{font-size:15px}.uno-center{top:54%}.uno-center strong{font-size:54px}.player.current-turn::after{content:'차례'}.qr-box{grid-template-columns:1fr;text-align:center}.qr-box img{margin:auto}}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important}.hand .card{transition:none!important}}
.deal-cards{position:absolute;inset:0;pointer-events:none}.deal-cards i{position:absolute;left:50%;top:50%;width:42px;height:62px;margin:-31px 0 0 -21px;border-radius:7px;background:linear-gradient(145deg,#0f172a,#312e81 52%,#7c3aed);border:2px solid #fff;opacity:0;animation:dealFly 1.6s ease-in-out infinite}.deal-cards i:nth-child(1){--dx:-210px;--dy:-105px;animation-delay:.15s}.deal-cards i:nth-child(2){--dx:210px;--dy:-105px;animation-delay:.4s}.deal-cards i:nth-child(3){--dx:-210px;--dy:120px;animation-delay:.65s}.deal-cards i:nth-child(4){--dx:210px;--dy:120px;animation-delay:.9s}@keyframes dealFly{0%{opacity:0;transform:translate(0,0) scale(.8) rotate(0)}15%{opacity:.95}60%,100%{opacity:0;transform:translate(var(--dx),var(--dy)) scale(.65) rotate(12deg)}}

/* --- v3: 주소 참여 중심의 대전 진입 --- */
.flow-hint{margin:12px auto 4px;padding:10px 12px;border-radius:12px;background:#eef2ff;color:#4338ca;font-size:13px;line-height:1.5}
.mode-card{display:flex;flex-direction:column}.mode-card .btn.big{width:100%;margin-top:auto}.text-btn{margin-top:10px;padding:8px;background:transparent;color:#475569;text-decoration:underline;font-weight:800}.text-btn:disabled{opacity:.45;cursor:not-allowed}
.joined-note{margin-top:14px;padding:11px 12px;border-radius:12px;background:#ecfdf5;color:#047857;font-weight:900;text-align:center}
.share-address{margin-top:18px;padding-top:18px;border-top:1px solid var(--line)}.share-address p{margin:5px 0 12px;color:var(--muted);font-size:13px;line-height:1.55}.address-row{display:flex;gap:8px;align-items:stretch}.address-row input{flex:1;min-width:0;padding:12px;border:1px solid var(--line);border-radius:12px;background:#f8fafc;color:#334155;font-size:13px}.address-warning{display:flex;flex-direction:column;gap:4px;margin-top:12px;padding:11px 12px;border-radius:12px;background:#fff7ed;border:1px solid #fed7aa;color:#9a3412;font-size:12px;line-height:1.45}.address-warning b{font-size:13px}
@media(max-width:620px){.address-row{flex-direction:column}.address-row .btn{width:100%}}

/* --- v4: 양쪽 플레이어 배치 · 현재 색상 · 실제 셔플/분배 연출 --- */
.arena-layout{
  position:relative;
  display:grid;
  grid-template-columns:minmax(178px,220px) minmax(0,1fr) minmax(178px,220px);
  gap:14px;
  align-items:stretch;
}
.player-rail{padding:14px;display:flex;flex-direction:column;min-width:0;background:rgba(255,255,255,.9)}
.rail-title{font-size:12px;font-weight:1000;letter-spacing:.04em;color:#475569;text-align:center;padding-bottom:10px;border-bottom:1px solid var(--line)}
.rail-players{display:flex;flex-direction:column;justify-content:space-evenly;gap:12px;flex:1;padding:10px 0}
.seat-player{min-width:0;padding:11px;background:linear-gradient(180deg,#fff,#f8fafc)}
.seat-player .player-top b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.seat-player .mini-backs{flex-wrap:wrap;max-height:44px;justify-content:center}
.seat-player .mini-card{width:17px;height:25px}
.rail-empty{display:grid;place-items:center;min-height:90px;color:var(--muted)}
.arena-layout .table{min-width:0;min-height:640px}
.status-strip{display:flex;align-items:stretch;justify-content:center;gap:10px;flex-wrap:wrap}
.current-color-banner,.direction-pill{display:flex;align-items:center;gap:10px;min-height:58px;padding:10px 16px;border-radius:16px;border:2px solid rgba(255,255,255,.9);box-shadow:0 8px 18px rgba(15,23,42,.12)}
.current-color-banner{min-width:178px;color:#fff}
.current-color-banner small,.direction-pill small{display:block;font-size:10px;font-weight:900;letter-spacing:.08em;opacity:.85}
.current-color-banner strong,.direction-pill strong{display:block;font-size:21px;line-height:1.05;font-weight:1000}
.current-color-dot{width:28px;height:28px;border-radius:50%;background:currentColor;border:5px solid rgba(255,255,255,.95);box-shadow:0 0 0 2px rgba(15,23,42,.12)}
.current-blue{background:linear-gradient(135deg,#1d4ed8,#60a5fa)}
.current-green{background:linear-gradient(135deg,#15803d,#4ade80)}
.current-orange{background:linear-gradient(135deg,#c2410c,#fb923c)}
.current-purple{background:linear-gradient(135deg,#6d28d9,#c084fc)}
.current-wild{background:conic-gradient(from 45deg,#2563eb,#16a34a,#ea580c,#7c3aed,#2563eb)}
.direction-pill{background:#fff;color:#334155;border-color:var(--line)}
.direction-pill strong{font-size:15px}
.under-game-grid{display:grid;grid-template-columns:minmax(220px,.75fr) minmax(0,1.25fr);gap:14px;margin-top:14px}
.under-game-grid .log-panel{margin-top:0}
.practice-preview{display:flex;flex-direction:column;gap:10px;margin-top:12px}

/* 시작 시 전체 게임판을 덮는 셔플 + 카드 분배 */
.shuffle-overlay.arena-shuffle{
  position:absolute;
  inset:0;
  z-index:40;
  min-height:640px;
  border-radius:24px;
  overflow:hidden;
  display:grid;
  place-content:center;
  justify-items:center;
  gap:9px;
  background:radial-gradient(circle at center,rgba(255,255,255,.98),rgba(238,242,255,.94) 48%,rgba(224,231,255,.96));
  backdrop-filter:blur(8px);
  text-align:center;
}
.shuffle-overlay.arena-shuffle strong{font-size:26px;z-index:4}
.shuffle-overlay.arena-shuffle>span{font-size:12px;color:var(--muted);z-index:4;max-width:360px}
.shuffle-overlay.arena-shuffle .shuffle-stack{position:relative;width:150px;height:180px;z-index:5;perspective:800px}
.shuffle-overlay.arena-shuffle .shuffle-stack i{
  position:absolute;left:31px;top:10px;width:88px;height:132px;border-radius:14px;border:3px solid #fff;
  background:linear-gradient(145deg,#0f172a,#312e81 52%,#7c3aed);
  box-shadow:0 12px 24px rgba(15,23,42,.28);
  animation:v4Shuffle 1.05s cubic-bezier(.45,.05,.25,1) infinite;
}
.shuffle-overlay.arena-shuffle .shuffle-stack i::after{content:'입체도형\A카드게임';white-space:pre;position:absolute;inset:0;display:grid;place-items:center;color:#fff;font-style:normal;font-size:10px;line-height:1.25;font-weight:1000;text-align:center}
.shuffle-overlay.arena-shuffle .shuffle-stack i:nth-child(2){animation-delay:-.12s}.shuffle-overlay.arena-shuffle .shuffle-stack i:nth-child(3){animation-delay:-.24s}.shuffle-overlay.arena-shuffle .shuffle-stack i:nth-child(4){animation-delay:-.36s}.shuffle-overlay.arena-shuffle .shuffle-stack i:nth-child(5){animation-delay:-.48s}.shuffle-overlay.arena-shuffle .shuffle-stack i:nth-child(6){animation-delay:-.60s}.shuffle-overlay.arena-shuffle .shuffle-stack i:nth-child(7){animation-delay:-.72s}
@keyframes v4Shuffle{
  0%,100%{transform:translate3d(-42px,3px,0) rotate(-12deg) rotateY(-8deg)}
  34%{transform:translate3d(0,-12px,30px) rotate(0) rotateY(8deg)}
  68%{transform:translate3d(48px,8px,0) rotate(13deg) rotateY(-7deg)}
}
.shuffle-overlay.arena-shuffle .deal-cards{position:absolute;inset:0;z-index:3;pointer-events:none}
.shuffle-overlay.arena-shuffle .deal-cards i{
  position:absolute;left:50%;top:51%;width:48px;height:70px;margin:-35px 0 0 -24px;border-radius:9px;
  background:linear-gradient(145deg,#0f172a,#312e81 52%,#7c3aed);border:2px solid #fff;
  box-shadow:0 8px 14px rgba(15,23,42,.25);opacity:0;
  animation:v4Deal .7s cubic-bezier(.16,.78,.24,1) var(--delay) 1 both;
}
.shuffle-overlay.arena-shuffle .deal-cards i::after{content:'입체';position:absolute;inset:0;display:grid;place-items:center;color:#fff;font-size:8px;font-style:normal;font-weight:900}
@keyframes v4Deal{
  0%{left:50%;top:51%;opacity:0;transform:scale(.78) rotate(0)}
  12%{opacity:1;transform:scale(1.04) translateY(-10px) rotate(calc(var(--rot) * -.25))}
  100%{left:var(--left);top:var(--top);opacity:.08;transform:scale(.68) rotate(var(--rot))}
}

/* 실제 손패 카드가 중앙 버림패로 날아가는 효과 */
.flying-play-card{transition:transform .42s cubic-bezier(.18,.78,.24,1),opacity .42s ease;will-change:transform,opacity;box-shadow:0 24px 45px rgba(15,23,42,.36)!important}

@media(max-width:1040px){
  .arena-layout{grid-template-columns:minmax(145px,180px) minmax(0,1fr) minmax(145px,180px);gap:9px}
  .player-rail{padding:10px}.seat-player{padding:9px}.seat-player .mini-card{width:14px;height:22px}
}
@media(max-width:820px){
  .arena-layout{grid-template-columns:1fr 1fr;align-items:start}
  .arena-layout .table{grid-column:1/-1;grid-row:1;min-height:560px}
  .player-rail{grid-row:2;min-height:0}.left-rail{grid-column:1}.right-rail{grid-column:2}
  .rail-players{justify-content:flex-start}.under-game-grid{grid-template-columns:1fr}
  .shuffle-overlay.arena-shuffle{min-height:560px;grid-row:1/3;grid-column:1/-1}
}
@media(max-width:520px){
  .status-strip{gap:7px}.current-color-banner,.direction-pill{min-height:52px;padding:8px 11px}.current-color-banner{min-width:145px}.current-color-banner strong{font-size:18px}.current-color-dot{width:23px;height:23px}
  .arena-layout{grid-template-columns:1fr}.arena-layout .table,.left-rail,.right-rail{grid-column:1}.left-rail{grid-row:2}.right-rail{grid-row:3}.shuffle-overlay.arena-shuffle{grid-row:1/4;grid-column:1}
  .player-rail{padding:9px}.rail-players{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.seat-player .mini-backs{display:none}
}

/* ===================================================================
   v5 — 시각화 개선 / 6장 줄바꿈 / 배경 교체 / 시작화면 모드선택 / 사운드
   =================================================================== */

/* ── 카드 크기를 변수로 관리 (6장 = 한 줄) ─────────────────────── */
:root{ --card-w:112px; }

.card{
  width:var(--card-w);
  height:calc(var(--card-w) * 1.464);
  border-radius:calc(var(--card-w) * .155);
  padding:calc(var(--card-w) * .062);
  box-shadow:0 10px 22px rgba(6,10,35,.34), 0 2px 5px rgba(6,10,35,.22);
  border:3px solid rgba(255,255,255,.94);
}
.card-inner{ padding:calc(var(--card-w) * .072); border-radius:calc(var(--card-w) * .108); position:relative; z-index:2; }
.corner{ font-size:calc(var(--card-w) * .158); }
.domain{ font-size:calc(var(--card-w) * .086); }
.shape-wrap{ min-height:calc(var(--card-w) * .53); }
.shape-svg{ width:calc(var(--card-w) * .67); }
.content{ font-size:calc(var(--card-w) * .108); padding:calc(var(--card-w) * .058); border-radius:calc(var(--card-w) * .088); }
.content small{ font-size:calc(var(--card-w) * .079); margin-top:calc(var(--card-w) * .03); }
.card.special-card .content{ font-size:calc(var(--card-w) * .1); }
.back-title{ font-size:calc(var(--card-w) * .135); padding:calc(var(--card-w) * .11) calc(var(--card-w) * .06); border-radius:calc(var(--card-w) * .12); }

/* 카드 광택 */
.card-front::after{
  content:''; position:absolute; inset:0; z-index:1; pointer-events:none;
  border-radius:inherit;
  background:linear-gradient(152deg, rgba(255,255,255,.30) 0%, rgba(255,255,255,.06) 34%, transparent 55%);
}

/* ── 손패: 한 줄에 정확히 6장, 넘치면 다음 줄 ──────────────────── */
.hand{
  display:grid;
  grid-template-columns:repeat(6, var(--card-w));
  justify-content:center;
  align-content:start;
  gap:calc(var(--card-w) * .16) calc(var(--card-w) * .1);
  overflow:visible;
  padding:14px 4px 20px;
}
.hand-area{ overflow:visible; }
.hand .card{ flex:none; }
.hand .card.playable{
  box-shadow:0 12px 24px rgba(6,10,35,.32), 0 0 0 3px rgba(250,204,21,.9);
}
.hand .card.playable:hover{ transform:translateY(-16px) rotate(-1.5deg) scale(1.045); }
.hand .card.blocked{ opacity:.66; filter:saturate(.72) brightness(.97); }

/* ── 배경: 짙은 인디고 게임 테이블 ─────────────────────────────── */
body{
  background:
    radial-gradient(1150px 680px at 10% -10%, rgba(99,102,241,.55), transparent 60%),
    radial-gradient(980px 600px at 92% 2%, rgba(192,38,211,.34), transparent 62%),
    radial-gradient(900px 700px at 52% 112%, rgba(14,165,233,.34), transparent 60%),
    linear-gradient(165deg,#121938 0%,#1a2150 40%,#241a4d 72%,#131936 100%);
  background-attachment:fixed;
}
body::before{
  content:''; position:fixed; inset:0; z-index:0; pointer-events:none;
  background:repeating-linear-gradient(135deg, rgba(255,255,255,.03) 0 2px, transparent 2px 10px);
}
#app{ position:relative; z-index:1; }

/* 배경 위에 바로 놓이는 글자 */
.brand h1, .game-header h1{ color:#f3f6ff; text-shadow:0 2px 14px rgba(6,9,28,.55); }
.brand p, .game-header .lead{ color:#c4ccf3; }
.eyebrow{ color:#a9b6ff; }
.logo{ box-shadow:0 12px 30px rgba(6,9,28,.5); }
.game-header .btn.ghost, .brand .btn.ghost, .center-actions .btn.ghost, .header-actions .btn.ghost{
  color:#eef1ff; border-color:rgba(255,255,255,.34); background:rgba(255,255,255,.10);
}
.game-header .btn.ghost:hover, .center-actions .btn.ghost:hover, .header-actions .btn.ghost:hover{
  background:rgba(255,255,255,.18);
}
.panel{ box-shadow:0 22px 55px rgba(5,8,25,.35); }

/* ── 테이블 중앙: 초록 펠트 ────────────────────────────────────── */
.table-center{
  background:
    radial-gradient(circle at 50% 40%, #16785c 0%, #106049 46%, #0a4234 78%, #062b22 100%);
  border:1px solid rgba(255,255,255,.16);
  box-shadow:inset 0 0 95px rgba(0,0,0,.48), inset 0 2px 0 rgba(255,255,255,.09);
}
.pile-label{ color:#d3ece2; font-weight:800; text-shadow:0 1px 3px rgba(0,0,0,.4); }
.empty-card{ color:#d3ece2; border-color:rgba(255,255,255,.3); }
.uno-center strong{ text-shadow:0 6px 0 #7f1d1d, 0 16px 34px rgba(0,0,0,.45); }

/* ── 시작 화면: 이름 + 모드 선택 ───────────────────────────────── */
.start-box{ width:min(620px,100%); }
.start-modes{ display:grid; grid-template-columns:1fr 1fr; gap:12px; margin-top:4px; }
.mode-pick{
  display:grid; gap:5px; justify-items:center; padding:20px 14px;
  border-radius:20px; border:2px solid var(--line);
  background:linear-gradient(180deg,#ffffff,#f5f8ff); color:var(--ink); font-weight:900;
  transition:.16s transform,.16s box-shadow,.16s border-color;
}
.mode-pick:hover:not(:disabled){ transform:translateY(-3px); box-shadow:0 16px 28px rgba(20,33,61,.18); }
.mode-pick b{ font-size:18px; }
.mode-pick small{ font-weight:700; color:var(--muted); font-size:12px; line-height:1.45; text-align:center; }
.mode-pick-icon{ font-size:30px; line-height:1; }
.mode-pick.practice{ border-color:#86efac; } .mode-pick.practice .mode-pick-icon{ color:#16a34a; }
.mode-pick.online{ border-color:#a5b4fc; }  .mode-pick.online .mode-pick-icon{ color:#4f46e5; }
.mode-pick:disabled{ opacity:.5; cursor:not-allowed; }
.start-hint{ margin:14px 0 0; font-size:12.5px; color:var(--muted); line-height:1.55; }

/* ── 소리 켜기/끄기 ────────────────────────────────────────────── */
.sound-toggle{
  position:fixed; right:14px; bottom:14px; z-index:60;
  display:inline-flex; align-items:center; gap:7px;
  padding:10px 14px; border-radius:999px; font-weight:900; font-size:13px;
  color:#0b1030; background:rgba(255,255,255,.94);
  border:1px solid rgba(255,255,255,.7);
  box-shadow:0 10px 24px rgba(5,8,25,.38); backdrop-filter:blur(8px);
}
.sound-toggle.is-off{ color:#64748b; background:rgba(226,232,240,.92); }
.sound-toggle span{ font-size:15px; }

/* ── 반응형: 6장 유지하며 카드만 축소 ──────────────────────────── */
@media(max-width:1240px){ :root{ --card-w:104px; } }
@media(max-width:1100px){ :root{ --card-w:94px; } }
@media(max-width:900px){  :root{ --card-w:84px; } }
@media(max-width:760px){  :root{ --card-w:72px; } }
@media(max-width:640px){  :root{ --card-w:62px; } }
@media(max-width:560px){  :root{ --card-w:56px; } }
@media(max-width:500px){  :root{ --card-w:50px; } }
@media(max-width:520px){
  .start-modes{ grid-template-columns:1fr; }
  .sound-toggle{ right:10px; bottom:10px; padding:8px 11px; font-size:12px; }
}

/* ── 교사 모드 / 대기실 ────────────────────────────────────────── */
.teacher-entry{ margin:10px 0 0; }
.teacher-logo{ background:linear-gradient(135deg,#0f766e,#0284c7); }
.pw-error{ margin:8px 0 0; color:#b91c1c; font-weight:800; font-size:13px; }
.pw-error[hidden]{ display:none; }
.name-box input[type=password]{ letter-spacing:.35em; text-align:center; }

.lobby-bar{ display:flex; align-items:center; justify-content:space-between; gap:14px; flex-wrap:wrap; margin-bottom:16px; }
.lobby-bar h2{ margin:4px 0 0; }
.lobby-sub{ margin:4px 0 0; color:var(--muted); font-size:13.5px; }

.teacher-settings{ margin-bottom:16px; }
.teacher-grid{ display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:14px; margin:6px 0 16px; }
.teacher-grid .form-row{ display:grid; gap:6px; padding:14px; border:1px solid var(--line); border-radius:16px; background:linear-gradient(180deg,#fff,#f7f9ff); }
.teacher-grid label{ font-weight:900; font-size:14px; }
.teacher-grid input{ padding:11px 13px; border:2px solid #cbd5e1; border-radius:12px; font-size:18px; font-weight:900; text-align:center; }
.teacher-grid small{ color:var(--muted); font-weight:700; }
.teacher-actions{ display:flex; gap:9px; flex-wrap:wrap; }
.teacher-hint{ margin:14px 0 0; color:var(--muted); font-size:13px; line-height:1.6; }

@media(max-width:860px){
  .teacher-grid{ grid-template-columns:1fr; }
  .teacher-rooms{ grid-template-columns:1fr; }
}

/* ── 교사 모드: 방별 진행 상황 카드 ───────────────────────────── */
.teacher-rooms{ display:grid; grid-template-columns:repeat(auto-fill,minmax(300px,1fr)); gap:12px; }
.t-room{ border:1px solid var(--line); border-radius:18px; padding:14px; background:linear-gradient(180deg,#fff,#f7f9ff); }
.t-room.playing{ border-color:#fbbf24; box-shadow:0 0 0 3px rgba(251,191,36,.16); }
.t-room.done{ border-color:#86efac; box-shadow:0 0 0 3px rgba(134,239,172,.18); }
.t-room-head{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin-bottom:10px; }
.t-room-no{ font-size:17px; }
.t-badge{ font-size:11.5px; font-weight:900; padding:3px 9px; border-radius:999px; background:#e2e8f0; color:#475569; }
.t-badge.playing{ background:#fef3c7; color:#92400e; }
.t-badge.done{ background:#dcfce7; color:#166534; }
.t-meta{ font-size:12px; color:var(--muted); font-weight:700; }
.t-turn{ font-size:12px; font-weight:900; color:#b45309; background:#fffbeb; border:1px solid #fde68a; padding:2px 8px; border-radius:999px; }
.t-players{ list-style:none; margin:0; padding:0; display:grid; gap:5px; }
.t-players li{ display:grid; grid-template-columns:22px minmax(0,1fr) 48px 56px; align-items:center; gap:6px;
  padding:7px 9px; border-radius:11px; background:#f1f5f9; font-size:13px; font-weight:800; }
.t-players li.is-lead{ background:linear-gradient(90deg,#fef9c3,#fffbeb); box-shadow:inset 0 0 0 2px #facc15; }
.t-crown{ text-align:center; font-size:14px; }
.t-name{ overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.t-cards{ text-align:right; color:var(--muted); font-weight:700; font-size:12px; }
.t-score{ text-align:right; font-size:14px; }
.t-players li.is-lead .t-score{ color:#a16207; }
.t-empty{ margin:0; color:var(--muted); font-size:13px; font-weight:700; }

/* ── 휴대폰: 6장 한 줄을 유지하되 카드 정보를 간소화 ──────────── */
@media(max-width:430px){
  :root{ --card-w:46px; }
  /* 좁은 화면에서는 손패 카드에 색·기호·도형만 남겨 알아보기 쉽게 */
  .hand .card .content,
  .hand .card .domain{ display:none; }
  .hand .card .card-inner{ justify-content:center; gap:2px; }
  .hand .card .shape-wrap{ min-height:calc(var(--card-w) * .86); }
  .hand .card .shape-svg{ width:calc(var(--card-w) * .8); }
  .hand .card .corner{ font-size:calc(var(--card-w) * .26); }
  .hand{ gap:calc(var(--card-w) * .2) calc(var(--card-w) * .1); }
}
@media(max-width:380px){ :root{ --card-w:41px; } }
@media(max-width:340px){ :root{ --card-w:36px; } }

/* 소리 버튼이 카드를 가리지 않도록 (휴대폰) */
@media(max-width:560px){
  .sound-toggle{ padding:9px; border-radius:50%; font-size:0; gap:0; }
  .sound-toggle span{ font-size:16px; }
  .game-shell{ padding-bottom:64px; }
}

/* 터치 기기: hover 대신 누르는 순간 반응 */
@media (hover:none){
  .hand .card.playable:active{ transform:translateY(-10px) scale(1.06); }
  .mode-pick:active{ transform:scale(.98); }
}

/* ── 어떤 기기에서도 가로로 넘치지 않게 (6장 한 줄은 유지) ────── */
/* 칸이 좁으면 카드가 스스로 줄어들어 가로 스크롤이 생기지 않습니다. */
.hand{ grid-template-columns:repeat(6, minmax(0, var(--card-w))); }
.hand .card{ width:100%; height:auto; aspect-ratio:112 / 164; }
html, body{ max-width:100%; overflow-x:hidden; }


/* ── 교사 모드: 수업 기록 초기화 ──────────────────────────────── */
.teacher-reset-panel{ margin-top:16px; border:1px solid #fecaca; background:linear-gradient(180deg,#fff,#fff7f7); }
.teacher-reset{ display:flex; align-items:center; justify-content:space-between; gap:18px; flex-wrap:wrap; }
.teacher-reset h2{ margin:4px 0 0; }
.teacher-reset .teacher-hint{ max-width:640px; }
.btn.danger.armed{ background:#7f1d1d; animation:resetPulse .9s ease-in-out infinite alternate; }
@keyframes resetPulse{ from{ box-shadow:0 0 0 0 rgba(220,38,38,.45); } to{ box-shadow:0 0 0 8px rgba(220,38,38,0); } }
@media(max-width:640px){ .teacher-reset .btn{ width:100%; } }
