diff --git a/ody git.html b/ody git.html
deleted file mode 100644
index e69de29..0000000
diff --git a/ody git.js b/ody git.js
new file mode 100644
index 0000000..d8df560
--- /dev/null
+++ b/ody git.js
@@ -0,0 +1,242 @@
+// Simple Blackjack implementation
+const SUITS = ['♠','♥','♦','♣'];
+const RANKS = ['A','2','3','4','5','6','7','8','9','10','J','Q','K'];
+
+const dealerHandEl = document.getElementById('dealer-hand');
+const playerHandEl = document.getElementById('player-hand');
+const dealerValueEl = document.getElementById('dealer-value');
+const playerValueEl = document.getElementById('player-value');
+const balanceEl = document.getElementById('balance');
+const betInput = document.getElementById('bet-input');
+const betBtn = document.getElementById('bet-btn');
+const currentBetEl = document.getElementById('current-bet');
+const hitBtn = document.getElementById('hit');
+const standBtn = document.getElementById('stand');
+const doubleBtn = document.getElementById('double');
+const newRoundBtn = document.getElementById('new-round');
+const messageEl = document.getElementById('message');
+
+let deck = [];
+let dealer = [];
+let player = [];
+let dealerHidden = true;
+let balance = 1000;
+let currentBet = 0;
+let inRound = false;
+
+// Membuat deck kartu
+function makeDeck() {
+ deck = [];
+ for (let s of SUITS) {
+ for (let r of RANKS) {
+ deck.push({ suit: s, rank: r });
+ }
+ }
+}
+
+// Shuffle
+function shuffle() {
+ for (let i = deck.length - 1; i > 0; i--) {
+ const j = Math.floor(Math.random() * (i + 1));
+ [deck[i], deck[j]] = [deck[j], deck[i]];
+ }
+}
+
+// Nilai kartu
+function cardValue(card) {
+ if (card.rank === 'A') return 11;
+ if (['J','Q','K'].includes(card.rank)) return 10;
+ return Number(card.rank);
+}
+
+// Nilai total tangan
+function handValues(hand) {
+ let total = 0;
+ let aceCount = 0;
+
+ for (let c of hand) {
+ total += cardValue(c);
+ if (c.rank === 'A') aceCount++;
+ }
+
+ while (total > 21 && aceCount > 0) {
+ total -= 10;
+ aceCount--;
+ }
+
+ return total;
+}
+
+// Render kartu
+function renderHand(container, hand, hideFirst = false) {
+ container.innerHTML = '';
+
+ hand.forEach((card, i) => {
+ const div = document.createElement('div');
+ div.className = 'card';
+
+ // warna merah ♥ ♦
+ if (card.suit === '♥' || card.suit === '♦') {
+ div.classList.add('red');
+ }
+
+ if (hideFirst && i === 0) {
+ div.className = "card back";
+ div.textContent = "🂠";
+ } else {
+ div.innerHTML = `
+
${card.rank}${card.suit}
+ ${card.rank}${card.suit}
+ `;
+ }
+
+ container.appendChild(div);
+ });
+}
+
+// Update UI
+function updateUI() {
+ renderHand(playerHandEl, player, false);
+ renderHand(dealerHandEl, dealer, dealerHidden);
+
+ dealerValueEl.textContent = dealerHidden ? "?" : handValues(dealer);
+ playerValueEl.textContent = handValues(player);
+
+ balanceEl.textContent = balance;
+ currentBetEl.textContent = currentBet;
+
+ hitBtn.disabled = !inRound;
+ standBtn.disabled = !inRound;
+ doubleBtn.disabled = !inRound;
+
+ if (!inRound) {
+ messageEl.textContent = "Pasang taruhan untuk mulai.";
+ }
+}
+
+// Mulai ronde
+function startRound() {
+ if (inRound) return;
+
+ const bet = Number(betInput.value);
+
+ if (bet <= 0 || bet > balance) {
+ messageEl.textContent = "Taruhan tidak valid!";
+ return;
+ }
+
+ balance -= bet;
+ currentBet = bet;
+
+ makeDeck();
+ shuffle();
+
+ dealer = [deck.pop(), deck.pop()];
+ player = [deck.pop(), deck.pop()];
+
+ dealerHidden = true;
+ inRound = true;
+
+ messageEl.textContent = "Permainan dimulai!";
+ updateUI();
+
+ // Natural blackjack
+ if (handValues(player) === 21) {
+ playerStand();
+ }
+}
+
+// Player hit
+function playerHit() {
+ if (!inRound) return;
+ player.push(deck.pop());
+ updateUI();
+
+ if (handValues(player) > 21) {
+ dealerHidden = false;
+ messageEl.textContent = "Kamu bust! Dealer menang.";
+ inRound = false;
+ updateUI();
+ }
+}
+
+// Player stand
+function playerStand() {
+ if (!inRound) return;
+
+ dealerHidden = false;
+
+ while (handValues(dealer) < 17) {
+ dealer.push(deck.pop());
+ }
+
+ const pv = handValues(player);
+ const dv = handValues(dealer);
+
+ if (dv > 21 || pv > dv) {
+ messageEl.textContent = "Kamu menang!";
+ balance += currentBet * 2;
+ } else if (pv === dv) {
+ messageEl.textContent = "Seri!";
+ balance += currentBet;
+ } else {
+ messageEl.textContent = "Dealer menang!";
+ }
+
+ currentBet = 0;
+ inRound = false;
+ updateUI();
+}
+
+// Double down
+function playerDouble() {
+ if (!inRound) return;
+ if (balance < currentBet) {
+ messageEl.textContent = "Saldo tidak cukup untuk double!";
+ return;
+ }
+
+ balance -= currentBet;
+ currentBet *= 2;
+
+ player.push(deck.pop());
+ updateUI();
+
+ if (handValues(player) > 21) {
+ dealerHidden = false;
+ messageEl.textContent = "Bust saat double! Dealer menang.";
+ inRound = false;
+ return updateUI();
+ }
+
+ playerStand();
+}
+
+// Reset game
+newRoundBtn.addEventListener('click', () => {
+ balance = 1000;
+ currentBet = 0;
+ dealer = [];
+ player = [];
+ deck = [];
+ inRound = false;
+ dealerHidden = true;
+ messageEl.textContent = "Bank di-reset.";
+ updateUI();
+});
+
+// Events
+betBtn.addEventListener('click', startRound);
+hitBtn.addEventListener('click', playerHit);
+standBtn.addEventListener('click', playerStand);
+doubleBtn.addEventListener('click', playerDouble);
+
+// Keyboard shortcut
+window.addEventListener('keydown', e => {
+ if (e.key === 'h') playerHit();
+ if (e.key === 's') playerStand();
+ if (e.key === 'd') playerDouble();
+ if (e.key === 'Enter') startRound();
+});
+
+updateUI();
\ No newline at end of file