* { box-sizing: border-box; margin: 0; padding: 0; user-select: none; -webkit-user-select: none; } body { background: radial-gradient(circle at center, #1b2f15 0%, #0a1308 100%); color: #fff; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; min-height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: center; overflow-x: hidden; overflow-y: auto; padding: 8px; } #game-wrapper { display: flex; flex-direction: column; align-items: center; width: min(98vw, calc((98vh - 44px) * 1.5)); max-width: 1920px; aspect-ratio: 900 / 644; margin: 0 auto; position: relative; } /* Fullscreen support (F / F11 or Fullscreen button) */ :fullscreen #game-wrapper, :-webkit-full-screen #game-wrapper { width: min(100vw, calc(100vh * 1.5)); max-width: 100vw; height: 100vh; justify-content: center; padding: 0; margin: 0 auto; } :fullscreen .top-nav-bar, :-webkit-full-screen .top-nav-bar { border-radius: 0; } :fullscreen #game-container, :-webkit-full-screen #game-container { border-radius: 0; max-height: calc(100vh - 44px); } /* Minimalist Clean Top Navigation Bar */ .top-nav-bar { width: 100%; background: linear-gradient(to bottom, #3e2723, #2a160c); border: 3px solid #5d4037; border-bottom: 2px solid #231209; border-radius: 10px 10px 0 0; padding: 4px 10px; display: flex; flex-wrap: nowrap; justify-content: space-between; align-items: center; gap: 8px; box-shadow: 0 4px 10px rgba(0,0,0,0.5); z-index: 10; box-sizing: border-box; } .nav-left, .nav-right { display: flex; align-items: center; flex-wrap: nowrap; gap: 6px; } .btn-menu-main { background: linear-gradient(135deg, #e65100, #bf360c) !important; color: #fff !important; border-color: #ffb74d !important; font-size: 12px !important; padding: 5px 12px !important; box-shadow: 0 2px 6px rgba(230, 81, 0, 0.4) !important; } .btn-menu-main:hover { background: linear-gradient(135deg, #f57c00, #d84315) !important; border-color: #ffe082 !important; transform: translateY(-1px); } .btn-icon-nav { padding: 4px 10px; font-size: 11px; } .nav-btn { background: #2a160c; color: #ffeb3b; border: 1.5px solid #e09f3e; border-radius: 5px; padding: 4px 8px; font-size: 11px; font-weight: bold; cursor: pointer; white-space: nowrap; transition: all 0.15s ease; box-shadow: 0 2px 4px rgba(0,0,0,0.3); } .nav-btn:hover { background: #422817; border-color: #ffd54f; transform: translateY(-1px); } .nav-btn:active { transform: translateY(1px); } /* User Profile Badge */ .profile-badge { display: flex; align-items: center; gap: 6px; background: rgba(0, 0, 0, 0.45); border: 1px solid #8d6e63; border-radius: 5px; padding: 3px 6px; font-size: 11px; color: #c8e6c9; } .profile-badge span { font-weight: bold; max-width: 110px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .btn-mini { background: #4caf50; color: #fff; border: 1px solid #2e7d32; border-radius: 4px; padding: 2px 6px; font-size: 10px; font-weight: bold; cursor: pointer; transition: background 0.15s; } .btn-mini:hover { background: #66bb6a; } /* Main Game Canvas Container */ #game-container { position: relative; width: 100%; height: auto; max-height: calc(98vh - 44px); aspect-ratio: 900 / 600; box-shadow: 0 20px 50px rgba(0, 0, 0, 0.8), 0 0 20px rgba(76, 175, 80, 0.3); border-radius: 0 0 10px 10px; overflow: hidden; border: 3px solid #5d4037; border-top: none; background-color: #388e3c; } canvas#gameCanvas { display: block; width: 100%; height: 100%; cursor: default; touch-action: none; } /* Overlays & Modals */ .overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.75); backdrop-filter: blur(4px); display: flex; flex-direction: column; justify-content: center; align-items: center; z-index: 100; opacity: 1; transition: opacity 0.3s ease; overflow-y: auto; padding: 8px; box-sizing: border-box; } .overlay.hidden { display: none; opacity: 0; } .banner-card { background: linear-gradient(135deg, #422817 0%, #2a160c 100%); border: 4px solid #e09f3e; border-radius: 16px; padding: 20px 28px; text-align: center; box-shadow: 0 10px 30px rgba(0,0,0,0.9); max-width: 500px; max-height: 96%; overflow-y: auto; animation: popIn 0.3s ease-out; box-sizing: border-box; } @keyframes popIn { from { transform: scale(0.8); opacity: 0; } to { transform: scale(1); opacity: 1; } } .banner-card h1 { font-size: 32px; margin-bottom: 8px; color: #ffeb3b; text-shadow: 2px 2px 0 #000, -2px -2px 0 #000, 2px -2px 0 #000, -2px 2px 0 #000; letter-spacing: 1px; } .banner-card p { font-size: 15px; color: #e0e0e0; margin-bottom: 16px; line-height: 1.35; } /* Start Screen Specific Card (Spacious & Fits 600px Canvas) */ .start-card { max-width: 860px; width: 95%; max-height: 96%; padding: 14px 20px; display: flex; flex-direction: column; justify-content: space-between; overflow-y: auto; } .modern-dashboard { background: radial-gradient(circle at 50% 15%, rgba(42, 22, 12, 0.95), rgba(15, 8, 4, 0.98)) !important; border: 3px solid #ffb74d !important; box-shadow: 0 15px 45px rgba(0, 0, 0, 0.85), 0 0 30px rgba(255, 183, 77, 0.25) !important; border-radius: 16px !important; backdrop-filter: blur(12px); } .modern-header { display: flex; justify-content: space-between; align-items: center; gap: 16px; margin-bottom: 8px; border-bottom: 1px solid rgba(255, 183, 77, 0.2); padding-bottom: 8px; } .brand-title-wrap { text-align: left; } .game-logo-text { font-size: 22px !important; font-weight: 900; margin: 0 !important; letter-spacing: 0.5px; text-shadow: 0 2px 8px rgba(0,0,0,0.8), 2px 2px 0 #000; line-height: 1.1; } .logo-plant { color: #aed581; text-shadow: 0 0 10px rgba(139, 195, 74, 0.6), 2px 2px 0 #000; } .logo-vs { font-size: 16px; color: #ffca28; font-style: italic; margin: 0 2px; } .logo-zombie { color: #e57373; text-shadow: 0 0 10px rgba(239, 83, 80, 0.6), 2px 2px 0 #000; } .game-version-badge { font-size: 10px; color: #ffe082; letter-spacing: 0.8px; font-weight: bold; opacity: 0.9; margin-top: 3px; } .start-hero-profile { display: flex; align-items: center; gap: 10px; background: rgba(0, 0, 0, 0.55); border: 1.5px solid #8d6e63; border-radius: 12px; padding: 6px 12px; cursor: pointer; transition: all 0.2s ease; box-shadow: 0 4px 12px rgba(0,0,0,0.4); } .start-hero-profile:hover { background: rgba(66, 40, 23, 0.7); border-color: #ffd54f; transform: translateY(-2px); box-shadow: 0 6px 16px rgba(255, 213, 79, 0.3); } .hero-avatar { font-size: 26px; line-height: 1; } .hero-profile-data { display: flex; flex-direction: column; align-items: flex-start; gap: 2px; } .hero-user-line { display: flex; align-items: center; gap: 8px; } .hero-username { font-size: 13px; font-weight: bold; color: #fff; max-width: 140px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .badge-offline { font-size: 9px; background: #546e7a; color: #eceff1; padding: 1px 6px; border-radius: 10px; font-weight: bold; text-transform: uppercase; } .badge-online { font-size: 9px; background: #2e7d32; color: #c8e6c9; padding: 1px 6px; border-radius: 10px; font-weight: bold; text-transform: uppercase; box-shadow: 0 0 6px rgba(76, 175, 80, 0.6); } .hero-stats-line { display: flex; gap: 8px; font-size: 11px; color: #ffecb3; } .mode-selector-wrapper { margin-bottom: 6px; } .mode-selector-title { font-size: 11px; font-weight: bold; color: #ffe082; letter-spacing: 1px; margin-bottom: 4px; text-transform: uppercase; opacity: 0.9; } .start-header h1 { font-size: 24px; margin: 0 0 3px 0; color: #ffeb3b; text-shadow: 2px 2px 0 #000, -2px -2px 0 #000, 2px -2px 0 #000, -2px 2px 0 #000; letter-spacing: 1px; } .start-header p { font-size: 12px; color: #e0e0e0; margin: 0 0 8px 0; line-height: 1.25; } .start-record-line { font-size: 13px; color: #ffeb3b; margin-bottom: 8px; } .start-hero-row { display: flex; gap: 10px; justify-content: center; margin-bottom: 8px; flex-wrap: wrap; } .btn-hero { padding: 8px 22px; font-size: 15px; } .btn-play-main { background: linear-gradient(135deg, #43a047, #2e7d32) !important; border-color: #81c784 !important; font-size: 16px !important; padding: 10px 28px !important; box-shadow: 0 4px 0 #1b5e20, 0 8px 20px rgba(46, 125, 50, 0.5) !important; letter-spacing: 0.5px; } .btn-play-main:hover { background: linear-gradient(135deg, #4caf50, #388e3c) !important; transform: translateY(-2px); box-shadow: 0 6px 0 #1b5e20, 0 10px 25px rgba(76, 175, 80, 0.6) !important; } .btn-campaign { background: linear-gradient(135deg, #0288d1, #01579b) !important; border-color: #4fc3f7 !important; box-shadow: 0 4px 0 #013660, 0 8px 15px rgba(2, 136, 209, 0.4) !important; } .btn-campaign:hover { background: linear-gradient(135deg, #039be5, #0288d1) !important; } .btn-inventory { background: linear-gradient(135deg, #8e24aa, #6a1b9a) !important; border-color: #ba68c8 !important; box-shadow: 0 4px 0 #4a148c, 0 8px 15px rgba(142, 36, 170, 0.4) !important; } .btn-inventory:hover { background: linear-gradient(135deg, #9c27b0, #7b1fa2) !important; } .start-activities-grid { display: flex; gap: 6px; justify-content: center; flex-wrap: wrap; margin-bottom: 8px; } .btn-act { padding: 5px 11px; font-size: 11px; font-weight: bold; border-radius: 6px; cursor: pointer; transition: all 0.15s; box-shadow: 0 2px 4px rgba(0,0,0,0.3); white-space: nowrap; } .btn-act:hover { transform: translateY(-1px); box-shadow: 0 4px 8px rgba(0,0,0,0.4); } .btn-act:active { transform: translateY(1px); } .btn-bugreport { background: linear-gradient(to bottom, #0288d1, #01579b); color: #fff; border: 1.5px solid #4fc3f7; } .btn-bugreport:hover { background: linear-gradient(to bottom, #039be5, #0288d1); } .btn { background: linear-gradient(to bottom, #8bc34a, #4caf50); color: #fff; border: 2px solid #2e7d32; border-radius: 8px; padding: 8px 20px; font-size: 16px; font-weight: bold; cursor: pointer; box-shadow: 0 4px 0 #1b5e20, 0 8px 15px rgba(0,0,0,0.4); transition: transform 0.1s, box-shadow 0.1s; text-shadow: 1px 1px 2px rgba(0,0,0,0.6); } .btn:hover { background: linear-gradient(to bottom, #9ccc65, #66bb6a); } .btn:active { transform: translateY(3px); box-shadow: 0 1px 0 #1b5e20, 0 3px 5px rgba(0,0,0,0.4); } .btn-secondary { background: linear-gradient(to bottom, #6d4c41, #4e342e); border-color: #3e2723; box-shadow: 0 4px 0 #27140b, 0 8px 15px rgba(0,0,0,0.4); color: #ffeb3b; } .btn-secondary:hover { background: linear-gradient(to bottom, #795548, #5d4037); } .btn-secondary:active { transform: translateY(3px); box-shadow: 0 1px 0 #27140b; } .footer-info { margin-top: 6px; font-size: 11px; color: #81c784; opacity: 0.85; letter-spacing: 0.5px; } /* Mode Selectors */ .mode-selector { display: flex; gap: 6px; justify-content: center; margin-bottom: 8px; flex-wrap: wrap; } .mode-btn { background: #2a160c; color: #ffeb3b; border: 1.5px solid #8d6e63; border-radius: 5px; padding: 5px 10px; font-size: 12px; font-weight: bold; cursor: pointer; transition: all 0.2s; } .mode-btn:hover, .mode-btn.active { background: #422817; border-color: #ffeb3b; box-shadow: 0 0 10px rgba(255, 235, 59, 0.4); } .btn-shop { background: linear-gradient(to bottom, #ff9800, #f57c00); border-color: #e65100; box-shadow: 0 4px 0 #bf360c, 0 8px 15px rgba(0,0,0,0.4); } .btn-shop:hover { background: linear-gradient(to bottom, #ffa726, #fb8c00); } /* Shop Modal Styles */ .shop-card { max-width: 680px; width: 95%; max-height: 90vh; overflow-y: auto; } .shop-tabs { display: flex; gap: 8px; margin-bottom: 12px; justify-content: center; } .shop-tab { background: rgba(0, 0, 0, 0.4); color: #cfd8dc; border: 1.5px solid #8d6e63; border-radius: 6px; padding: 6px 14px; font-size: 13px; font-weight: bold; cursor: pointer; transition: all 0.2s; } .shop-tab:hover { background: rgba(255, 255, 255, 0.1); } .shop-tab.active { background: #388e3c; color: #fff; border-color: #81c784; } .shop-items { display: flex; flex-direction: column; gap: 12px; text-align: left; } .shop-plants-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 10px; text-align: left; } .shop-item { background: rgba(0, 0, 0, 0.4); border: 2px solid #8d6e63; border-radius: 8px; padding: 10px 14px; display: flex; justify-content: space-between; align-items: center; gap: 12px; } .shop-plant-card { background: rgba(0, 0, 0, 0.45); border: 1.5px solid #8d6e63; border-radius: 8px; padding: 10px 12px; display: flex; align-items: center; justify-content: space-between; gap: 10px; transition: border-color 0.2s, transform 0.15s; } .shop-plant-card:hover { border-color: #ffeb3b; transform: translateY(-2px); } .shop-plant-icon { font-size: 28px; width: 44px; height: 44px; border-radius: 6px; background: rgba(255, 255, 255, 0.08); display: flex; align-items: center; justify-content: center; border: 1px solid rgba(255, 255, 255, 0.2); flex-shrink: 0; } .shop-plant-info { flex: 1; min-width: 0; } .shop-plant-info h4 { font-size: 14px; color: #ffeb3b; margin: 0 0 2px 0; } .shop-plant-info p { font-size: 11px; color: #b0bec5; margin: 0; line-height: 1.2; } .shop-plant-cost { font-size: 11px; color: #ffd54f; font-weight: bold; margin-bottom: 2px; } .badge-purchased { background: rgba(76, 175, 80, 0.25); border: 1px solid #81c784; color: #a5d6a7; font-size: 11px; font-weight: bold; padding: 4px 8px; border-radius: 4px; white-space: nowrap; } .btn-buy { background: #4caf50; color: #fff; border: none; border-radius: 6px; padding: 8px 14px; font-size: 13px; font-weight: bold; cursor: pointer; white-space: nowrap; transition: background 0.2s; } .btn-buy:hover:not(:disabled) { background: #66bb6a; } .btn-buy:disabled { background: #555; color: #888; cursor: not-allowed; } /* Pre-Battle Seed Selection & Inventory Modal */ .seed-select-card { max-width: 740px; width: 95%; max-height: 90vh; overflow-y: auto; position: relative; } .seed-select-card .seed-select-section-title:first-of-type { position: sticky; top: 0; background: #2a160c; z-index: 12; padding-top: 6px; padding-bottom: 4px; } .seed-select-section-title { display: flex; justify-content: space-between; align-items: center; font-size: 13px; font-weight: bold; color: #ffeb3b; margin-bottom: 6px; border-bottom: 1px solid rgba(255, 235, 59, 0.3); padding-bottom: 4px; } .seed-deck-bar { position: sticky; top: 28px; z-index: 11; display: flex; gap: 8px; padding: 8px 10px; background: rgba(35, 18, 11, 0.96); backdrop-filter: blur(6px); border: 1.5px solid #81c784; border-radius: 8px; min-height: 76px; align-items: center; flex-wrap: wrap; margin-bottom: 12px; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.5); } .seed-slot-card { position: relative; width: 62px; height: 68px; background: linear-gradient(135deg, #37474f, #263238); border: 1.5px solid #81c784; border-radius: 6px; display: flex; flex-direction: column; align-items: center; justify-content: center; cursor: pointer; user-select: none; transition: transform 0.15s, border-color 0.2s, box-shadow 0.2s; } .seed-slot-card:hover { transform: translateY(-3px) scale(1.04); border-color: #ff5252; box-shadow: 0 0 8px rgba(255, 82, 82, 0.5); } .seed-slot-card .slot-icon { font-size: 24px; } .seed-slot-card .slot-cost { font-size: 10px; font-weight: bold; color: #ffeb3b; background: rgba(0, 0, 0, 0.6); padding: 1px 4px; border-radius: 3px; margin-top: 2px; } .seed-slot-card .slot-remove-badge { position: absolute; top: -5px; right: -5px; background: #f44336; color: #fff; font-size: 10px; width: 16px; height: 16px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: bold; border: 1px solid #fff; } .seed-slot-empty { width: 62px; height: 68px; border: 2px dashed rgba(255, 255, 255, 0.25); border-radius: 6px; display: flex; align-items: center; justify-content: center; color: rgba(255, 255, 255, 0.35); font-size: 11px; font-weight: bold; } .seed-inventory-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(130px, 1fr)); gap: 8px; max-height: 300px; overflow-y: auto; padding: 6px; background: rgba(0, 0, 0, 0.3); border-radius: 8px; border: 1px solid rgba(255, 255, 255, 0.1); } .seed-inv-item { background: rgba(0, 0, 0, 0.4); border: 1.5px solid #5d4037; border-radius: 6px; padding: 8px 6px; display: flex; flex-direction: column; align-items: center; justify-content: space-between; cursor: pointer; transition: all 0.2s; user-select: none; min-height: 94px; } .seed-inv-item:hover:not(.locked) { border-color: #69f0ae; transform: translateY(-2px); background: rgba(105, 240, 174, 0.1); } .seed-inv-item.in-deck { border-color: #ffeb3b; background: rgba(255, 235, 59, 0.15); box-shadow: 0 0 6px rgba(255, 235, 59, 0.3); } .seed-inv-item.locked { opacity: 0.65; border-color: #424242; cursor: default; } .seed-inv-icon { font-size: 26px; margin-bottom: 2px; } .seed-inv-name { font-size: 11px; font-weight: bold; color: #fff; text-align: center; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; } .seed-inv-sun { font-size: 10px; color: #ffd54f; margin-top: 1px; } .seed-inv-status { margin-top: 4px; font-size: 10px; font-weight: bold; padding: 2px 6px; border-radius: 3px; } .seed-inv-status.status-deck { background: #ffb300; color: #000; } .seed-inv-status.status-ready { background: rgba(76, 175, 80, 0.3); color: #81c784; border: 1px solid #81c784; } .seed-inv-status.status-lock { background: rgba(244, 67, 54, 0.2); color: #ef5350; border: 1px solid #ef5350; } .seed-select-actions { display: flex; gap: 12px; justify-content: center; align-items: center; margin-top: 14px; flex-wrap: wrap; } /* Auth Modal & Profile Dashboard Styles */ .auth-card { max-width: 440px; width: 92%; } .auth-view.hidden { display: none; } .profile-header-card { display: flex; align-items: center; gap: 14px; background: rgba(0, 0, 0, 0.4); border: 1.5px solid #81c784; border-radius: 10px; padding: 10px 14px; margin-bottom: 12px; } .profile-avatar-icon { font-size: 32px; background: rgba(255, 255, 255, 0.1); width: 50px; height: 50px; border-radius: 50%; display: flex; align-items: center; justify-content: center; border: 2px solid #81c784; } .profile-info-text { text-align: left; } .profile-username { font-size: 18px; font-weight: bold; color: #ffeb3b; } .profile-status-badge { font-size: 11px; color: #a5d6a7; margin-top: 2px; } .profile-stats-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 8px; margin-bottom: 8px; } .profile-stat-box { background: rgba(0, 0, 0, 0.35); border: 1px solid #5d4037; border-radius: 8px; padding: 8px 10px; display: flex; flex-direction: column; align-items: flex-start; } .profile-stat-box .stat-label { font-size: 11px; color: #bcaaa4; } .profile-stat-box .stat-value { font-size: 15px; font-weight: bold; color: #fff; margin-top: 2px; } .btn-pause { background: #37474f; color: #eceff1; border-color: #78909c; } .btn-pause:hover { background: #455a64; border-color: #b0bec5; } .btn-pause.active { background: #d84315 !important; border-color: #ffab91 !important; color: #fff !important; box-shadow: 0 0 10px rgba(255, 87, 34, 0.6) !important; } .auth-input { width: 100%; padding: 10px 14px; border: 2px solid #8d6e63; border-radius: 6px; background: rgba(0, 0, 0, 0.5); color: #fff; font-size: 14px; outline: none; transition: border-color 0.2s, box-shadow 0.2s; } .auth-input:focus { border-color: #ffeb3b; box-shadow: 0 0 8px rgba(255, 235, 59, 0.4); } .auth-error { font-size: 13px; color: #ff8a80; background: rgba(244, 67, 54, 0.2); border: 1px solid #e57373; border-radius: 4px; padding: 6px 10px; text-align: left; } .auth-error.hidden { display: none; } .btn-auth-submit { background: linear-gradient(to bottom, #8bc34a, #4caf50); } .btn-danger { background: linear-gradient(to bottom, #e53935, #c62828); border: 1px solid #ff5252; color: #fff; } .btn-danger:hover { background: linear-gradient(to bottom, #f44336, #d32f2f); } .btn-logout-mini { background: rgba(211, 47, 47, 0.85); color: #fff; border: 1px solid #ef5350; margin-left: 4px; } .btn-logout-mini:hover { background: #f44336; } /* Active Sessions and Devices Styling */ .auth-sessions-section { text-align: left; } .auth-sessions-list { scrollbar-width: thin; scrollbar-color: #81c784 rgba(0, 0, 0, 0.4); } .auth-sessions-list::-webkit-scrollbar { width: 5px; } .auth-sessions-list::-webkit-scrollbar-thumb { background: #81c784; border-radius: 4px; } .session-card { display: flex; align-items: center; justify-content: space-between; background: rgba(0, 0, 0, 0.45); border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 8px; padding: 8px 10px; gap: 10px; transition: background 0.2s, border-color 0.2s; } .session-card:hover { background: rgba(0, 0, 0, 0.6); } .session-card.is-current { border-color: #81c784; background: rgba(76, 175, 80, 0.14); } .session-icon { font-size: 20px; display: flex; align-items: center; justify-content: center; width: 34px; height: 34px; background: rgba(255, 255, 255, 0.08); border-radius: 6px; flex-shrink: 0; } .session-details { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; } .session-dev-name { font-size: 13px; font-weight: bold; color: #ffeb3b; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .session-meta { font-size: 11px; color: #b0bec5; display: flex; gap: 8px; flex-wrap: wrap; } .session-current-badge { font-size: 10.5px; font-weight: bold; color: #a5d6a7; background: rgba(46, 125, 50, 0.4); border: 1px solid #66bb6a; padding: 3px 8px; border-radius: 12px; white-space: nowrap; flex-shrink: 0; } .btn-terminate-session { font-size: 11px; padding: 4px 9px; border-radius: 5px; white-space: nowrap; flex-shrink: 0; } @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } .rotating { display: inline-block; animation: spin 0.5s linear infinite; } /* Workshop / Garden Lab Styles */ .btn-workshop { background: linear-gradient(to bottom, #00897b, #004d40); border: 2px solid #64ffda; color: #fff; } .btn-workshop:hover { background: linear-gradient(to bottom, #00bfa5, #00695c); } .workshop-card { max-width: 820px; width: 94%; max-height: 550px; display: flex; flex-direction: column; padding: 14px 20px; overflow: hidden; box-sizing: border-box; } .workshop-header { flex-shrink: 0; text-align: center; } .materials-bar { display: flex; justify-content: center; align-items: center; gap: 12px; flex-wrap: wrap; background: rgba(0, 0, 0, 0.45); border: 1px solid #00897b; border-radius: 8px; padding: 6px 14px; margin-bottom: 10px; } .mat-item { display: flex; align-items: center; gap: 4px; font-size: 13px; font-weight: bold; color: #e0f2f1; } .mat-item span:nth-child(2) { color: #a7ffeb; } .mat-item.mat-coins span:nth-child(2) { color: #ffd54f; } .workshop-tabs { display: flex; justify-content: center; gap: 10px; margin-bottom: 10px; } .ws-tab { background: rgba(0, 0, 0, 0.35); color: #b0bec5; border: 2px solid #546e7a; border-radius: 6px; padding: 6px 18px; font-size: 13px; font-weight: bold; cursor: pointer; transition: all 0.2s; } .ws-tab.active { background: #00897b; color: #fff; border-color: #64ffda; box-shadow: 0 0 10px rgba(100, 255, 218, 0.3); } .ws-content { flex: 1; overflow-y: auto; padding-right: 4px; min-height: 250px; max-height: 310px; } .ws-content.hidden { display: none; } .upgrade-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(340px, 1fr)); gap: 10px; } .upgrade-card { background: rgba(0, 0, 0, 0.4); border: 1px solid #00897b; border-radius: 8px; padding: 10px 12px; display: flex; flex-direction: column; justify-content: space-between; gap: 8px; transition: transform 0.15s, border-color 0.15s; } .upgrade-card:hover { border-color: #64ffda; background: rgba(0, 0, 0, 0.55); } .upgrade-card-header { display: flex; justify-content: space-between; align-items: center; } .upgrade-title { display: flex; align-items: center; gap: 8px; font-size: 14px; font-weight: bold; color: #fff; } .upgrade-level-badge { font-size: 11px; font-weight: bold; padding: 2px 8px; border-radius: 10px; background: #37474f; color: #eceff1; } .upgrade-level-badge.maxed { background: linear-gradient(135deg, #ffd700, #ff8f00); color: #212121; } .upgrade-desc { font-size: 12px; color: #cfd8dc; line-height: 1.3; } .upgrade-stats-next { font-size: 11px; color: #80cbc4; background: rgba(0, 77, 64, 0.35); border-left: 3px solid #26a69a; padding: 4px 8px; border-radius: 0 4px 4px 0; } .upgrade-cost-row { display: flex; justify-content: space-between; align-items: center; margin-top: 4px; } .cost-items { display: flex; flex-wrap: wrap; gap: 6px; font-size: 11px; color: #e0f2f1; } .cost-badge { background: rgba(255, 255, 255, 0.08); border-radius: 4px; padding: 2px 6px; } .cost-badge.insufficient { color: #ff8a80; border: 1px solid rgba(244, 67, 54, 0.4); } .btn-upgrade-action { background: #00897b; color: #fff; border: none; border-radius: 6px; padding: 6px 12px; font-size: 12px; font-weight: bold; cursor: pointer; transition: background 0.15s; white-space: nowrap; } .btn-upgrade-action:hover:not(:disabled) { background: #26a69a; } .btn-upgrade-action:disabled { background: #455a64; color: #90a4ae; cursor: not-allowed; } /* Zen Garden Styles */ .btn-zengarden { background: linear-gradient(to bottom, #558b2f, #33691e); border: 2px solid #aed581; color: #fff; } .btn-zengarden:hover { background: linear-gradient(to bottom, #689f38, #558b2f); } .zengarden-card { max-width: 820px; width: 94%; max-height: 550px; display: flex; flex-direction: column; padding: 12px 18px; overflow: hidden; box-sizing: border-box; } .zen-tools-bar { display: flex; justify-content: center; gap: 8px; flex-wrap: wrap; margin-bottom: 8px; } .btn-zen-tool { background: rgba(0, 0, 0, 0.45); border: 1px solid #7cb342; border-radius: 6px; color: #f1f8e9; padding: 5px 12px; font-size: 12px; font-weight: bold; cursor: pointer; transition: all 0.15s; } .btn-zen-tool:hover { background: rgba(124, 179, 66, 0.3); border-color: #aed581; } .btn-zen-tool.active { background: #558b2f; border-color: #dcedc8; box-shadow: 0 0 8px rgba(174, 213, 129, 0.5); } .zen-canvas-wrap { display: flex; justify-content: center; align-items: center; background: #1b3b22; border: 2px solid #558b2f; border-radius: 8px; overflow: hidden; } #zenCanvas { display: block; max-width: 100%; height: auto; cursor: pointer; } /* Almanac Styles */ .btn-almanac { background: linear-gradient(to bottom, #ef6c00, #e65100); border: 2px solid #ffb74d; color: #fff; } .btn-almanac:hover { background: linear-gradient(to bottom, #f57c00, #ef6c00); } .almanac-card { max-width: 820px; width: 94%; max-height: 550px; display: flex; flex-direction: column; padding: 12px 18px; overflow: hidden; box-sizing: border-box; } .almanac-header { text-align: center; margin-bottom: 8px; } .almanac-tabs { display: flex; justify-content: center; gap: 12px; margin-top: 6px; } .almanac-tab { background: rgba(0, 0, 0, 0.4); color: #cfd8dc; border: 2px solid #78909c; border-radius: 6px; padding: 5px 18px; font-size: 13px; font-weight: bold; cursor: pointer; transition: all 0.2s; } .almanac-tab.active { background: #ef6c00; color: #fff; border-color: #ffb74d; box-shadow: 0 0 10px rgba(255, 183, 77, 0.4); } .almanac-body { display: flex; gap: 12px; height: 380px; overflow: hidden; } .almanac-grid { flex: 1; display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; overflow-y: auto; padding-right: 6px; } .almanac-slot { background: rgba(0, 0, 0, 0.4); border: 2px solid #546e7a; border-radius: 8px; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 8px 4px; cursor: pointer; transition: transform 0.15s, border-color 0.15s, background 0.15s; } .almanac-slot:hover { border-color: #ffb74d; background: rgba(255, 255, 255, 0.08); transform: translateY(-2px); } .almanac-slot.selected { border-color: #ffeb3b; background: rgba(255, 235, 59, 0.2); box-shadow: 0 0 8px rgba(255, 235, 59, 0.4); } .almanac-slot-icon { font-size: 26px; margin-bottom: 4px; } .almanac-slot-name { font-size: 10px; font-weight: bold; color: #eceff1; text-align: center; line-height: 1.1; } .almanac-detail-card { width: 320px; background: rgba(0, 0, 0, 0.5); border: 2px solid #8d6e63; border-radius: 8px; padding: 14px 16px; display: flex; flex-direction: column; gap: 8px; overflow-y: auto; } .almanac-detail-title { display: flex; align-items: center; gap: 10px; } .almanac-detail-icon { font-size: 34px; } .almanac-detail-name { font-size: 17px; font-weight: bold; color: #ffd54f; } .almanac-stat-row { display: flex; justify-content: space-between; font-size: 11px; color: #cfd8dc; border-bottom: 1px solid rgba(255, 255, 255, 0.1); padding: 2px 0; } .almanac-stat-row strong { color: #fff; } .almanac-desc-text { font-size: 12px; color: #e0e0e0; line-height: 1.3; } .almanac-lore-quote { font-size: 11px; font-style: italic; color: #a7ffeb; background: rgba(0, 77, 64, 0.3); border-left: 3px solid #00bfa5; padding: 6px 8px; border-radius: 0 4px 4px 0; line-height: 1.25; } /* Achievements & Roguelike Styles */ .btn-achievements { background: linear-gradient(to bottom, #fbc02d, #f57f17); border: 2px solid #fff59d; color: #212121; } .btn-achievements:hover { background: linear-gradient(to bottom, #fff176, #fbc02d); } .achievements-card { max-width: 820px; width: 94%; max-height: 550px; display: flex; flex-direction: column; padding: 14px 18px; overflow: hidden; box-sizing: border-box; } .achievements-header { text-align: center; margin-bottom: 8px; } .achievements-grid { flex: 1; display: grid; grid-template-columns: repeat(auto-fill, minmax(350px, 1fr)); gap: 10px; overflow-y: auto; padding-right: 6px; } .ach-item { background: rgba(0, 0, 0, 0.45); border: 1px solid #795548; border-radius: 8px; padding: 10px 12px; display: flex; gap: 12px; align-items: center; transition: border-color 0.15s, background 0.15s; } .ach-item.completed { border-color: #ffd54f; background: rgba(255, 213, 79, 0.1); } .ach-icon { font-size: 30px; flex-shrink: 0; } .ach-info { flex: 1; display: flex; flex-direction: column; gap: 4px; } .ach-title { font-size: 13px; font-weight: bold; color: #fff; } .ach-desc { font-size: 11px; color: #cfd8dc; line-height: 1.2; } .ach-progress-track { width: 100%; height: 6px; background: rgba(255, 255, 255, 0.15); border-radius: 3px; overflow: hidden; margin-top: 2px; } .ach-progress-bar { height: 100%; background: linear-gradient(to right, #4caf50, #8bc34a); border-radius: 3px; transition: width 0.3s; } .btn-claim-ach { background: #ffb300; color: #212121; border: none; border-radius: 6px; padding: 6px 12px; font-size: 11px; font-weight: bold; cursor: pointer; white-space: nowrap; transition: background 0.15s; } .btn-claim-ach:hover { background: #ffd54f; } .btn-claim-ach:disabled { background: #424242; color: #9e9e9e; cursor: default; } /* Achievement Toast Notification */ .achievement-toast { position: fixed; top: 20px; right: -350px; width: 300px; background: linear-gradient(135deg, #37474f 0%, #212121 100%); border: 2px solid #ffd54f; border-radius: 8px; box-shadow: 0 8px 24px rgba(0, 0, 0, 0.8), 0 0 12px rgba(255, 213, 79, 0.4); padding: 10px 14px; display: flex; align-items: center; gap: 12px; z-index: 1000; transition: right 0.4s cubic-bezier(0.18, 0.89, 0.32, 1.28); pointer-events: none; } .achievement-toast.visible { right: 20px; } .ach-toast-icon { font-size: 32px; } .ach-toast-subtitle { font-size: 10px; font-weight: bold; color: #ffd54f; letter-spacing: 0.5px; } .ach-toast-title { font-size: 13px; font-weight: bold; color: #fff; } /* Roguelike Draft Card Styles */ .draft-card { max-width: 780px; width: 92%; text-align: center; padding: 20px 24px; } .draft-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; } .draft-option-card { background: rgba(0, 0, 0, 0.5); border: 2px solid #00897b; border-radius: 10px; padding: 18px 14px; display: flex; flex-direction: column; align-items: center; justify-content: space-between; gap: 10px; cursor: pointer; transition: transform 0.2s, border-color 0.2s, box-shadow 0.2s; } .draft-option-card:hover { transform: translateY(-4px); border-color: #64ffda; box-shadow: 0 6px 18px rgba(100, 255, 218, 0.35); background: rgba(0, 0, 0, 0.65); } .draft-option-icon { font-size: 44px; } .draft-option-title { font-size: 15px; font-weight: bold; color: #ffd54f; } .draft-option-desc { font-size: 12px; color: #cfd8dc; line-height: 1.3; } .draft-badge-type { font-size: 10px; font-weight: bold; padding: 2px 8px; border-radius: 8px; background: rgba(255, 255, 255, 0.1); color: #80cbc4; } /* Tree of Wisdom & Cheats Styling */ .btn-tree { background: linear-gradient(to bottom, #43a047, #2e7d32); color: #fff; } .btn-tree:hover { background: linear-gradient(to bottom, #4caf50, #388e3c); } .btn-leaderboard { background: linear-gradient(to bottom, #f57f17, #e65100); color: #fff; } .btn-leaderboard:hover { background: linear-gradient(to bottom, #fbc02d, #f57f17); } .tree-card { max-width: 680px; width: 92%; padding: 18px 24px; } .tree-display-box { display: flex; align-items: center; gap: 20px; background: rgba(0, 0, 0, 0.45); border: 1px solid #4caf50; border-radius: 10px; padding: 16px; margin-bottom: 14px; } .tree-visual-wrapper { font-size: 68px; display: flex; align-items: center; justify-content: center; min-width: 80px; filter: drop-shadow(0 0 12px rgba(129, 199, 132, 0.6)); } .tree-wisdom-bubble { flex: 1; text-align: left; } .tree-wisdom-title { font-size: 16px; font-weight: bold; color: #a5d6a7; margin-bottom: 4px; } .tree-wisdom-quote { font-size: 13px; color: #fff; line-height: 1.4; font-style: italic; } .tree-cheats-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 8px; } .tree-cheat-item { display: flex; justify-content: space-between; align-items: center; background: rgba(0, 0, 0, 0.4); border: 1px solid #757575; border-radius: 6px; padding: 6px 12px; } .tree-cheat-name { font-size: 13px; font-weight: bold; color: #ffd54f; } .tree-cheat-btn { font-size: 11px; padding: 3px 10px; border-radius: 4px; cursor: pointer; border: none; font-weight: bold; } .tree-cheat-btn.active { background: #4caf50; color: #fff; } .tree-cheat-btn.inactive { background: #616161; color: #e0e0e0; } /* Leaderboards Styling */ .leaderboard-card { max-width: 720px; width: 92%; padding: 18px 24px; } .leaderboard-tabs { display: flex; justify-content: center; gap: 6px; flex-wrap: wrap; margin-bottom: 14px; } .lb-tab { background: rgba(0, 0, 0, 0.4); border: 1px solid #b78103; color: #ffe082; padding: 6px 12px; border-radius: 6px; font-size: 12px; font-weight: bold; cursor: pointer; transition: all 0.2s; } .lb-tab:hover { background: rgba(255, 213, 79, 0.2); border-color: #ffd54f; } .lb-tab.active { background: #f57f17; color: #fff; border-color: #fff59d; } .leaderboard-table-wrapper { background: rgba(0, 0, 0, 0.5); border: 1px solid #795548; border-radius: 8px; max-height: 280px; overflow-y: auto; } .lb-table { width: 100%; border-collapse: collapse; text-align: left; font-size: 13px; } .lb-table th { background: rgba(62, 39, 35, 0.8); color: #ffd54f; padding: 8px 12px; font-weight: bold; } .lb-table td { padding: 8px 12px; border-bottom: 1px solid rgba(255, 255, 255, 0.08); color: #e0e0e0; } .lb-table tr:hover { background: rgba(255, 255, 255, 0.05); } .lb-rank-badge { font-weight: bold; padding: 2px 6px; border-radius: 4px; } .lb-rank-1 { color: #ffd700; font-size: 15px; } .lb-rank-2 { color: #c0c0c0; font-size: 14px; } .lb-rank-3 { color: #cd7f32; font-size: 14px; } /* ========================================================================== VISUAL SKINS & THEMES ENGINE (v2.1) ========================================================================== */ /* 1. Cyberpunk Neon Theme */ body.theme-cyberpunk { background: radial-gradient(circle at center, #0f051d 0%, #030008 100%); color: #00e5ff; } body.theme-cyberpunk .top-nav-bar { background: linear-gradient(to bottom, #1f0b35, #0d001a); border-color: #00e5ff; box-shadow: 0 0 16px rgba(0, 229, 255, 0.4), inset 0 0 10px rgba(233, 30, 99, 0.25); } body.theme-cyberpunk .nav-btn { background: #0e021c; border-color: #e91e63; color: #00e5ff; box-shadow: 0 0 8px rgba(233, 30, 99, 0.35); text-shadow: 0 0 4px rgba(0, 229, 255, 0.8); } body.theme-cyberpunk .nav-btn:hover { background: #1d0537; border-color: #00e5ff; box-shadow: 0 0 12px rgba(0, 229, 255, 0.6); } body.theme-cyberpunk #gameCanvas { border: 3px solid #00e5ff; box-shadow: 0 0 24px rgba(0, 229, 255, 0.4), 0 0 40px rgba(233, 30, 99, 0.2); } body.theme-cyberpunk .banner-card { background: linear-gradient(135deg, #18092b, #090014); border-color: #00e5ff; box-shadow: 0 0 25px rgba(0, 229, 255, 0.35); } /* 2. Retro 8-bit Arcade Theme */ body.theme-retro8bit { background: #050505; font-family: 'Courier New', Courier, monospace; } body.theme-retro8bit .top-nav-bar { background: #111; border: 3px solid #10b981; border-radius: 0; box-shadow: 0 4px 0 #047857; } body.theme-retro8bit .nav-btn { border-radius: 0; border: 2px solid #10b981; background: #000; color: #34d399; box-shadow: none; } body.theme-retro8bit .nav-btn:hover { background: #10b981; color: #000; } body.theme-retro8bit #gameCanvas { border: 4px solid #10b981; border-radius: 0; box-shadow: 0 0 10px rgba(16, 185, 129, 0.3); } body.theme-retro8bit .banner-card { border-radius: 0; border: 4px solid #10b981; background: #0a0a0a; } /* 3. Winter Frost Theme */ body.theme-winter { background: radial-gradient(circle at center, #1a237e 0%, #0d1326 100%); color: #e0f7fa; } body.theme-winter .top-nav-bar { background: linear-gradient(to bottom, #1e3c72, #2a5298); border-color: #80deea; box-shadow: 0 0 15px rgba(128, 222, 234, 0.35); } body.theme-winter .nav-btn { background: #152b52; border-color: #b2ebf2; color: #e0f7fa; } body.theme-winter .nav-btn:hover { background: #25467f; border-color: #ffffff; box-shadow: 0 0 10px rgba(255, 255, 255, 0.5); } body.theme-winter #gameCanvas { border: 3px solid #80deea; box-shadow: 0 0 25px rgba(128, 222, 234, 0.4); } body.theme-winter .banner-card { background: linear-gradient(135deg, #132442, #0b1528); border-color: #80deea; box-shadow: 0 0 25px rgba(128, 222, 234, 0.3); } /* Boss Rush Button Accent */ #btn-mode-bossrush.active { border-color: #ff1744 !important; background: linear-gradient(135deg, #d50000, #b71c1c) !important; box-shadow: 0 0 12px rgba(255, 23, 68, 0.6) !important; } /* Campaign Level Select Modal & Cards */ .btn-campaign { background: linear-gradient(to bottom, #2e7d32, #1b5e20); border: 2px solid #81c784; color: #fff; } .btn-campaign:hover { background: linear-gradient(to bottom, #388e3c, #2e7d32); box-shadow: 0 0 10px rgba(129, 199, 132, 0.4); } .campaign-card { max-width: 860px; width: 95%; max-height: 560px; display: flex; flex-direction: column; padding: 14px 20px; overflow: hidden; box-sizing: border-box; } .campaign-header { flex-shrink: 0; text-align: center; } .campaign-tabs { display: flex; justify-content: center; gap: 8px; margin-bottom: 12px; flex-wrap: wrap; } .campaign-tab { background: rgba(0, 0, 0, 0.4); color: #cfd8dc; border: 2px solid #37474f; border-radius: 6px; padding: 6px 14px; font-size: 13px; font-weight: bold; cursor: pointer; transition: all 0.2s; } .campaign-tab:hover { border-color: #81c784; color: #fff; } .campaign-tab.active { background: #2e7d32; color: #fff; border-color: #81c784; box-shadow: 0 0 10px rgba(129, 199, 132, 0.4); } .campaign-levels-grid { flex: 1; display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 12px; overflow-y: auto; padding: 4px; } .campaign-level-card { background: rgba(0, 0, 0, 0.45); border: 2px solid #388e3c; border-radius: 8px; padding: 12px; display: flex; flex-direction: column; justify-content: space-between; box-sizing: border-box; transition: transform 0.2s, border-color 0.2s, box-shadow 0.2s; } .campaign-level-card:not(.locked):hover { transform: translateY(-2px); border-color: #81c784; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.5); } .campaign-level-card.current { border-color: #ffeb3b; box-shadow: 0 0 12px rgba(255, 235, 59, 0.35); background: rgba(46, 125, 50, 0.2); } .campaign-level-card.locked { opacity: 0.55; border-color: #455a64; background: rgba(0, 0, 0, 0.65); } .level-card-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 6px; } .level-code { font-size: 16px; font-weight: bold; color: #ffeb3b; } .level-badge { padding: 2px 8px; border-radius: 12px; font-size: 11px; font-weight: bold; } .level-badge.badge-done { background: #2e7d32; color: #a5d6a7; border: 1px solid #4caf50; } .level-badge.badge-current { background: #f57f17; color: #fffde7; border: 1px solid #fbc02d; } .level-badge.badge-unlocked { background: #1565c0; color: #bbdefb; border: 1px solid #42a5f5; } .level-badge.badge-locked { background: #37474f; color: #b0bec5; border: 1px solid #78909c; } .level-card-body { margin-bottom: 8px; } .level-title { font-size: 14px; font-weight: bold; color: #ffffff; margin-bottom: 4px; } .level-desc { font-size: 11px; color: #b0bec5; line-height: 1.35; } .level-card-info { display: flex; gap: 8px; font-size: 11px; color: #ffd54f; margin-bottom: 8px; flex-wrap: wrap; } .btn-play-level { width: 100%; padding: 7px 0; font-size: 12px; font-weight: bold; border-radius: 6px; cursor: pointer; border: 1px solid #81c784; background: linear-gradient(to bottom, #43a047, #2e7d32); color: #fff; transition: all 0.2s; } .btn-play-level:not(.locked):hover { background: linear-gradient(to bottom, #4caf50, #388e3c); box-shadow: 0 0 8px rgba(129, 199, 132, 0.5); } .btn-play-level.locked { background: #37474f; color: #78909c; border-color: #546e7a; cursor: not-allowed; } /* Bug Reporting & Feedback Modal Styles */ .bugreport-card { max-width: 780px; width: 95%; max-height: 570px; display: flex; flex-direction: column; padding: 14px 18px; overflow: hidden; box-sizing: border-box; } .bug-header { flex-shrink: 0; margin-bottom: 8px; } .bug-count-badge { background: #0277bd; color: #e1f5fe; padding: 2px 8px; border-radius: 12px; font-size: 11px; font-weight: bold; border: 1px solid #4fc3f7; } .bug-filter-tabs { display: flex; gap: 6px; justify-content: flex-start; flex-wrap: wrap; margin-top: 6px; } .bug-tab { background: rgba(0, 0, 0, 0.4); color: #b0bec5; border: 1.5px solid #455a64; border-radius: 5px; padding: 4px 10px; font-size: 11px; font-weight: bold; cursor: pointer; transition: all 0.2s; } .bug-tab:hover { border-color: #4fc3f7; color: #fff; } .bug-tab.active { background: #0288d1; border-color: #4fc3f7; color: #fff; box-shadow: 0 0 8px rgba(79, 195, 247, 0.4); } .bugreport-feed { flex: 1; overflow-y: auto; display: flex; flex-direction: column; gap: 8px; background: rgba(0, 0, 0, 0.35); border: 1px solid #37474f; border-radius: 8px; padding: 8px 10px; margin-bottom: 8px; max-height: 250px; min-height: 140px; } .bug-empty { text-align: center; color: #90a4ae; font-size: 13px; padding: 24px 0; } .bug-card { background: rgba(255, 255, 255, 0.05); border: 1px solid #455a64; border-radius: 6px; padding: 8px 10px; display: flex; flex-direction: column; gap: 4px; text-align: left; } .bug-card.is-fixed { border-color: #2e7d32; background: rgba(46, 125, 50, 0.12); } .bug-card-top { display: flex; justify-content: space-between; align-items: center; gap: 8px; flex-wrap: wrap; font-size: 12px; } .bug-author { color: #fff; font-size: 12px; } .bug-meta { display: flex; gap: 6px; align-items: center; font-size: 11px; } .bug-category { padding: 1px 6px; border-radius: 4px; font-weight: bold; font-size: 10px; } .cat-bug { background: #b71c1c; color: #ffcdd2; } .cat-feature { background: #e65100; color: #ffe0b2; } .cat-visual { background: #4a148c; color: #e1bee7; } .cat-balance { background: #004d40; color: #b2dfdb; } .bug-status { padding: 1px 6px; border-radius: 4px; font-size: 10px; font-weight: bold; } .status-new { background: #c62828; color: #fff; } .status-progress { background: #f57f17; color: #fffde7; } .status-done { background: #2e7d32; color: #e8f5e9; } .bug-time { color: #90a4ae; font-size: 10px; } .bug-text { font-size: 12px; color: #eceff1; line-height: 1.35; word-break: break-word; } .bug-reply { margin-top: 4px; padding: 6px 8px; background: rgba(2, 136, 209, 0.15); border-left: 3px solid #0288d1; border-radius: 0 4px 4px 0; } .reply-tag { font-size: 10px; font-weight: bold; color: #4fc3f7; display: block; margin-bottom: 2px; } .reply-text { font-size: 11px; color: #e1f5fe; } .bugreport-form { flex-shrink: 0; display: flex; flex-direction: column; gap: 6px; } .bug-form-row { display: flex; gap: 8px; } .bug-input { flex: 1; background: rgba(0, 0, 0, 0.5); border: 1.5px solid #546e7a; border-radius: 6px; padding: 6px 10px; color: #fff; font-size: 12px; outline: none; } .bug-input:focus { border-color: #4fc3f7; } .bug-select { background: #263238; border: 1.5px solid #546e7a; border-radius: 6px; padding: 6px 10px; color: #fff; font-size: 12px; outline: none; cursor: pointer; } .bug-textarea { flex: 1; background: rgba(0, 0, 0, 0.5); border: 1.5px solid #546e7a; border-radius: 6px; padding: 6px 10px; color: #fff; font-size: 12px; outline: none; resize: none; font-family: inherit; } .bug-textarea:focus { border-color: #4fc3f7; } .btn-bug-send { background: linear-gradient(to bottom, #0288d1, #01579b); color: #fff; border: 1px solid #4fc3f7; border-radius: 6px; padding: 6px 16px; font-weight: bold; font-size: 12px; cursor: pointer; white-space: nowrap; transition: all 0.2s; } .btn-bug-send:hover { background: linear-gradient(to bottom, #039be5, #0288d1); box-shadow: 0 0 8px rgba(79, 195, 247, 0.5); } .bug-status-msg { font-size: 11px; padding: 4px; border-radius: 4px; text-align: center; } .bug-status-msg.success { background: rgba(46, 125, 50, 0.4); color: #a5d6a7; border: 1px solid #4caf50; } .bug-status-msg.error { background: rgba(183, 28, 28, 0.4); color: #ffcdd2; border: 1px solid #e53935; } /* ========================================================================== 📱 Mobile Slide-out Drawer Menu & Backdrop ========================================================================== */ .drawer-backdrop { position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; height: 100dvh; background: rgba(0, 0, 0, 0.65); backdrop-filter: blur(4px); z-index: 1000; transition: opacity 0.25s ease; opacity: 1; } .drawer-backdrop.hidden { display: none; opacity: 0; } .mobile-drawer { position: fixed; top: 0; right: 0; width: 290px; max-width: 85vw; height: 100vh; height: 100dvh; background: linear-gradient(180deg, #3e2723 0%, #1a0d05 100%); border-left: 3px solid #e09f3e; box-shadow: -8px 0 30px rgba(0, 0, 0, 0.85); z-index: 1001; display: flex; flex-direction: column; transform: translateX(0); transition: transform 0.28s cubic-bezier(0.4, 0, 0.2, 1); padding-top: env(safe-area-inset-top, 0px); padding-bottom: env(safe-area-inset-bottom, 0px); box-sizing: border-box; } .mobile-drawer.hidden { transform: translateX(100%); pointer-events: none; } .drawer-header { padding: 14px 16px; background: rgba(0, 0, 0, 0.35); border-bottom: 2px solid #5d4037; display: flex; justify-content: space-between; align-items: center; } .drawer-header h2 { font-size: 16px; color: #ffeb3b; margin: 0; } .btn-drawer-close { background: rgba(255, 255, 255, 0.1); border: 1px solid #8d6e63; color: #fff; font-size: 16px; width: 32px; height: 32px; border-radius: 50%; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: all 0.15s; } .btn-drawer-close:hover { background: #d32f2f; border-color: #f44336; } .drawer-body { flex: 1; overflow-y: auto; padding: 10px 12px; display: flex; flex-direction: column; gap: 8px; } .drawer-item { width: 100%; background: #2a160c; color: #ffeb3b; border: 1.5px solid #8d6e63; border-radius: 8px; padding: 10px 12px; font-size: 13px; font-weight: bold; text-align: left; cursor: pointer; transition: all 0.15s ease; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3); display: flex; align-items: center; gap: 8px; } .drawer-item:hover, .drawer-item:active { background: #422817; border-color: #ffd54f; transform: translateX(-2px); } .btn-drawer-bug { border-color: #0288d1; color: #e1f5fe; margin-top: 6px; } .btn-drawer-bug:hover { background: #0277bd; } /* ========================================================================== 📱 Comprehensive Mobile & Tablet Responsive Rules (@media) ========================================================================== */ /* Tablets & Mobile Screens (<= 768px) */ @media screen and (max-width: 768px) { body { padding: 0; justify-content: flex-start; } #game-wrapper { width: 100%; max-width: 100vw; } .top-nav-bar { border-radius: 0; border-left: none; border-right: none; padding: 4px 6px; padding-top: max(4px, env(safe-area-inset-top)); } /* Hide long list of top links; use drawer button instead */ .desktop-nav-links { display: none !important; } .btn-drawer-toggle { display: inline-flex !important; } .nav-btn { font-size: 10px; padding: 4px 6px; } .profile-badge { padding: 2px 4px; font-size: 10px; } .profile-badge span { max-width: 70px; } #game-container { border-radius: 0; border-left: none; border-right: none; border-bottom: none; max-height: calc(100dvh - 42px); width: 100vw; } /* Fullscreen & Bottom-sheet style modals for mobile */ .overlay { padding: 4px; } .banner-card { max-width: 96vw; width: 96vw; padding: 14px 12px; max-height: 94dvh; } .start-card h1 { font-size: 22px; } .start-card p { font-size: 11px; margin-bottom: 8px; } .mode-selector { gap: 4px; margin-bottom: 8px; } .mode-btn { font-size: 11px; padding: 6px 8px; } .start-hero-row { flex-direction: column; gap: 6px; } .btn-hero { font-size: 14px; padding: 10px 16px; width: 100%; } .start-activities-grid { grid-template-columns: repeat(2, 1fr); gap: 6px; } .btn-act { font-size: 11px; padding: 8px 6px; } /* Modal Grids responsive */ .shop-items { grid-template-columns: 1fr; gap: 8px; } .almanac-layout { flex-direction: column; max-height: 80vh; } .almanac-grid { grid-template-columns: repeat(4, 1fr) !important; } .almanac-details { width: 100%; } .workshop-tabs { flex-wrap: wrap; gap: 4px; } .workshop-tab { font-size: 11px; padding: 5px 8px; flex: 1; text-align: center; } .campaign-levels-grid { grid-template-columns: repeat(5, 1fr) !important; gap: 4px !important; } } /* Landscape Mode for Smartphones (< 540px height) */ @media screen and (orientation: landscape) and (max-height: 540px) { body { padding: 0; } .top-nav-bar { padding: 2px 6px; padding-left: max(6px, env(safe-area-inset-left)); padding-right: max(6px, env(safe-area-inset-right)); } .nav-btn { padding: 2px 5px; font-size: 9px; } #game-container { height: calc(100dvh - 30px); max-height: calc(100dvh - 30px); } .banner-card { max-height: 96dvh; padding: 10px 14px; } } /* ─── Crazy Dave Story Dialogues & Balloons ─── */ .dave-card { max-width: 520px; width: 92%; background: linear-gradient(135deg, #2b1810 0%, #170d08 100%); border: 3px solid #ffb300; box-shadow: 0 12px 40px rgba(0, 0, 0, 0.9), 0 0 25px rgba(255, 179, 0, 0.35); border-radius: 16px; padding: 22px 24px; animation: popIn 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275); } .dave-character-wrap { display: flex; align-items: center; gap: 14px; margin-bottom: 14px; border-bottom: 1px solid rgba(255, 179, 0, 0.25); padding-bottom: 12px; } .dave-avatar { font-size: 40px; background: radial-gradient(circle, #5d4037, #21120b); border: 2px solid #ffd54f; border-radius: 50%; width: 60px; height: 60px; display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.6); animation: daveWobble 2.2s infinite ease-in-out; flex-shrink: 0; } @keyframes daveWobble { 0%, 100% { transform: rotate(0deg) scale(1); } 25% { transform: rotate(-5deg) scale(1.05); } 75% { transform: rotate(5deg) scale(1.05); } } .dave-title-wrap { text-align: left; } .dave-speaker-name { color: #ffca28; font-size: 20px; margin: 0; text-shadow: 1px 1px 2px #000; font-weight: 800; letter-spacing: 0.5px; } .dave-subtitle { color: #bcaaa4; font-size: 12px; margin-top: 2px; } .dave-speech-bubble { position: relative; background: rgba(255, 255, 255, 0.08); border: 2px solid #8d6e63; border-radius: 12px; padding: 16px 18px; margin-bottom: 18px; text-align: left; backdrop-filter: blur(6px); } .dave-text { font-size: 15px; color: #fff9c4; line-height: 1.45; margin: 0; font-weight: 600; text-shadow: 0 1px 3px rgba(0, 0, 0, 0.8); } .btn-dave-continue { background: linear-gradient(135deg, #2e7d32, #43a047); font-size: 15px; font-weight: bold; padding: 10px 32px; border: 2px solid #a5d6a7; letter-spacing: 0.5px; box-shadow: 0 4px 14px rgba(46, 125, 50, 0.5); transition: transform 0.15s, box-shadow 0.15s; cursor: pointer; } .btn-dave-continue:hover { transform: translateY(-2px); box-shadow: 0 6px 20px rgba(76, 175, 80, 0.7); } /* ─── Profile Extended Lifetime Statistics ─── */ .profile-lifetime-section { margin-top: 10px; padding: 10px; background: rgba(0, 0, 0, 0.28); border-radius: 8px; border: 1px solid rgba(255, 255, 255, 0.12); } .profile-section-title { font-size: 11px; font-weight: bold; color: #ffca28; margin-bottom: 6px; text-align: left; letter-spacing: 0.5px; } .lifetime-stats-grid { margin-bottom: 0; } .profile-stat-box.full-width { grid-column: span 2; } /* ─── Crazy Dave's Casino & Bank Modal ─── */ .casino-card { max-width: 680px; width: 95%; background: radial-gradient(circle at top, #2e1045 0%, #120726 60%, #080312 100%); border: 3px solid #ffca28; border-radius: 14px; box-shadow: 0 12px 36px rgba(0,0,0,0.85), 0 0 24px rgba(255, 202, 40, 0.35); padding: 18px; } .casino-balance-bar { display: flex; justify-content: space-around; gap: 10px; background: rgba(0, 0, 0, 0.5); border: 1px solid rgba(255, 202, 40, 0.3); border-radius: 8px; padding: 8px 12px; margin-bottom: 12px; font-size: 13px; } .casino-tabs { display: flex; justify-content: center; gap: 12px; margin-bottom: 12px; } .casino-tab { background: #28143d; color: #b0bec5; border: 1px solid #7b1fa2; border-radius: 6px; padding: 6px 18px; cursor: pointer; font-weight: bold; font-size: 13px; transition: all 0.2s; } .casino-tab.active { background: linear-gradient(135deg, #d81b60, #8e24aa); color: #fff; border-color: #ffca28; box-shadow: 0 0 10px rgba(216, 27, 96, 0.6); } .slot-machine-cabinet { background: #180928; border: 2px solid #ba68c8; border-radius: 12px; padding: 16px; margin-bottom: 12px; box-shadow: inset 0 0 18px rgba(0,0,0,0.8); } .slot-reels-frame { display: flex; justify-content: center; gap: 16px; margin-bottom: 12px; } .slot-reel { width: 90px; height: 90px; background: #ffffff; border: 4px solid #ffd54f; border-radius: 12px; display: flex; align-items: center; justify-content: center; font-size: 48px; box-shadow: inset 0 4px 8px rgba(0,0,0,0.35), 0 4px 12px rgba(0,0,0,0.5); user-select: none; transition: transform 0.15s ease-in-out; } .slot-reel.spinning { animation: reelShake 0.1s infinite alternate; } @keyframes reelShake { 0% { transform: translateY(-4px); } 100% { transform: translateY(4px); } } .slot-result-banner { text-align: center; font-size: 14px; font-weight: bold; color: #ffeb3b; min-height: 22px; padding: 6px; background: rgba(0,0,0,0.3); border-radius: 6px; } .slot-controls { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 12px; flex-wrap: wrap; } .bet-selector { display: flex; align-items: center; gap: 6px; } .btn-bet { background: #371a52; color: #fff; border: 1px solid #9c27b0; border-radius: 6px; padding: 6px 12px; cursor: pointer; font-weight: bold; font-size: 12px; } .btn-bet.active { background: #ffb300; color: #000; border-color: #fff; } .btn-spin { background: linear-gradient(135deg, #e91e63, #9c27b0); color: #fff; font-size: 15px; font-weight: bold; padding: 8px 24px; border-radius: 8px; border: 2px solid #ffeb3b; cursor: pointer; box-shadow: 0 4px 14px rgba(233, 30, 99, 0.6); transition: transform 0.1s; } .btn-spin:active { transform: scale(0.96); } .slot-paytable { display: grid; grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); gap: 6px; background: rgba(0, 0, 0, 0.4); border-radius: 8px; padding: 8px; font-size: 11px; color: #cfd8dc; border: 1px solid rgba(255,255,255,0.08); } .bank-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; } @media (max-width: 600px) { .bank-grid { grid-template-columns: 1fr; } } .bank-box { background: rgba(0, 0, 0, 0.45); border: 1px solid #546e7a; border-radius: 10px; padding: 12px; display: flex; flex-direction: column; } .bank-actions-row { display: flex; gap: 6px; margin-top: auto; } /* ─── Zombie Lab Mutations (Workshop Tab 3) ─── */ .zombie-tier-card { border-color: #ab47bc !important; background: linear-gradient(135deg, rgba(74, 20, 140, 0.25) 0%, rgba(38, 50, 56, 0.4) 100%) !important; } .zombie-tier-badge { background: #7b1fa2 !important; color: #fff !important; }