/* ============================================================
   임기 30일 미니게임: 픽셀 아케이드 캐비닛
   모든 클래스는 mg- 접두어. 모서리 둥글림 없음, 번짐 없는 그림자, 평평한 색면.
   폰트: <link href="https://cdn.jsdelivr.net/gh/neodgm/neodgm-webfont@latest/neodgm/style.css">
   ============================================================ */
.mg-root {
  --mg-navy: #0b1f4d; --mg-indigo: #41479f; --mg-red: #b3363b; --mg-paper: #f4f1e8; --mg-ink: #12172b;
  --mg-gold: #e8b83c; --mg-green: #2f9e5b; --mg-dnavy: #07122e; --mg-grey: #8a8f9d; --mg-lind: #7479c9;
  position: fixed; inset: 0; z-index: 900; display: flex; padding: 12px; overflow: auto; overscroll-behavior: contain;
  background-color: rgba(5, 8, 22, .92);
  background-image: repeating-linear-gradient(0deg, rgba(255, 255, 255, .035) 0, rgba(255, 255, 255, .035) 2px, transparent 2px, transparent 4px);
  font-family: 'NeoDunggeunmo', 'Malgun Gothic', 'Apple SD Gothic Neo', monospace;
  font-size: 16px; line-height: 1.45; color: var(--mg-paper); font-weight: 400; letter-spacing: 0;
  -webkit-font-smoothing: none; -webkit-user-select: none; user-select: none; -webkit-tap-highlight-color: transparent;
}
.mg-root *, .mg-root *::before, .mg-root *::after { box-sizing: border-box; }
.mg-root h2, .mg-root p, .mg-root dl, .mg-root dd, .mg-root dt { margin: 0; }
.mg-root button { font-family: inherit; letter-spacing: 0; border-radius: 0; }
.mg-root canvas { image-rendering: -moz-crisp-edges; image-rendering: crisp-edges; image-rendering: pixelated; }

