| <!DOCTYPE html> |
| <html lang="ko"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <title>Daily Focus - ν루 5λΆμ μ§μ€λ ₯</title> |
| <style> |
| * { |
| margin: 0; |
| padding: 0; |
| box-sizing: border-box; |
| font-family: 'Arial', sans-serif; |
| } |
| |
| body { |
| background: #f5f6fa; |
| color: #2d3436; |
| } |
| |
| .container { |
| max-width: 800px; |
| margin: 0 auto; |
| padding: 20px; |
| } |
| |
| header { |
| text-align: center; |
| padding: 40px 0; |
| background: linear-gradient(135deg, #6c5ce7, #a8e6cf); |
| color: white; |
| border-radius: 15px; |
| margin-bottom: 30px; |
| box-shadow: 0 4px 15px rgba(0,0,0,0.1); |
| } |
| |
| .timer-container { |
| background: white; |
| padding: 30px; |
| border-radius: 15px; |
| box-shadow: 0 4px 15px rgba(0,0,0,0.1); |
| text-align: center; |
| margin-bottom: 30px; |
| } |
| |
| .timer { |
| font-size: 4em; |
| font-weight: bold; |
| color: #6c5ce7; |
| margin: 20px 0; |
| } |
| |
| .controls button { |
| padding: 12px 25px; |
| margin: 0 10px; |
| border: none; |
| border-radius: 25px; |
| background: #6c5ce7; |
| color: white; |
| font-size: 1.1em; |
| cursor: pointer; |
| transition: all 0.3s ease; |
| } |
| |
| .controls button:hover { |
| background: #5849c4; |
| transform: translateY(-2px); |
| } |
| |
| .stats-container { |
| display: grid; |
| grid-template-columns: repeat(3, 1fr); |
| gap: 20px; |
| margin-bottom: 30px; |
| } |
| |
| .stat-card { |
| background: white; |
| padding: 20px; |
| border-radius: 15px; |
| text-align: center; |
| box-shadow: 0 4px 15px rgba(0,0,0,0.1); |
| } |
| |
| .stat-value { |
| font-size: 1.8em; |
| font-weight: bold; |
| color: #6c5ce7; |
| margin: 10px 0; |
| } |
| |
| .progress-container { |
| background: white; |
| padding: 30px; |
| border-radius: 15px; |
| box-shadow: 0 4px 15px rgba(0,0,0,0.1); |
| } |
| |
| .progress-bar { |
| width: 100%; |
| height: 20px; |
| background: #dfe6e9; |
| border-radius: 10px; |
| overflow: hidden; |
| margin: 20px 0; |
| } |
| |
| .progress { |
| width: 0%; |
| height: 100%; |
| background: linear-gradient(135deg, #6c5ce7, #a8e6cf); |
| transition: width 0.3s ease; |
| } |
| |
| @media (max-width: 600px) { |
| .stats-container { |
| grid-template-columns: 1fr; |
| } |
| } |
| </style> |
| </head> |
| <body> |
| <div class="container"> |
| <header> |
| <h1>Daily Focus</h1> |
| <p>ν루 5λΆμ μ§μ€μΌλ‘ μμνλ μ΅κ΄ λ§λ€κΈ°</p> |
| </header> |
|
|
| <div class="timer-container"> |
| <div class="timer">05:00</div> |
| <div class="controls"> |
| <button id="startBtn">μμ</button> |
| <button id="resetBtn">리μ
</button> |
| </div> |
| </div> |
|
|
| <div class="stats-container"> |
| <div class="stat-card"> |
| <h3>μ°μ μΌμ</h3> |
| <div class="stat-value">7μΌ</div> |
| </div> |
| <div class="stat-card"> |
| <h3>μ΄ μ§μ€ μκ°</h3> |
| <div class="stat-value">35λΆ</div> |
| </div> |
| <div class="stat-card"> |
| <h3>λ¬μ±λ₯ </h3> |
| <div class="stat-value">89%</div> |
| </div> |
| </div> |
|
|
| <div class="progress-container"> |
| <h3>μ΄λ² λ¬ λͺ©ν λ¬μ±λ</h3> |
| <div class="progress-bar"> |
| <div class="progress" style="width: 70%"></div> |
| </div> |
| </div> |
| </div> |
|
|
| <script> |
| let timer; |
| let timeLeft = 300; |
| let isRunning = false; |
| |
| const timerDisplay = document.querySelector('.timer'); |
| const startBtn = document.getElementById('startBtn'); |
| const resetBtn = document.getElementById('resetBtn'); |
| |
| function updateTimer() { |
| const minutes = Math.floor(timeLeft / 60); |
| const seconds = timeLeft % 60; |
| timerDisplay.textContent = `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`; |
| } |
| |
| function startTimer() { |
| if (!isRunning) { |
| isRunning = true; |
| startBtn.textContent = 'μΌμμ μ§'; |
| timer = setInterval(() => { |
| timeLeft--; |
| updateTimer(); |
| if (timeLeft === 0) { |
| clearInterval(timer); |
| isRunning = false; |
| startBtn.textContent = 'μμ'; |
| alert('5λΆ μ§μ€ μλ£! μ€λλ μκ³ νμ
¨μ΅λλ€.'); |
| } |
| }, 1000); |
| } else { |
| clearInterval(timer); |
| isRunning = false; |
| startBtn.textContent = 'μμ'; |
| } |
| } |
| |
| function resetTimer() { |
| clearInterval(timer); |
| isRunning = false; |
| timeLeft = 300; |
| updateTimer(); |
| startBtn.textContent = 'μμ'; |
| } |
| |
| startBtn.addEventListener('click', startTimer); |
| resetBtn.addEventListener('click', resetTimer); |
| |
| |
| document.addEventListener('DOMContentLoaded', () => { |
| const progress = document.querySelector('.progress'); |
| progress.style.width = '70%'; |
| }); |
| </script> |
| </body> |
| </html> |