| <!DOCTYPE html> |
| <html lang="ko"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <meta name="description" content="์ ๊ทธ ์ซ์๊ฐ ๋ค์ด๊ฐ๋์ง ์ค๋ช
ํด ์ฃผ๋ ํ์ตํ ์๋์ฟ ๊ฒ์"> |
| <title>๋ฐฐ์ฐ๋ฉด์ ํธ๋ ์๋์ฟ </title> |
| <link rel="stylesheet" href="style.css"> |
| <script src="script.js" defer></script> |
| </head> |
| <body> |
| <header class="site-header"> |
| <div class="header-copy"> |
| <p class="eyebrow">Explainable Sudoku MVP</p> |
| <h1>๋ฐฐ์ฐ๋ฉด์ ํธ๋ ์๋์ฟ </h1> |
| <p class="intro">์ ๋ต๋ง ๋งํ๋ ๋์ , ๋ค์ ํ ์๊ฐ ์ ์ฑ๋ฆฝํ๋์ง ๋ฐ๋ก ์ค๋ช
ํด ์ฃผ๋ ํ์ตํ ์๋์ฟ ์
๋๋ค.</p> |
| </div> |
| <nav class="top-actions" aria-label="๊ฒ์ ์กฐ์"> |
| <button id="new-game-btn" type="button">์ ํผ์ฆ</button> |
| <button id="hint-btn" type="button">ํํธ ๋ณด๊ธฐ</button> |
| <button id="apply-hint-btn" type="button">ํํธ ์ ์ฉ</button> |
| <button id="check-btn" type="button">์ค๋ต ํ์ธ</button> |
| <button id="reset-btn" type="button">์ด๊ธฐํ</button> |
| </nav> |
| </header> |
|
|
| <main class="layout"> |
| <section class="board-panel" aria-labelledby="board-title"> |
| <div class="panel-head"> |
| <div> |
| <h2 id="board-title">ํ์ฌ ํผ์ฆ</h2> |
| <p id="puzzle-meta" class="muted">๋๋ค ๋ณํ ํผ์ฆ์ ์ค๋นํ๋ ์ค์
๋๋ค.</p> |
| </div> |
| <div class="status-wrap"> |
| <span id="difficulty-badge" class="badge">์
๋ฌธ</span> |
| <p id="game-status" class="status" role="status" aria-live="polite" aria-atomic="true">ํผ์ฆ์ ์ค๋นํ๋ ์ค์
๋๋ค.</p> |
| </div> |
| </div> |
|
|
| <article class="sudoku-shell" aria-label="์๋์ฟ ๋ณด๋ ์์ญ"> |
| <p id="sudoku-help" class="sr-only">๋ฐฉํฅํค๋ก ์นธ์ ์ด๋ํ๊ณ ์ซ์ 1๋ถํฐ 9๊น์ง ์
๋ ฅํ ์ ์์ต๋๋ค.</p> |
| <div id="sudoku-board" class="sudoku-board" role="grid" aria-describedby="sudoku-help"></div> |
| </article> |
| </section> |
|
|
| <aside class="side-panel"> |
| <section class="info-card" aria-labelledby="hint-title"> |
| <h2 id="hint-title">ํ์ต ํํธ</h2> |
| <p id="hint-message" class="hint-message" role="status" aria-live="polite" aria-atomic="true">ํํธ ๋ณด๊ธฐ๋ฅผ ๋๋ฅด๋ฉด ๋ค์ ๋
ผ๋ฆฌ ๋จ๊ณ๋ฅผ ์ค๋ช
ํฉ๋๋ค.</p> |
| </section> |
|
|
| <section class="info-card" aria-labelledby="analysis-title"> |
| <h2 id="analysis-title">๋ถ์ ์์ฝ</h2> |
| <dl class="stats-grid"> |
| <div> |
| <dt>์ฑ์์ง ์นธ</dt> |
| <dd id="filled-count">0</dd> |
| </div> |
| <div> |
| <dt>๋จ์ ์นธ</dt> |
| <dd id="remaining-count">81</dd> |
| </div> |
| <div> |
| <dt>๋ค์ ๊ธฐ์ </dt> |
| <dd id="next-technique">๋๊ธฐ ์ค</dd> |
| </div> |
| <div> |
| <dt>ํผ์ฆ ๋ถ์</dt> |
| <dd id="analysis-summary">์ด๊ธฐ ๋ถ์์ ์ค๋นํ๋ ์ค์
๋๋ค.</dd> |
| </div> |
| </dl> |
| </section> |
|
|
| <section class="info-card" aria-labelledby="log-title"> |
| <h2 id="log-title">ํ์ด ๋ก๊ทธ</h2> |
| <ol id="log-list" class="log-list" role="log" aria-live="polite" aria-relevant="additions text"></ol> |
| </section> |
| </aside> |
| </main> |
|
|
| <footer class="site-footer"> |
| <p>ํ์ฌ MVP๋ ๋จ์ผ ํ๋ณด์ ์จ์ ์ฑ๊ธ ๊ท์น์ ์ค์ฌ์ผ๋ก ์ค๋ช
ํฉ๋๋ค.</p> |
| </footer> |
| </body> |
| </html> |