| <!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> |