:root{
  --ink:#12151A;
  --paper:#F4F4F1;
  --card:#FFFFFF;
  --line:#DCDCD6;
  --blue:#0B4CFF;
  --red:#DC2828;
  --muted:#6B7079;
  --body:#33383F;
  --field:#F4F4F1;          /* 게임판 배경: 테마와 무관하게 고정 (색 인지 공정성) */
  --gap:clamp(6px,1.6vw,10px);
}
@media (prefers-color-scheme:dark){
  :root{
    --ink:#F0F0EC; --paper:#15171B; --card:#1D2026; --line:#31353D;
    --blue:#5B87FF; --red:#FF6B6B; --muted:#9AA0AA; --body:#C8CCD2;
  }
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0}
body{
  background:var(--paper);color:var(--ink);
  font-family:Pretendard,-apple-system,BlinkMacSystemFont,"Segoe UI",system-ui,sans-serif;
  font-size:16px;line-height:1.5;-webkit-font-smoothing:antialiased;overscroll-behavior-y:none;
}
a{color:inherit}
.wrap{max-width:560px;margin:0 auto;padding:0 18px 64px}
.wrap.wide{max-width:660px}

/* header */
header{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:16px 0 10px}
.brand{display:flex;align-items:baseline;gap:8px;font-weight:800;letter-spacing:-.03em;font-size:19px;text-decoration:none}
.brand i{display:inline-block;width:11px;height:11px;background:var(--blue);font-style:normal}
.brand small{font-weight:500;font-size:12px;color:var(--muted);letter-spacing:0}
.hcontrols{display:flex;gap:8px;align-items:center}
.lang{display:flex;border:1px solid var(--line);background:var(--card)}
.lang button,.icobtn{border:0;background:none;font:inherit;font-size:12px;font-weight:600;color:var(--muted);padding:5px 9px;cursor:pointer}
.lang button[aria-pressed="true"]{background:var(--ink);color:var(--paper)}
.icobtn{border:1px solid var(--line);background:var(--card);font-size:14px;line-height:1;padding:6px 8px}
.icobtn[aria-pressed="false"]{opacity:.45}

/* hero */
.chart{padding:30px 0 26px;text-align:center}
.chart p{margin:0;font-weight:800;letter-spacing:-.05em;line-height:1.02}
.chart .l1{font-size:clamp(38px,11.5vw,62px)}
.chart .l2{font-size:clamp(21px,6.4vw,33px);margin-top:4px}
.chart .l3{font-size:clamp(13px,3.6vw,17px);margin-top:10px;font-weight:500;color:var(--muted);letter-spacing:-.01em}
.chart .rule{width:52px;height:2px;background:var(--ink);margin:20px auto 0}

.modes{display:grid;gap:10px;margin-top:22px}
.btn{display:block;width:100%;border:1px solid var(--ink);background:var(--card);font:inherit;font-weight:700;
  color:var(--ink);padding:15px 16px;cursor:pointer;text-align:left;border-radius:2px}