/* ---------- 캐비닛 ---------- */
.mg-cab { position: relative; margin: auto; width: min(760px, 100%); background: var(--mg-ink); border: 3px solid var(--mg-paper); box-shadow: 0 0 0 3px var(--mg-ink), 9px 9px 0 3px #000; outline: none; }
.mg-cab:focus, .mg-cab:focus-visible { outline: none; }
.mg-cab.mg-shake { --mg-dur: .36s; animation: mgCab var(--mg-dur) steps(6) both; }
.mg-head { display: flex; align-items: center; gap: 10px; min-height: 46px; padding: 5px 6px 5px 12px; background: var(--mg-indigo); border-bottom: 3px solid var(--mg-ink); }
.mg-title { flex: none; font-size: 22px; line-height: 1; color: var(--mg-gold); text-shadow: 2px 2px 0 var(--mg-ink); white-space: nowrap; }
.mg-sub { flex: 1; min-width: 0; font-size: 14px; color: #dfe2f7; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.mg-time { flex: none; min-width: 3.4em; text-align: right; font-size: 20px; line-height: 1; color: var(--mg-paper); text-shadow: 2px 2px 0 var(--mg-ink); }
.mg-time.low { color: #ff8b8f; }
.mg-skip { flex: none; padding: 3px 8px; font-size: 13px; min-height: 30px; color: var(--mg-paper); background: var(--mg-navy); border: 2px solid var(--mg-ink); box-shadow: 2px 2px 0 var(--mg-ink); cursor: pointer; }
.mg-skip:hover { background: var(--mg-ink); }
.mg-skip:active { transform: translate(2px, 2px); box-shadow: none; }
.mg-root[data-ph='intro'] .mg-skip, .mg-root[data-ph='result'] .mg-skip { visibility: hidden; }
.mg-bar { position: relative; height: 12px; background: var(--mg-dnavy); border-bottom: 3px solid var(--mg-ink); overflow: hidden; }
.mg-bar i { display: block; height: 100%; width: 100%; background: var(--mg-gold); }
.mg-bar.low i { background: var(--mg-red); }
.mg-bar::after { content: ''; position: absolute; inset: 0; background: repeating-linear-gradient(90deg, transparent 0, transparent 13px, var(--mg-dnavy) 13px, var(--mg-dnavy) 16px); }
.mg-stage { position: relative; min-height: 330px; background: var(--mg-ink); overflow: hidden; }
.mg-foot { display: flex; align-items: center; gap: 8px; padding: 6px 10px; background: var(--mg-ink); border-top: 3px solid var(--mg-indigo); font-size: 14px; color: #b9bed6; line-height: 1.7; }
.mg-hint { flex: 1; min-width: 0; }

/* ---------- 키 캡 · 버튼 ---------- */
.mg-key { display: inline-block; min-width: 1.7em; padding: 0 6px; margin: 0 2px; background: var(--mg-paper); color: var(--mg-ink); border: 2px solid var(--mg-ink); border-bottom-width: 4px; font-size: .85em; line-height: 1.3; text-align: center; font-family: inherit; box-shadow: 0 0 0 1px #000; }
.mg-btn { min-height: 44px; padding: 6px 20px; font-size: 17px; color: var(--mg-ink); background: var(--mg-paper); border: 3px solid var(--mg-ink); box-shadow: 3px 3px 0 var(--mg-ink); cursor: pointer; }
.mg-btn:hover { background: var(--mg-gold); }
.mg-btn:active { transform: translate(3px, 3px); box-shadow: none; }
.mg-btn.pri { background: var(--mg-gold); }
.mg-btn.pri:hover { background: #f6d77a; }
.mg-btn.lock { opacity: .55; }
.mg-btn:disabled { opacity: .45; cursor: not-allowed; box-shadow: none; transform: none; }
.mg-root button:focus-visible, .mg-root .mg-focus { outline: 3px solid var(--mg-red); outline-offset: 2px; }

/* ---------- 카드 (안내 · 결과) ---------- */
.mg-card { position: absolute; inset: 0; z-index: 20; display: flex; padding: 10px; overflow: auto; background: rgba(7, 13, 36, .74); }
.mg-panel { margin: auto; width: min(470px, 100%); padding: 14px 16px 16px; text-align: center; color: var(--mg-ink); background: var(--mg-paper); border: 3px solid var(--mg-ink); box-shadow: 5px 5px 0 #000; }
.mg-h { font-size: 30px; line-height: 1.15; color: var(--mg-navy); }
.mg-ctx { margin-top: 2px; font-size: 14px; color: #5b6180; }
.mg-rule { margin: 10px 0 8px; font-size: 17px; line-height: 1.5; word-break: keep-all; }
.mg-keys { display: flex; flex-wrap: wrap; justify-content: center; gap: 4px 12px; margin: 8px 0 12px; padding: 7px 8px; font-size: 14px; background: #e3dfd0; border: 2px dashed #9a968a; }
.mg-btns { display: flex; justify-content: center; flex-wrap: wrap; gap: 12px; margin-top: 8px; }

.mg-count { position: absolute; inset: 0; z-index: 30; display: flex; align-items: center; justify-content: center; pointer-events: none; }
.mg-count b { --mg-dur: .5s; font-weight: 400; font-size: 120px; line-height: 1; color: var(--mg-gold); text-shadow: 6px 6px 0 var(--mg-ink), -2px -2px 0 var(--mg-ink), 2px -2px 0 var(--mg-ink), -2px 2px 0 var(--mg-ink); animation: mgPop var(--mg-dur) steps(5) both; }
.mg-count b.go { font-size: 64px; color: var(--mg-paper); }

.mg-res .mg-panel { padding-top: 12px; }
.mg-stampbox { position: relative; width: 112px; height: 112px; margin: 0 auto 8px; border: 3px dashed #b3ae9d; }
.mg-stamp { --mg-dur: .42s; position: absolute; inset: -3px; display: none; align-items: center; justify-content: center; font-size: 82px; line-height: 1; color: var(--mg-paper); background: var(--mg-indigo); border: 4px solid var(--mg-ink); box-shadow: 5px 5px 0 var(--mg-ink); text-shadow: 3px 3px 0 var(--mg-ink); transform: rotate(-7deg); }
.mg-stamp.in { display: flex; animation: mgStamp var(--mg-dur) steps(6) both; }
.mg-stamp.g-S { background: var(--mg-gold); color: var(--mg-ink); text-shadow: 3px 3px 0 #f6e3a6; }
.mg-stamp.g-A { background: var(--mg-green); }
.mg-stamp.g-B { background: var(--mg-indigo); }
.mg-stamp.g-C { background: #6b7090; }
.mg-stamp.g-F { background: var(--mg-red); }
.mg-resline { margin: 4px 0 8px; font-size: 17px; line-height: 1.5; word-break: keep-all; }
.mg-detail { display: flex; flex-wrap: wrap; justify-content: center; gap: 6px; margin: 6px 0 8px; }
.mg-detail div { min-width: 82px; padding: 3px 8px 4px; background: #e3dfd0; border: 2px solid var(--mg-ink); }
.mg-detail dt { font-size: 12px; color: #5b6180; line-height: 1.3; }
.mg-detail dd { font-size: 20px; line-height: 1.2; }
.mg-note { margin: 2px 0 6px; font-size: 14px; color: var(--mg-red); }

.mg-pause { position: absolute; inset: 0; z-index: 50; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px; background: rgba(7, 13, 36, .88); cursor: pointer; text-align: center; padding: 10px; }
.mg-pause b { font-weight: 400; font-size: 34px; color: var(--mg-gold); text-shadow: 3px 3px 0 var(--mg-ink); }
.mg-flash { --mg-dur: .3s; position: absolute; inset: 0; z-index: 25; pointer-events: none; background: var(--mg-red); opacity: 0; animation: mgFlash var(--mg-dur) steps(3) both; }
.mg-flash.w { background: #fff; }

/* ============================================================
   1. 연설
   ============================================================ */
.mg-sp { display: flex; flex-direction: column; background: var(--mg-ink); touch-action: manipulation; cursor: pointer; }
.mg-sp-scene { position: relative; isolation: isolate; height: clamp(150px, 34vw, 280px); overflow: hidden; background: #0a1236; border-bottom: 3px solid var(--mg-ink); }
.mg-sp-hall { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: 50% 100%; }
.mg-sp-say { --mg-dur: 1.1s; position: absolute; z-index: 3; transform: translate(-50%, -100%); padding: 1px 7px; font-size: 14px; white-space: nowrap; color: var(--mg-ink); background: var(--mg-paper); border: 2px solid var(--mg-ink); box-shadow: 2px 2px 0 var(--mg-ink); animation: mgRise var(--mg-dur) steps(9) forwards; pointer-events: none; }
.mg-sp-say.bad { background: #f2c4c6; }
.mg-sp-chat, .mg-sp-post { position: absolute; inset: 0; display: flex; flex-direction: column; }
.mg-sp-chathead { display: flex; justify-content: space-between; gap: 8px; padding: 3px 10px; font-size: 14px; color: var(--mg-ink); background: var(--mg-gold); border-bottom: 3px solid var(--mg-ink); }
.mg-ven-discord .mg-sp-chathead { color: var(--mg-paper); background: var(--mg-indigo); }
.mg-sp-chat { background: #8fa4c7; }
.mg-ven-discord .mg-sp-chat { background: #1e2140; }
.mg-sp-list { flex: 1; min-height: 0; overflow: hidden; display: flex; flex-direction: column; justify-content: flex-end; gap: 4px; padding: 6px 8px; }
.mg-sp-msg { --mg-dur: .24s; display: flex; align-items: flex-start; gap: 6px; max-width: 88%; animation: mgMsg var(--mg-dur) steps(3) both; }
.mg-sp-msg.me { align-self: flex-end; flex-direction: row-reverse; }
.mg-sp-av { flex: none; width: 22px; height: 22px; border: 2px solid var(--mg-ink); }
.mg-sp-nm { display: block; font-size: 11px; line-height: 1.1; color: #26304f; opacity: .85; }
.mg-ven-discord .mg-sp-nm { color: #aab0d8; }
.mg-sp-bub { display: inline-block; padding: 1px 8px 2px; font-size: 14px; line-height: 1.35; color: var(--mg-ink); background: var(--mg-paper); border: 2px solid var(--mg-ink); box-shadow: 2px 2px 0 var(--mg-ink); word-break: keep-all; }
.mg-sp-msg.me .mg-sp-bub { background: #ffe27a; }
.mg-sp-msg.fail .mg-sp-bub { background: #c9cbd6; color: #5b6180; }
.mg-ven-discord .mg-sp-msg .mg-sp-bub { color: var(--mg-paper); background: #30345e; border-color: #0d0f24; box-shadow: none; }
.mg-ven-discord .mg-sp-msg.me .mg-sp-bub { background: var(--mg-indigo); }
.mg-ven-discord .mg-sp-msg.fail .mg-sp-bub { background: #2a2c46; color: #8a8fb3; }
.mg-sp-post { background: var(--mg-paper); color: var(--mg-ink); }
.mg-sp-phead { display: flex; justify-content: space-between; gap: 8px; padding: 3px 10px; font-size: 14px; color: var(--mg-paper); background: var(--mg-green); border-bottom: 3px solid var(--mg-ink); }
.mg-ven-cafe .mg-sp-phead { background: var(--mg-red); }
.mg-sp-ptitle { padding: 3px 10px; font-size: 16px; line-height: 1.35; border-bottom: 2px solid var(--mg-ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.mg-sp-ptitle small { color: #6a6f88; margin-right: 6px; font-size: 13px; }
.mg-sp-pbody { flex: 1; min-height: 0; overflow: hidden; display: flex; flex-direction: column; justify-content: flex-end; gap: 1px; padding: 4px 10px; font-size: 14px; line-height: 1.4; }
.mg-sp-pline { --mg-dur: .24s; animation: mgMsg var(--mg-dur) steps(3) both; word-break: keep-all; }
.mg-sp-pfoot { display: flex; align-items: center; gap: 10px; padding: 2px 10px 3px; font-size: 13px; background: #e3dfd0; border-top: 2px solid var(--mg-ink); }
.mg-sp-pfoot b { font-weight: 400; color: var(--mg-red); }
.mg-sp-cmt { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: #4b5170; text-align: right; }

.mg-sp-prompt { position: relative; min-height: 72px; padding: 9px 12px 8px; font-size: 19px; line-height: 1.4; word-break: keep-all; border-bottom: 3px solid var(--mg-ink); }
.mg-sp-prompt .tag { position: absolute; right: 8px; top: 3px; font-size: 12px; opacity: .75; }
.mg-sp-rest { opacity: .32; }
.mg-sp-prompt.floor { color: #7dffa3; background: #03170b; }
.mg-sp-prompt.floor::before { content: '원고'; display: block; font-size: 12px; opacity: .6; line-height: 1.2; }
.mg-sp-prompt.chat { color: var(--mg-ink); background: var(--mg-paper); }
.mg-sp-prompt.chat::before { content: '입력'; display: block; font-size: 12px; color: #6a6f88; line-height: 1.2; }
.mg-sp-prompt.post { color: var(--mg-ink); background: var(--mg-paper); background-image: repeating-linear-gradient(0deg, transparent 0, transparent 25px, #d5d0be 25px, #d5d0be 27px); }
.mg-sp-prompt.post::before { content: '본문'; display: block; font-size: 12px; color: #6a6f88; line-height: 1.2; }

.mg-sp-meter { position: relative; height: 38px; margin: 16px 14px 6px; background: var(--mg-dnavy); border: 3px solid var(--mg-paper); box-shadow: 3px 3px 0 #000; touch-action: manipulation; }
.mg-sp-meter::before { content: ''; position: absolute; inset: 0; background: repeating-linear-gradient(90deg, transparent 0, transparent 9.6%, rgba(255, 255, 255, .13) 9.6%, rgba(255, 255, 255, .13) 10%); pointer-events: none; }
.mg-sp-zone { --mg-dur: .3s; position: absolute; top: 0; bottom: 0; background: var(--mg-green); border-left: 3px solid #a6f0c5; border-right: 3px solid #a6f0c5; background-image: repeating-linear-gradient(135deg, rgba(255, 255, 255, .22) 0, rgba(255, 255, 255, .22) 4px, transparent 4px, transparent 8px); }
.mg-sp-zone.shake { animation: mgZone var(--mg-dur) steps(6); background-color: var(--mg-red); border-color: #f0a2a5; }
.mg-sp-zone.ok { background-color: var(--mg-gold); border-color: #fff2bf; }
.mg-sp-marker { --mg-dur: .46s; position: absolute; top: -9px; bottom: -9px; width: 10px; margin-left: -5px; background: var(--mg-paper); border: 3px solid var(--mg-ink); box-shadow: 0 0 0 2px var(--mg-gold); animation: mgPulse var(--mg-dur) steps(2) infinite; }
.mg-sp-marker::after { content: ''; position: absolute; left: 50%; top: -11px; margin-left: -6px; border: 6px solid transparent; border-top-color: var(--mg-gold); border-bottom: 0; }
.mg-sp-meter.off .mg-sp-marker { opacity: .3; animation: none; }
.mg-sp-meter.off .mg-sp-zone { opacity: .5; }
.mg-sp-status { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 4px 14px 10px; font-size: 14px; }
.mg-sp-status span { display: inline-flex; align-items: center; gap: 6px; }
.mg-pips { display: inline-flex; gap: 3px; }
.mg-pips i { display: block; width: 14px; height: 14px; background: var(--mg-dnavy); border: 2px solid #6b7090; }
.mg-pips i.on { background: var(--mg-green); border-color: #a6f0c5; }
.mg-pips.bad i.on { background: var(--mg-red); border-color: #f0a2a5; }
.mg-sp-combo { min-width: 5em; text-align: center; color: var(--mg-gold); }

/* ============================================================
   2. 악수
   ============================================================ */
.mg-hs-hud { display: flex; align-items: center; flex-wrap: wrap; gap: 4px 14px; padding: 5px 10px; font-size: 15px; background: var(--mg-ink); border-bottom: 3px solid var(--mg-indigo); }
.mg-hs-hud b { font-weight: 400; color: var(--mg-gold); }
.mg-hs-hud .neg b { color: #ff8b8f; }
.mg-hs-scene { position: relative; isolation: isolate; aspect-ratio: 192 / 112; overflow: hidden; cursor: crosshair; touch-action: manipulation; background: #7f9fd6; }
.mg-hs-bg { position: absolute; inset: 0; width: 100%; height: 100%; }
.mg-hs-reach { position: absolute; top: 56%; bottom: 0; border-left: 3px dashed rgba(244, 241, 232, .9); border-right: 3px dashed rgba(244, 241, 232, .9); background: repeating-linear-gradient(0deg, rgba(232, 184, 60, .2) 0, rgba(232, 184, 60, .2) 4px, transparent 4px, transparent 8px); pointer-events: none; }
.mg-hs-kb { position: absolute; top: 56%; bottom: 0; background: rgba(244, 241, 232, .13); border-left: 2px solid rgba(244, 241, 232, .38); border-right: 2px solid rgba(244, 241, 232, .38); pointer-events: none; }
.mg-hs-reach::after { content: '악수 거리'; position: absolute; left: 0; right: 0; bottom: 1px; text-align: center; font-size: 12px; color: var(--mg-paper); text-shadow: 1px 1px 0 var(--mg-ink); }
.mg-hs-scene { font-size: clamp(11px, 2.3vw, 16px); }
.mg-hs-legend { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 6px; padding: 8px; background: var(--mg-ink); border-top: 3px solid var(--mg-indigo); }
.mg-hs-lg { display: flex; align-items: center; gap: 8px; min-width: 0; padding: 2px 8px; font-size: 14px; background: #1b2350; border: 2px solid #3a4286; }
.mg-hs-lg canvas { flex: none; height: 38px; width: auto; }
.mg-hs-lg b { font-weight: 400; color: var(--mg-gold); }
.mg-hs-lg.neg b { color: #ff8b8f; }
.mg-hs-ent { position: absolute; pointer-events: none; }
.mg-hs-ent canvas { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain; object-position: 50% 100%; }
.mg-hs-ent.bad canvas { filter: none; }
.mg-hs-ent.shk { --mg-dur: .3s; animation: mgJolt var(--mg-dur) steps(4); }
.mg-hs-tag { position: absolute; left: 50%; top: -3%; transform: translate(-50%, -100%); padding: 0 .35em; line-height: 1.25; font-size: .9em; color: var(--mg-ink); background: var(--mg-gold); border: 2px solid var(--mg-ink); white-space: nowrap; }
.mg-hs-tag.neg { color: #fff; background: var(--mg-red); }
.mg-hs-mark { --mg-dur: .5s; position: absolute; left: 50%; top: -4%; margin-left: -.45em; border: .45em solid transparent; border-top: .6em solid var(--mg-gold); border-bottom: 0; filter: drop-shadow(0 0 0 var(--mg-ink)); animation: mgBob var(--mg-dur) steps(2) infinite; display: none; }
.mg-hs-ent.in .mg-hs-mark { display: block; }
.mg-hs-ent.hastag .mg-hs-mark { margin-top: -1.9em; }
.mg-hs-pop { --mg-dur: .85s; position: absolute; z-index: 400; transform: translate(-50%, -100%); font-size: 1.5em; line-height: 1; white-space: nowrap; color: var(--mg-gold); text-shadow: 2px 0 0 var(--mg-ink), -2px 0 0 var(--mg-ink), 0 2px 0 var(--mg-ink), 0 -2px 0 var(--mg-ink); animation: mgRise var(--mg-dur) steps(9) forwards; pointer-events: none; }
.mg-hs-pop.neg { color: #ff8b8f; }
.mg-hs-pop.far { font-size: 1em; color: var(--mg-paper); }
.mg-hs-heart { --mg-dur: .8s; position: absolute; z-index: 400; width: 4.2%; aspect-ratio: 1; transform: translate(-50%, -100%); animation: mgRise var(--mg-dur) steps(8) forwards; pointer-events: none; }
.mg-hs-heart canvas { width: 100%; height: 100%; display: block; }
.mg-hs-flash { --mg-dur: .35s; position: absolute; z-index: 300; width: 18%; aspect-ratio: 1; transform: translate(-50%, -50%); background: #fff; animation: mgFlashBurst var(--mg-dur) steps(4) forwards; pointer-events: none; }

/* ============================================================
   3. 무제한 토론
   ============================================================ */
.mg-fb { display: flex; flex-direction: column; background: var(--mg-ink); touch-action: none; cursor: pointer; }
.mg-fb-scene { position: relative; isolation: isolate; flex: none; aspect-ratio: 160 / 96; max-height: 250px; width: 100%; overflow: hidden; background: #0a1236; }
.mg-fb-scene canvas { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: 50% 100%; }
.mg-fb-rounds { position: absolute; left: 8px; top: 8px; z-index: 3; display: flex; gap: 5px; }
.mg-fb-rounds b { position: relative; width: 44px; height: 24px; overflow: hidden; font-weight: 400; font-size: 13px; line-height: 20px; text-align: center; color: #aab0d8; background: var(--mg-dnavy); border: 2px solid #6b7090; }
.mg-fb-rounds b i { position: absolute; left: 0; top: 0; bottom: 0; width: 0; background: var(--mg-indigo); }
.mg-fb-rounds b span { position: relative; text-shadow: 1px 1px 0 var(--mg-ink); color: var(--mg-paper); }
.mg-fb-rounds b.on { border-color: var(--mg-paper); }
.mg-fb-rounds b.on i { background: var(--mg-gold); }
.mg-fb-rounds b.done { color: var(--mg-paper); border-color: var(--mg-green); }
.mg-fb-rounds b.done i { width: 100% !important; background: var(--mg-green); }
.mg-fb-state { position: absolute; left: 0; right: 0; bottom: 6px; z-index: 3; text-align: center; pointer-events: none; }
.mg-fb-state span { display: inline-block; padding: 1px 12px; font-size: 16px; color: var(--mg-paper); background: rgba(7, 13, 36, .88); border: 2px solid var(--mg-paper); }
.mg-fb-state.talk span { color: var(--mg-ink); background: var(--mg-gold); border-color: var(--mg-ink); }
.mg-fb-state.stun span { color: #fff; background: var(--mg-red); border-color: var(--mg-ink); }
.mg-fb-banner { --mg-dur: 1s; position: absolute; left: 0; right: 0; top: 36%; z-index: 4; text-align: center; font-size: 40px; line-height: 1; color: var(--mg-gold); text-shadow: 4px 4px 0 var(--mg-ink), -2px -2px 0 var(--mg-ink), 2px -2px 0 var(--mg-ink), -2px 2px 0 var(--mg-ink); pointer-events: none; animation: mgBanner var(--mg-dur) steps(10) forwards; }
.mg-fb-gauges { flex: none; display: flex; justify-content: center; gap: 12px; height: 168px; padding: 10px 10px 6px; background: var(--mg-ink); border-top: 3px solid var(--mg-indigo); }
.mg-fb-g { display: flex; flex-direction: column; width: 58px; }
.mg-fb-track { position: relative; flex: 1; min-height: 0; background: var(--mg-dnavy); border: 3px solid var(--mg-paper); }
.mg-fb-track::before { content: ''; position: absolute; inset: 0; background: repeating-linear-gradient(0deg, transparent 0, transparent 9.6%, rgba(255, 255, 255, .13) 9.6%, rgba(255, 255, 255, .13) 10%); pointer-events: none; }
.mg-fb-fill { position: absolute; left: 0; right: 0; bottom: 0; height: 0; background: var(--mg-lind); }
.mg-fb-band { position: absolute; left: -3px; right: -3px; background: rgba(47, 158, 91, .55); border-top: 3px solid #a6f0c5; border-bottom: 3px solid #a6f0c5; background-image: repeating-linear-gradient(135deg, rgba(255, 255, 255, .2) 0, rgba(255, 255, 255, .2) 4px, transparent 4px, transparent 8px); }
.mg-fb-band.on { background-color: rgba(232, 184, 60, .75); border-color: #fff2bf; }
.mg-fb-mark { position: absolute; left: -6px; right: -6px; height: 6px; margin-bottom: -3px; background: var(--mg-paper); border: 2px solid var(--mg-ink); }
.mg-fb-thr { position: absolute; left: -5px; right: -5px; height: 0; border-top: 3px dashed var(--mg-red); }
.mg-fb-g.st .mg-fb-fill { background: var(--mg-green); }
.mg-fb-g.st.mid .mg-fb-fill { background: var(--mg-gold); }
.mg-fb-g.st.low .mg-fb-fill { background: var(--mg-red); }
.mg-fb-g.at .mg-fb-fill { background: var(--mg-indigo); }
.mg-fb-g.at.low .mg-fb-fill { background: var(--mg-red); }
.mg-fb-lab { margin-top: 4px; text-align: center; font-size: 14px; line-height: 1.2; }
@media (min-width: 640px) {
  .mg-fb { flex-direction: row; height: 316px; }
  .mg-fb-scene { flex: 1 1 auto; width: auto; aspect-ratio: auto; max-height: none; height: 100%; min-width: 0; }
  .mg-fb-gauges { flex-direction: row; height: auto; border-top: 0; border-left: 3px solid var(--mg-indigo); padding: 12px 12px 8px; gap: 14px; }
  .mg-fb-g { width: 60px; }
}

/* ============================================================
   4. 설득 · 서명
   ============================================================ */
.mg-pz { display: flex; flex-direction: column; gap: 10px; padding: 10px; background: #1b2350; background-image: repeating-linear-gradient(90deg, transparent 0, transparent 22px, rgba(255, 255, 255, .03) 22px, rgba(255, 255, 255, .03) 24px); touch-action: manipulation; }
.mg-pz-row { display: grid; gap: 10px; }
.mg-pz-targets { grid-template-columns: repeat(var(--n, 3), minmax(0, 1fr)); }
.mg-pz-hand { grid-template-columns: repeat(var(--n, 4), minmax(0, 1fr)); }
.mg-pz-t { position: relative; display: flex; flex-direction: column; align-items: center; gap: 4px; min-width: 0; padding: 8px 8px 8px; color: var(--mg-ink); background: var(--mg-paper); border: 3px solid var(--mg-ink); box-shadow: 4px 4px 0 #000; cursor: pointer; text-align: center; }
.mg-pz-t.pick { background: #fff4c9; border-color: var(--mg-gold); box-shadow: 4px 4px 0 #000, 0 0 0 3px var(--mg-gold); }
.mg-pz-t.focus, .mg-pz-card.focus, .mg-pz-go.focus { outline: 3px solid var(--mg-red); outline-offset: 2px; }
.mg-pz-port { width: 72px; height: 72px; background: #c9d3ee; border: 3px solid var(--mg-ink); }
.mg-pz-port.px { width: 80px; height: 80px; }
.mg-pz-port canvas { display: block; width: 100%; height: 100%; }
.mg-pz-name { font-size: 15px; line-height: 1.2; }
.mg-pz-say { position: relative; width: 100%; min-height: 3.1em; padding: 3px 6px; font-size: 13px; line-height: 1.35; word-break: keep-all; color: var(--mg-ink); background: #e3dfd0; border: 2px solid var(--mg-ink); }
.mg-pz-say::before { content: ''; position: absolute; left: 50%; top: -9px; margin-left: -6px; border: 6px solid transparent; border-bottom-color: var(--mg-ink); border-top: 0; }
.mg-pz-slot { display: flex; align-items: center; justify-content: center; gap: 6px; width: 100%; min-height: 40px; padding: 2px 4px; font-size: 13px; color: #6a6f88; background: transparent; border: 3px dashed #9a968a; }
.mg-pz-slot.full { color: var(--mg-ink); background: #fff; border: 3px solid var(--mg-ink); }
.mg-pz-slot canvas { width: 22px; height: 22px; flex: none; }
.mg-pz-stamp { --mg-dur: .38s; position: absolute; left: 50%; top: 84%; z-index: 4; display: none; padding: 0 12px; font-size: 28px; line-height: 1.25; color: #fff; background: var(--mg-green); border: 4px solid var(--mg-ink); box-shadow: 4px 4px 0 var(--mg-ink); transform: translate(-50%, -50%) rotate(-9deg); text-shadow: 2px 2px 0 var(--mg-ink); }
.mg-pz-stamp.no { background: var(--mg-red); }
.mg-pz-stamp.in { display: block; animation: mgStampC var(--mg-dur) steps(5) both; }
.mg-pz-t.signed { background: #d8f3e3; }
.mg-pz-t.refused { background: #f5d6d7; }
.mg-pz-card { position: relative; display: flex; flex-direction: column; align-items: center; gap: 3px; min-width: 0; padding: 8px 4px 7px; color: var(--mg-ink); background: var(--mg-paper); border: 3px solid var(--mg-ink); box-shadow: 4px 4px 0 #000; cursor: pointer; text-align: center; touch-action: none; }
.mg-pz-card:hover { background: #fff4c9; }
.mg-pz-card.sel { background: var(--mg-gold); transform: translateY(-6px); box-shadow: 4px 10px 0 #000; }
.mg-pz-card.used { opacity: .28; box-shadow: none; cursor: default; background: #8a8f9d; }
.mg-pz-card .ic { display: block; width: 36px; height: 36px; background: #d9d4c3; border: 2px solid var(--mg-ink); }
.mg-pz-card .ic canvas { display: block; width: 100%; height: 100%; }
.mg-pz-cn { font-size: 15px; line-height: 1.2; }
.mg-pz-card kbd { position: absolute; left: 3px; top: 2px; font-family: inherit; font-size: 11px; color: #6a6f88; }
.mg-pz-go { align-self: center; }
.mg-pz-msg { min-height: 1.5em; text-align: center; font-size: 14px; color: #c9cde6; }
.mg-pz-ghost { position: fixed; z-index: 1000; left: 0; top: 0; width: 84px; padding: 6px 4px; pointer-events: none; text-align: center; font-size: 14px; color: var(--mg-ink); background: var(--mg-gold); border: 3px solid var(--mg-ink); box-shadow: 4px 4px 0 #000; transform: translate(-50%, -60%) rotate(-5deg); }
.mg-pz-ghost .ic { display: block; width: 30px; height: 30px; margin: 0 auto 2px; background: #d9d4c3; border: 2px solid var(--mg-ink); }
.mg-pz-ghost canvas { display: block; width: 100%; height: 100%; }

/* ---------- 키프레임 (모두 steps 로 끊어서 움직인다) ---------- */
@keyframes mgPop { 0% { transform: scale(2.4); opacity: 0; } 40% { transform: scale(1.2); opacity: 1; } 100% { transform: scale(1); opacity: 1; } }
@keyframes mgStamp { 0% { transform: scale(3.4) rotate(-22deg); opacity: 0; } 30% { opacity: 1; } 100% { transform: scale(1) rotate(-7deg); opacity: 1; } }
@keyframes mgStampC { 0% { transform: translate(-50%, -50%) scale(3) rotate(-24deg); opacity: 0; } 35% { opacity: 1; } 100% { transform: translate(-50%, -50%) scale(1) rotate(-9deg); opacity: 1; } }
@keyframes mgCab { 0%, 100% { transform: none; } 20% { transform: translate(-6px, 3px); } 40% { transform: translate(5px, -3px); } 60% { transform: translate(-4px, 2px); } 80% { transform: translate(3px, -1px); } }
@keyframes mgPulse { 0% { transform: scaleY(1); } 100% { transform: scaleY(1.14); } }
@keyframes mgZone { 0%, 100% { transform: none; } 17% { transform: translateX(-6px); } 34% { transform: translateX(6px); } 51% { transform: translateX(-5px); } 68% { transform: translateX(5px); } 85% { transform: translateX(-2px); } }
@keyframes mgRise { 0% { transform: translate(-50%, -100%); opacity: 1; } 70% { opacity: 1; } 100% { transform: translate(-50%, calc(-100% - 28px)); opacity: 0; } }
@keyframes mgMsg { 0% { transform: translateY(10px); opacity: 0; } 100% { transform: none; opacity: 1; } }
@keyframes mgFlash { 0% { opacity: .55; } 100% { opacity: 0; } }
@keyframes mgFlashBurst { 0% { transform: translate(-50%, -50%) scale(.4); opacity: 1; } 100% { transform: translate(-50%, -50%) scale(2.2); opacity: 0; } }
@keyframes mgJolt { 0%, 100% { transform: none; } 25% { transform: translateX(-4px); } 75% { transform: translateX(4px); } }
@keyframes mgBob { 0% { transform: translateY(0); } 100% { transform: translateY(-4px); } }
@keyframes mgBanner { 0% { transform: scale(2); opacity: 0; } 20% { transform: scale(1); opacity: 1; } 75% { opacity: 1; } 100% { opacity: 0; } }

/* ---------- 좁은 화면 ---------- */
@media (max-width: 560px) {
  .mg-root { padding: 6px; font-size: 15px; }
  .mg-title { font-size: 19px; }
  .mg-sub { font-size: 13px; }
  .mg-h { font-size: 26px; }
  .mg-rule, .mg-resline { font-size: 16px; }
  .mg-stage { min-height: 340px; }
  .mg-sp-prompt { font-size: 17px; min-height: 76px; }
  .mg-sp-meter { margin: 16px 12px 6px; height: 40px; }
  .mg-count b { font-size: 96px; }
  .mg-pz { padding: 8px; gap: 8px; }
  .mg-pz-row { gap: 6px; }
  .mg-pz-targets { grid-template-columns: 1fr; }
  .mg-pz-port { width: 48px; height: 48px; }
  .mg-pz-port.px { width: 60px; height: 60px; }
  .mg-pz-t { display: grid; grid-template-columns: 60px 1fr 96px; grid-template-areas: 'port name slot' 'port say slot'; align-items: center; justify-items: stretch; gap: 2px 8px; text-align: left; padding: 6px 8px; }
  .mg-pz-port { grid-area: port; }
  .mg-pz-name { grid-area: name; }
  .mg-pz-say { grid-area: say; min-height: 0; }
  .mg-pz-say::before { display: none; }
  .mg-pz-slot { grid-area: slot; min-height: 52px; flex-direction: column; font-size: 12px; gap: 2px; }
  .mg-pz-stamp { top: 50%; left: 78%; font-size: 20px; }
  .mg-pz-hand { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .mg-pz-card { flex-direction: row; justify-content: flex-start; gap: 8px; padding: 6px 8px; text-align: left; }
  .mg-pz-card .ic { width: 30px; height: 30px; flex: none; }
  .mg-pz-card kbd { display: none; }
  .mg-hs-legend { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* ---------- 모션 줄이기: 끄지 않고 느리게 ---------- */
@media (prefers-reduced-motion: reduce) {
  .mg-root *, .mg-root *::before, .mg-root *::after { animation-duration: calc(var(--mg-dur, .5s) * 2.2) !important; transition-duration: .2s !important; }
  .mg-cab.mg-shake, .mg-flash, .mg-hs-flash, .mg-hs-ent.shk { animation: none !important; }
  .mg-sp-marker, .mg-hs-mark { animation-duration: 1.1s !important; }
}