.btn:hover{filter:brightness(.97)}
.btn:focus-visible{outline:3px solid var(--blue);outline-offset:2px}
.btn.primary{background:var(--blue);border-color:var(--blue);color:#fff}
.btn .sub{display:block;font-weight:500;font-size:12.5px;opacity:.72;margin-top:3px}
.btn .tag{float:right;font-size:12px;font-weight:600;opacity:.8}

.stats{display:grid;grid-template-columns:repeat(3,1fr);border:1px solid var(--line);background:var(--card);margin-top:18px}
.stats div{padding:12px 8px;text-align:center;border-right:1px solid var(--line)}
.stats div:last-child{border-right:0}
.stats b{display:block;font-size:21px;font-weight:800;letter-spacing:-.03em}
.stats span{font-size:11.5px;color:var(--muted)}

/* game */
#game{display:none;padding-top:6px}
.hud{display:flex;align-items:center;justify-content:space-between;font-weight:700;font-size:14px}
.hud .lv{color:var(--muted);font-weight:600}
.hud .sc{font-size:22px;letter-spacing:-.03em;font-variant-numeric:tabular-nums}
.combo{display:inline-block;margin-left:8px;font-size:12px;font-weight:800;color:var(--blue);opacity:0;transition:opacity .15s}
.combo.on{opacity:1}
.timebar{height:4px;background:var(--line);margin:10px 0 14px;position:relative;overflow:hidden}
.timebar i{position:absolute;inset:0 auto 0 0;background:var(--blue);width:100%;display:block}
.timebar.low i{background:var(--red)}
.timebar.low{animation:pulse .6s infinite}
@keyframes pulse{50%{opacity:.45}}

.field{background:var(--field);padding:var(--gap);border-radius:4px}
#grid{display:grid;gap:var(--gap);width:100%;aspect-ratio:1;touch-action:manipulation}
#grid button{border:0;padding:0;border-radius:3px;cursor:pointer;transition:transform .07s ease,filter .07s ease}
#grid button:active{transform:scale(.96)}
#grid button:focus-visible{outline:3px solid #12151A;outline-offset:2px}
#grid button.miss{filter:brightness(.55) saturate(.4)}
#grid button.nudge{animation:nudge 1.1s ease-in-out infinite}
@keyframes nudge{50%{transform:scale(.88)}}
#grid.shake{animation:shake .22s}
@keyframes shake{25%{transform:translateX(-7px)}75%{transform:translateX(7px)}}
.hint{text-align:center;font-size:12.5px;color:var(--muted);margin-top:14px;min-height:18px}

/* result */
#result{display:none;padding-top:18px}
.card{border:1px solid var(--ink);background:var(--card);border-radius:2px;padding:22px 20px}
.bigscore{font-size:clamp(52px,17vw,80px);font-weight:800;letter-spacing:-.055em;line-height:.95;font-variant-numeric:tabular-nums}
.scorelabel{font-size:12.5px;color:var(--muted);margin-top:4px}
.rank{margin-top:16px;padding-top:16px;border-top:1px solid var(--line);font-size:14.5px;font-weight:600}
.rank em{font-style:normal;color:var(--blue)}
.rowstat{display:flex;gap:20px;margin-top:12px;font-size:13px;color:var(--muted);flex-wrap:wrap}
.rowstat b{color:var(--ink);font-weight:700}
.acts{display:grid;gap:9px;margin-top:16px}
.toast{position:fixed;left:50%;bottom:26px;transform:translateX(-50%);background:var(--ink);color:var(--paper);
  padding:10px 16px;font-size:13.5px;font-weight:600;border-radius:2px;opacity:0;pointer-events:none;transition:opacity .2s;z-index:9}
.toast.on{opacity:1}

/* content */
.ad-slot{margin:26px 0;text-align:center}
section.copy{margin-top:44px;border-top:1px solid var(--line);padding-top:26px}
section.copy h2{font-size:19px;font-weight:800;letter-spacing:-.03em;margin:0 0 10px}
section.copy h3{font-size:15px;font-weight:700;margin:20px 0 5px}
section.copy p,section.copy li{font-size:14.5px;color:var(--body);margin:0 0 9px}
section.copy ol{padding-left:19px;margin:0}

article{padding-top:12px}
article h1{font-size:clamp(26px,7vw,34px);font-weight:800;letter-spacing:-.04em;line-height:1.15;margin:0 0 8px}
article .meta{font-size:12.5px;color:var(--muted);margin-bottom:24px}
article h2{font-size:19px;font-weight:800;letter-spacing:-.03em;margin:30px 0 8px}
article p,article li{font-size:15.5px;line-height:1.72;color:var(--body);margin:0 0 14px}
article ul,article ol{padding-left:20px}
article table{width:100%;border-collapse:collapse;margin:6px 0 18px;font-size:14px}
article th,article td{border:1px solid var(--line);padding:7px 9px;text-align:left}
article th{background:var(--card);font-weight:700}
.playcta{display:block;border:1px solid var(--blue);background:var(--blue);color:#fff;text-decoration:none;
  font-weight:700;padding:15px 16px;border-radius:2px;margin:28px 0;text-align:center}
.postlist{list-style:none;padding:0;margin:18px 0 0}
.postlist li{border-bottom:1px solid var(--line);padding:15px 0}
.postlist a{font-weight:700;text-decoration:none;letter-spacing:-.02em}
.postlist span{display:block;font-size:13px;color:var(--muted);margin-top:3px}

footer{margin-top:36px;padding-top:18px;border-top:1px solid var(--line);font-size:12px;color:var(--muted);
  display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px}
footer nav{display:flex;gap:12px;flex-wrap:wrap}
footer a{text-decoration:none}
footer a:hover{text-decoration:underline}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* ---------- 순위표 ---------- */
.nickbar{display:flex;align-items:center;gap:8px;margin-top:14px;font-size:13px;color:var(--muted)}
.nickbar b{color:var(--ink);font-weight:700}
.linkbtn{border:0;background:none;font:inherit;font-size:12.5px;font-weight:600;color:var(--blue);cursor:pointer;padding:2px 0;text-decoration:underline}
#board{margin-top:26px;border-top:1px solid var(--line);padding-top:20px}
.boardhead{display:flex;align-items:baseline;justify-content:space-between}
.boardhead h2{font-size:18px;font-weight:800;letter-spacing:-.03em;margin:0}
.tabs{display:flex;gap:6px;margin:12px 0 10px}
.tabs button{border:1px solid var(--line);background:var(--card);font:inherit;font-size:13px;font-weight:600;
  color:var(--muted);padding:6px 12px;border-radius:2px;cursor:pointer}
.tabs button[aria-pressed="true"]{background:var(--ink);color:var(--paper);border-color:var(--ink)}
.lbrow{display:grid;grid-template-columns:28px 1fr auto auto;gap:10px;align-items:baseline;
  padding:9px 10px;border-bottom:1px solid var(--line);font-size:14px}
.lbrow:first-child{border-top:1px solid var(--line)}
.lbrow.me{background:var(--card);box-shadow:inset 3px 0 0 var(--blue)}
.lbrank{font-weight:800;font-variant-numeric:tabular-nums;color:var(--muted)}
.lbrow:nth-child(1) .lbrank,.lbrow:nth-child(2) .lbrank,.lbrow:nth-child(3) .lbrank{color:var(--blue)}
.lbname{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lblv{font-size:12px;color:var(--muted)}
.lbscore{font-weight:800;font-variant-numeric:tabular-nums;letter-spacing:-.02em}
.lbempty{font-size:13.5px;color:var(--muted);padding:18px 0;text-align:center;margin:0}
.boardmine{font-size:13px;font-weight:700;color:var(--blue);margin:10px 0 0;text-align:right}
.nickbox{border:1px solid var(--blue);background:var(--card);border-radius:2px;padding:14px 16px;margin-top:12px}
.nickbox p{margin:0 0 9px;font-size:13.5px;font-weight:600}
.nickrow{display:flex;gap:8px}
.nickrow input{flex:1;min-width:0;border:1px solid var(--line);background:var(--paper);color:var(--ink);
  font:inherit;font-size:15px;padding:10px 12px;border-radius:2px}
.nickrow input:focus{outline:2px solid var(--blue);outline-offset:0}
.nickrow button{border:1px solid var(--blue);background:var(--blue);color:#fff;font:inherit;font-weight:700;
  padding:10px 16px;border-radius:2px;cursor:pointer;white-space:nowrap}

/* ---------- 확인 팝업 ---------- */
.modal{position:fixed;inset:0;background:rgba(10,12,16,.55);display:flex;align-items:center;
  justify-content:center;padding:20px;z-index:20}
.modalcard{background:var(--card);border:1px solid var(--ink);border-radius:3px;padding:22px 20px;
  max-width:380px;width:100%;animation:pop .14s ease-out}
@keyframes pop{from{transform:scale(.96);opacity:0}}
.modalcard h3{margin:0 0 8px;font-size:18px;font-weight:800;letter-spacing:-.03em}
.modalcard p{margin:0;font-size:14.5px;line-height:1.6;color:var(--body)}
.modalcard p b{color:var(--ink)}
.modalacts{display:grid;grid-template-columns:1fr 1.4fr;gap:9px;margin-top:18px}
.modalacts .btn{text-align:center;padding:13px 10px}

/* ---------- 허브 ---------- */
.hubnote{font-size:13px;color:var(--muted);text-align:center;margin:0 0 16px;min-height:19px}
.gamelist{display:grid;gap:10px}
.gamecard{display:block;border:1px solid var(--ink);background:var(--card);border-radius:2px;
  padding:16px 16px 13px;text-decoration:none;color:var(--ink)}
.gamecard:hover{filter:brightness(.97)}
.gamecard:focus-visible{outline:3px solid var(--blue);outline-offset:2px}
.gamecard.done{border-color:var(--line)}
.gchead{display:flex;align-items:baseline;justify-content:space-between;gap:10px}
.gchead b{font-size:17px;font-weight:800;letter-spacing:-.03em}
.gbadge{font-size:11.5px;font-weight:700;color:var(--muted);white-space:nowrap}
.gbadge.todo{color:var(--blue)}
.gcdesc{margin:5px 0 0;font-size:13px;color:var(--muted);line-height:1.5}
.gcfoot{display:flex;align-items:baseline;justify-content:space-between;gap:10px;
  margin-top:12px;padding-top:10px;border-top:1px solid var(--line);font-size:12.5px;color:var(--muted)}
.gcplay{font-weight:700;color:var(--blue)}

/* ---------- 다른 게임 유도 카드 (결과 화면) ---------- */
#crossPromo{margin-top:22px}
.promo{display:block;border:1px solid var(--line);background:var(--card);border-radius:2px;
  padding:14px 16px;text-decoration:none;color:var(--ink)}
.promo:hover{filter:brightness(.97)}
.promo:focus-visible{outline:3px solid var(--blue);outline-offset:2px}
.promo.hot{border-color:var(--blue)}
.promokicker{display:block;font-size:11.5px;font-weight:700;color:var(--muted);margin-bottom:3px}
.promo.hot .promokicker{color:var(--blue)}
.promo b{font-size:16px;font-weight:800;letter-spacing:-.03em}
.promodesc{display:block;font-size:12.5px;color:var(--muted);margin-top:3px;line-height:1.5}

/* ---------- 패턴 기억 ---------- */
.hud .lives{font-size:15px;letter-spacing:2px;color:var(--red)}
#grid button.mcell{background:var(--line);transition:background .12s ease,transform .07s ease}
#grid button.mcell.lit{background:var(--blue)}
#grid button.mcell.found{background:var(--blue);opacity:.55}
#grid button.mcell.wrong{background:var(--red)}
